具体实施方式
正如前文描述,目前在许多大数据场景中需要应用到候选数据。这些候选数据的使用方式包括图内使用方式和图外使用方式。这两种方式各有缺陷。对于图内使用方式,候选数据需要固化到神经网络图结构中,与图结构紧紧耦合,使数据更新和存储均受限于图结构所属的深度学习图计算框架内,自由度极低。对于图外使用方式,候选数据需要预处理为适合输入至图结构中的参数,在该方式中,候选数据作为输入参数的引入提升了图结构中参数传递和维护的难度,同时也会带来额外的计算开销。可见,无论是数据更新或是图结构中参数的传递,会由于当前候选数据的使用方式而存在不便。候选数据是提供数据服务的数据基础,在候选数据使用方式带来的不便,也会拉低数据服务的能力上限。例如,在推荐和搜索等大数据场景下,导致推荐结果和搜索结果的不准确、准确性不稳定、匹配度较低等问题。
基于以上问题,本申请中提供了一种通过图内、图外混合式的图计算架构实现数据服务的方法和装置。以下结合实施例和附图进行详细说明。
方法实施例
在本申请实施例中,采用图结构内部的自定义算子来获取图结构外部的候选数据。在一些应用场景中(例如召回计算中)仅需要获取到候选数据集合便可以进行后续计算,不需要特定获取到某一条候选数据。而在一切其他应用场景中,可能需要具体到某一条候选数据。在下面的实施例中首先介绍获取候选数据集合以进行数据服务的实现方式。
参见图1,该图为本申请实施例提供的一种通过图结构内的自定义算子获取图外候选数据集合的示意图。在图1所示的神经网络图结构可以是TensorFlow或者Pytorch等开源的深度学习图计算框架中的神经网络图结构基础上实现。图1所示的神经网络图结构区别于当前常用的神经网络图结构,在图结构内部包括一自定义算子(Custom Op),该自定义算在作为该图结构的一部分。该自定义算子可以用于获取图结构外部的数据,例如大数据场景中面对数据服务的需求常需要使用的大规模的候选数据。自定义算子可以注入于神经网络图结构内的任一节点上,如图1中所示,通过某节点的自定义算子进行对图外候选数据集合的访问。
参见图2,该图为本申请实施例提供的一种数据服务方法的流程图。如图2所示的数据服务方法包括:
S201:目标数据服务的进程启动后,通过神经网络图结构中的自定义算子获取神经网络图结构外部目标数据服务对应的候选数据集合。
本申请实施例所提及的数据服务是指:需要将大量候选数据作为数据基础在线进行的运算过程。本申请实施例中,为了便于说明,定义了目标数据服务。目标数据服务具体是指具有某一特定目的且亟待执行的数据服务。作为示例,目标数据服务可以是:基于搜索词提供搜索结果,或者,基于用户的历史购物信息推荐商品。
基于目标数据服务的不同,运算所需要的数据基础也存在差别。例如,当目标数据服务是基于搜索词提供搜索结果,则目标数据服务对应的候选数据可以是新闻报道;当目标数据服务是基于用户的历史购物信息推荐商品,则目标数据服务对应的候选数据可以是商品信息。
在进行目标数据服务之前,首先需要启动目标数据服务的进程。目标数据服务的进程的启动可以收到特定的操作触发。例如,响应于用户输入搜索词后的确认操作,触发目标数据服务的进程启动。再例如,响应于用户在商品页面的滑动操作,触发目标数据服务的进程启动。在实际应用中,不限于以上启动进程的触发机制,此处对于启动数据服务进程的触发机制不进行限制。
目标数据服务的进程启动后,结合图1示意,神经网络图结构中的自定义算子可以获取神经网络图结构外部目标数据服务对应的候选数据集合。在一种可选的实现方式中,候选数据预先封装在神经网络图结构外部的数据结构中。作为示例,该数据结构可以是矩阵,例如,矩阵中的一行或者一列可以代表一条候选数据,矩阵中另一个维度则代表一条候选数据的组成维度。矩阵中的一条候选数据可以用向量形式表示。该数据结构因包含了大量的候选数据而可以作为候选数据集合。
在实际应用中,每一个候选数据集合具有名称,一个候选数据集合中每一条候选数据具有唯一的标识。例如可以将候选数据在候选数据集合中的行数或者列数作为候选数据的标识,当然也可以根据候选数据的内容或用途为候选数据分配标识。此处对于标识的表现形式不做限定。候选数据集合的名称可以是通过随机分配或者其他方式分配的唯一编码,也可以是基于候选数据集合的内容或作用形成的描述。不同候选数据集合的名称互不相同,因此,候选数据集合的名称可以用于唯一地确定候选数据集合。此外,一条候选数据集合在其所封装于的数据结构中具有唯一对应的指针地址,该指针地址可以用于后期获取候选数据集合。为了保证自定义算子对图结构外部的候选数据集合进行获取的可实现性,具体实现时,可以设定预设信息载体,将候选数据集合的名称作为该载体的名称,并将候选数据集合的指针地址加入到载体的内容中。另外,再将候选数据集合的名称设为自定义算子的固化参数。
如此,在执行本步骤S201时,具体地,可以由自定义算子根据固化参数和此前介绍的预设信息载体来获得目标数据服务对应的候选数据集合的指针地址。通过所述自定义算子根据所述固化参数获得预设信息载体(此时以固化参数中候选数据集合的名称作为索引);接着根据所述预设信息载体查询其内容,获得所述候选数据集合的指针地址。最后,自定义算子根据指针地址访问获取图外的候选数据集合。
本申请实施例描述的预设信息载体,即是指,通过自身的名称和内容使对图外候选数据集合的获取成为可能的信息载体。在实际应用中,预设信息载体包括多种实现方式。例如,预设信息载体可以静态变量(static variable),共享内存(shared memory)中的共享变量(shared variable),或者文件(files)。以预设信息载体为共享变量为例,将候选数据集合名称作为共享变量名,将候选数据集合的指针地址作为共享变量的值。本申请实施例对于预设信息载体的实现形式不进行限定。
上述方案的实施实现基于候选数据集合的指针地址对候选数据集合的直接获取。作为另一种实现方式,还可以预先对所述候选数据集合进行封装,得到所述候选数据集合的封装类;再由所述自定义算子通过调用封装类的接口函数,获取候选数据集合。需要说明的是,在实际应用中,也可以在提供目标数据服务之前,基于候选数据集合进行一些预设计算,获得相应的计算结果。预设计算的计算方式可以是预设设定好的,例如预设计算可以是求取平均数、最小值或者排序结果等。预设计算可以是与目标数据服务相关的计算方式,本申请实施例中对于预设计算不做限定。预设计算的计算结果也可以通过调用封装类的接口函数获得。具体实现时,可以根据目标数据服务的使用需求,选择获取候选数据集合,或是获取基于候选数据集合执行预设计算所得到的计算结果。
以上实现方式通过调用封装类的接口函数,实现了对候选数据集合或者其相关计算结果的间接获取。由于候选数据集合位于神经网络图结构的外部,因此,候选数据集合和神经网络图结构是相对脱离的。而图结构内的自定义算子作为图结构与图外候选数据集合之间的“桥梁”,使候选数据集合能够参与到图结构所执行的目标数据服务中。
S202:利用神经网络图结构和候选数据集合执行目标数据服务。
在执行过S201后,神经网络图结构已借助自定义算子获得图外的候选数据集合。接着,神经网络图结构便可以根据这些获取到的候选数据集合执行目标数据服务。需要说明的是,本申请实施例提及的神经网络图结构中图参数已经预先训练完毕。因此,本步骤S202描述的就是该神经网络图结构基于候选数据集合进行图计算,获得目标数据服务的执行结果(例如搜索结果、推荐结果)的过程。
在不同的应用场景中,涉及到的目标数据服务可能不同,另外,神经网络图结构基于实际需求也可能存在结构上和参数上的差异。此处对于神经网络图结构的结构及参数以及执行目标数据服务的实现过程不做限定。
以上即为本申请实施例提供的一种数据服务方法。在该方法中,借助于自定义算子实现了一种图内、图外的混合式图计算框架。其中,自定义算子位于图内(即图结构内),候选数据集合位于图外(即图结构外),图内的自定义算子可以访问获取图外的候选数据集合,使候选数据集合中的数据得以参与到目标数据服务中。在该方案中,候选数据集合并非固化于图结构中,因此实现候选数据集合与图结构的解耦。从而,候选数据集合的更新和存储自由度提升。此外,候选数据集合是通过自定义算子访问读取,不作为整个图结构的输入参数,因此,避免了候选数据对图结构中参数的影响。从而避免了不必要计算资源开销,降低了图结构中参数传递和维护的实现难度。
在一些场景中,可能需要用到候选数据集合中的某一条或几条的候选数据来进行数据服务。为便于说明,此处将此类候选数据称为目标候选数据。
为了获取目标候选数据,可以首先获取目标候选数据的标识。在S202的实现时,具体可以根据所述目标候选数据的标识,从所述候选数据集合中提取出所述目标候选数据;再利用所述神经网络图结构和所述目标候选数据执行所述目标数据服务。在将候选数据集合封装为类的场景中,也可以根据目标候选数据的标识从所述封装类中对所述目标候选数据执行预设计算并得到计算结果,最后利用所述神经网络图结构和所述计算结果执行所述目标数据服务。
由于本申请实施例提供的技术方案中,相比于候选数据集合的图内使用方式和图外使用方式,候选数据集合从图结构中解耦合,因此当需要更新候选数据集合(更新整个集合或者部分候选数据)时,可以独立更新候选数据,不会影响到图结构,同时图结构所属的深度学习图计算框架也不会对候选数据集合的更新造成约束和限制。本申请是实现了更加灵活、快速的数据更新机制。此外,图结构也可以独立于候选数据集合而单独更新。同样的,图结构的更新不影响已有的候选数据集合。实现更快速的图结构参数更新,不受限于大规模数据的更新的速度。
在一些可能的实现场景中,目标数据服务由多个神经网络计算设备实现的。此处所说的神经网络计算设备可以是显卡,也可以是或其他专用芯片。以显卡作为示例进行描述。具体地,神经网络图结构具有多个副本,目标数据服务启动后,多个副本一对一的加载在多张显卡中。由于候选数据通常是大规模的(以候选数据集合形式存在),而显卡的显存较小,分别存储候选数据集合将影响显卡的性能。由于本申请实施例中,神经网络图结构是与候选数据集合解耦合的,因此,可以将候选数据集合存储在多张显卡之外,例如保存一份候选数据至内存。图结构的复制不会造成候选数据的复制。对于多张显卡,图外的候选数据集合是共用的,不需要存储到各张显卡的显存中。如此,节省了显存资源,提升了显卡的性能。
在这一场景中,利用神经网络图结构和候选数据集合执行目标数据服务,具体包括:多个神经网络计算设备分别基于自身加载的图结构副本和同一份候选数据集合执行目标数据服务。
以上实施例中,介绍了对候选数据集合和神经网络结构图分别更新的实现方式。在目标数据服务的进程启动后,可以将候选数据集合和神经网络图结构加载到该进程中,在执行S201-S202描述的操作。候选数据集合(中的部分或者全部候选数据)独立更新后,独立分发到目标数据服务的进程中。图结构更新后,单独分发到目标数据服务的进程中。
此外,在其他可能的实现方式中,还可能存在整体分发数据和图结构的需求。因此,不排除尽管实现了图结构与候选数据集合的解耦合,但是存在一些场景需要将二者整体分发和使用。因此,在本申请实施例提供的数据服务方法,还可以包括:
将候选数据集合和神经网络图结构打包为一个数据包;
当候选数据集合和/或神经网络图结构需要更新时,更新整个数据包。
在需要进行目标数据服务时,将新的数据包整体分发(加载)到目标数据服务的进程中。
前面实施例着重介绍了对自定义算子的使用方式。为了便于理解,下面结合实施例和附图介绍自定义算子的创建过程和图计算过程。图3为本申请实施例提供的另一种数据服务方法的流程图。如图3所示的数据服务方法包括:
S301:创建自定义算子。
在本申请实施例中所使用的自定义算子是神经网络图结构区别于其他已有的神经网络图结构的最显著的区别。为了创建自定义算子,首先需要进行对自定义算子访问候选数据的实现方式的封装。通过定义封装类A和管理类B实现。下面详细介绍:
具体地,在TensorFlow、PyTorch等框架下的公共库定义一个数据集(即是指大规模的候选数据所在的数据结构,例如矩阵,也可以理解为前述的候选数据集合)的封装类A,该类用于描述一个具有特定访问接口的数据集。在封装类A定义的接口包括:
1)将全量数据以矩阵参数或字节流的形式传入数据集对象的接口。该接口用于更新整个候选数据集合。
2)将增量数据以矩阵参数或字节流的形式传入数据集对象的接口,通过内部加锁或无锁队列的方式,保证增量写入的线程安全。该接口用于更新候选数据集合中的部分候选数据。
3)提供以数据标识查询单条或多条数据内容的接口,用于图内自定义算子访问数据。
4)定义数据集内部数据的序列化和反序列化的接口,用于数据集整体分发和加载。
此外,封装类A还需要支持的特性包括:可以通过参数控制内存的分配方式,比如是否分配透明大页内存、显存等。
在公共库定义一个单例的数据集的管理类B,对数据集的操作进行包装,定义的接口包括:
1)数据集管理。
2)将数据集对象通过数据集主键注册到管理类的接口。
3)根据数据集主键查询并得到数据集智能指针地址的接口。
4)以数据集主键替换数据集对象的接口。
5)将数据集主键删除数据集的接口。
下面介绍进程内单例的具体实现:
创建单例时,自动生成一个根据进程pid编号拼接得到的名字,并以此名字注册系统共享内存块,并在单例对象初始化时,将单例的内存地址写入到共享内存块中。与一般的单例实现不同,该实现保证了在.so动态链接库内的代码也可以访问到相同的单例。从而使一个进程内,C++语言实现的C++代码与python虚拟机内的python代码,都可以访问到同一个单例。
通过封装类A和管理类B的定义,实现了自定义算子进行数据访问的统一封装,接下来介绍自定义算子的实现:
在Tensorflow、PyTorch等框架下定义本申请技术方案中所需功能的自定义算子,具体地,需要定义这个算子在图内的输入参数和输出数据结构。作为示例,自定义算子在图内的输入参数可以是参与数据服务图计算的数据名称列表;输出数据结构可以是向量查询结果张量,或向量点积结果张量等。此外,给自定义算子增加一个属性:自定义算子对应的数据集名字。
自定义算子引用公共库的封装类A和管理类B的头文件,在算子初始化函数内,访问单例的管理类B的对象b,通过算子自身对应的数据集名字查询获得数据集A的对象a,并保存其指针地址。自定义算子的执行函数内,通过调用对象a的地址,访问其数据查询方法,并通过简单计算后返回输出数据结构。将自定义算子编译得到一个动态链接库,从而可以在C++/Python代码里面将自定义算子注册到Tensorflow、PyTorch等框架,并在框架内导入自定义算子。
S302:获取原始图结构。
原始图结构具体是指导入自定义算子之前的神经网络图结构,为与导入自定义算子后的神经网络图结构进行区分,此处将其命名为原始图结构。原始图结构是基于目标数据服务的具体内容进行预先训练得到的。由于目标数据服务可能包括多种实现方式,故此处对于原始图结构的训练方式和训练数据不做限定。
S303:在原始图结构中导入自定义算子,获得神经网络图结构。
以Tensorflow框架为例,在线推理计算前,将自定义算子通过Tensorflow的python API等接口,将自定义算子融合到原始图结构中,使自定义算子能够参与到图结构的计算过程中。下面连同候选数据的收集处理过程,介绍图结构的修改。本申请中深度学习图计算架构分为离线架构和在线架构,其中,离线架构是在线计算之前准备好的,在线架构则是针对目标数据服务的需求进行在线计算时使用的架构。在本步骤中,主要涉及离线计算架构的形成,即获得导入自定义算子后的网络图结构。
首先介绍离线状况下候选数据的批量处理:
1.初始化数据集的管理类B。
2.从候选数据中心扫描获得所有候选数据,并打包放入数据集的封装类A,分配全局唯一的数据集名字。
3.调用数据集的封装类A的数据序列化接口,将数据写入到文件。
4.在进程内启动python虚拟机,并初始化深度图运行环境相关依赖。
5.从训练中心拉取原始图结构,并加载到运行环境。
6.通过动态链接库的方式加载自定义算子到运行环境,并初始化数据集名字等属性。
7.通过深度学习框架的API对图结构进行修改,加入自定义算子到图结构。
8.重新序列化修改后的图结构(即神经网络图结构)到文件。
9.将以上步骤3和步骤8的文件打包,附加额外的匹配信息。
下面介绍离线状况下数据的实时处理和传输(涉及离线状况下候选数据的更新):
1.在批量处理的基础上,创建一个与数据集对应的分布式数据更新队列。
2.在批量处理的基础上,在第9步的额外的匹配信息里写入数据更新队列名。
3.监听候选数据中心的变更,得到更新的候选数据。
4.将更新的候选数据写入分布式数据更新队列。
S304:目标数据服务的进程启动后,通过神经网络图结构中的自定义算子获取神经网络图结构外部目标数据服务对应的候选数据集合。
在线计算架构的实现包括:神经网络图结构和数据的加载过程、实时数据更新过程和数据批量替换过程。
1.初始化运行环境,初始化数据集管理类B。
2.通过动态链接库的方式加载自定义算子到运行环境。
3.下载并读取批量数据文件包,其中的候选数据通过数据集的封装类A加载,包含自定义算子的神经网络图结构通过深度学习运行时的接口加载。
4.数据和图结构加载完成后即可以图计算接口的形式提供对外服务能力。
具体地,图结构加载完毕后,当目标数据服务的进程启动,通过自定义算子即可通过所在数据集的封装类A和管理类B,获取数据集,即候选数据集合。
对于候选数据发生实时更新的场景,还涉及到以下步骤5:
5.可以根据匹配信息里面写入的数据更新队列名,订阅数据更新流,当候选数据需要实时更新时,将实时更新数据写入到数据集的封装类A,从而实现数据实时更新。
在需要批量替换数据的场景下,当下一批批量数据到达后,重复执行本步骤S304下的步骤1-5,可以实现批量的候选数据替换,例如整体替换数据集。
S305:利用神经网络图结构和候选数据集合执行目标数据服务。
以上实施例中,通过构建自定义算子,使图结构内部可以调取图结构外的候选数据,并可以对候选数据进行实时、批量的更新替换,包括增量替换或者全量替换。满足实际使用需求,辅助目标数据服务的结果更加准确、稳定和匹配需求。
基于前述实施例提供的数据服务方法,相应地,本申请还提供了一种数据服务装置。以下结合实施例对该装置进行详细说明。
装置实施例
图4为本申请实施例提供的一种数据服务装置的结构示意图。如图4所示的数据服务装置40包括:
候选数据集合获取模块41,用于在目标数据服务的进程启动后,通过神经网络图结构中的自定义算子获取神经网络图结构外部目标数据服务对应的候选数据集合;
数据服务模块42,用于利用神经网络图结构和候选数据集合执行目标数据服务。
在本申请中,借助于自定义算子实现了一种图内、图外的混合式图计算框架。其中,自定义算子位于图内(即图结构内),候选数据位于图外(即图结构外),图内的自定义算子可以访问获取图外的候选数据,使候选数据得以参与到目标数据服务中。在该方案中,候选数据并非固化于图结构中,因此实现候选数据与图结构的解耦。从而,候选数据的更新和存储自由度提升。此外,候选数据是通过自定义算子访问读取,不作为整个图结构的输入参数,因此,避免了候选数据对图结构中参数的影响。从而避免了不必要计算资源开销,降低了图结构中参数传递和维护的实现难度。
可选地,图5示意了另一种数据服务装置500的结构。如图5所示,数据服务装置500包含候选数据集合获取模块41和数据服务模块42,还包括:
数据封装模块43,用于将候选数据封装到神经网络图结构外部的数据结构中,形成所述候选数据集合;
固化参数设置模块44,用于将候选数据集合的名称设为自定义算子的固化参数;
候选数据集合获取模块41,包括:
载体获取单元,用于通过所述自定义算子根据所述固化参数获得预设信息载体;
地址获取单元,用于根据所述预设信息载体获得所述候选数据集合的指针地址;
数据获取单元,用于根据指针地址访问候选数据集合。
可选地,数据服务装置包含候选数据集合获取模块41和数据服务模块42,还包括:
数据封装模块43,将候选数据封装到所述神经网络图结构外部的数据结构中,形成所述候选数据集合;
数据集封装模块,用于对所述候选数据集合进行封装,得到所述候选数据集合的封装类;
候选数据集合获取模块41,用于所述自定义算子通过调用所述封装类的接口函数,获取所述候选数据集合,或获取基于所述候选数据集合执行预设计算得到的计算结果。
可选地,数据服务装置还包括:
数据标识获取模块,用于获取目标候选数据的标识;所述候选数据集合包含所述目标候选数据;
数据服务模块42包括:
数据提取单元,用于根据所述目标候选数据的标识,从所述候选数据集合中提取出所述目标候选数据,或者根据所述目标候选数据的标识从所述候选数据集合的封装类中对所述目标候选数据执行预设计算并得到计算结果;
执行单元,用于利用所述神经网络图结构和所述目标候选数据执行所述目标数据服务,或者利用所述神经网络图结构和所述计算结果执行所述目标数据服务。
可选地,神经网络图结构具有多个副本,多个副本一对一的加载在多个神经网络计算设备中;候选数据存储在多个神经网络计算设备之外。多个神经网络计算设备为多个显卡。
数据服务模块42,具体用于通过多个神经网络计算设备分别基于自身加载的副本和同一份候选数据集合执行目标数据服务。
可选地,以上提及的数据服务装置还包括:
第一更新模块,用于独立更新候选数据集合,和/或,独立更新神经网络图结构。
图6为本申请实施例提供的又一种数据服务装置的结构示意图。如图6所示的数据服务装置600包括:数据服务装置500包含候选数据集合获取模块41,数据服务模块42,还包括:
算子创建模块601,用于创建自定义算子;
图结构获取模块602,用于获取原始图结构;
算子导入模块603,用于在原始图结构中导入自定义算子,获得神经网络图结构。
通过构建自定义算子,使图结构内部可以调取图结构外的候选数据集合,并可以对候选数据进行实时、批量的更新替换。满足实际使用需求,辅助目标数据服务的结果更加准确、稳定和匹配需求。
本公开实施例所提供数据服务装置可执行本公开任意实施例所提供的数据服务方法,具备执行数据服务方法相应的功能单元和有益效果。
值得注意的是,上述数据服务装置的实施例中,所包括的各个单元和单元只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本公开的保护范围。
下面参考图7,其示出了适于用来实现本公开实施例的电子设备(例如运行有软件程序的终端设备)400的结构示意图。本公开实施例中的终端设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图7示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图7所示,电子设备400可以包括处理装置(例如中央处理器、图形处理器等处理器)401,其可以根据存储在只读存储器(ROM)402中的程序或者从存储装置408加载到随机访问存储器(RAM)403中的程序而执行各种适当的动作和处理。在RAM403中,还存储有电子设备400操作所需的各种程序和数据。处理装置401、ROM402以及RAM403通过总线404彼此相连。输入/输出(I/O)接口405也连接至总线404。
通常,以下装置可以连接至I/O接口405:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置406;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置407;包括例如磁带、硬盘等的存储装置408;以及通信装置409。通信装置409可以允许电子设备400与其他设备进行无线或有线通信以交换数据。虽然图7示出了具有各种装置的电子设备400,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行图1所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置409从网络上被下载和安装,或者从存储装置408被安装,或者从ROM402被安装。在该计算机程序被处理装置401执行时,执行本公开实施例的方法中限定的上述功能。
本公开实施例提供的电子设备与上述实施例提供的数据服务方法属于同一发明构思,未在本公开实施例中详尽描述的技术细节可参见上述实施例,并且本公开实施例与上述实施例具有相同的有益效果。
本公开实施例提供了一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述实施例所提供的数据服务方法。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
在一些实施方式中,客户端、服务器可以利用诸如HTTP(HyperText TransferProtocol,超文本传输协议)之类的任何当前已知或未来研发的网络协议进行通信,并且可以与任意形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(“LAN”),广域网(“WAN”),网际网(例如,互联网)以及端对端网络(例如,ad hoc端对端网络),以及任何当前已知或未来研发的网络。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:
识别目标对象在目标课程中的行为状态和主动操作;根据行为状态中的异常行为状态以及主动操作生成目标对象在目标课程的学习报告;学习报告至少包括:在异常行为状态期间的知识图谱,以及主动操作对应的知识图谱。
计算机可读存储介质可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括但不限于面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑设备(CPLD)等等。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
此外,虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。同样地,虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。
尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。