编码信息提取器的制作方法

专利2022-05-09  54




背景技术:

在信息技术(it)行业的技术文档中,编程代码被广泛地用作特定技术的描述。为了自动检查这些代码文本,需要信息提取。然而,这些代码文本通常源自各种类型的编程语言,这使得难以直接使用解析器来理解这些代码文本。具体地,为了使用这种代码解析器而需要特定编程语言的专业知识,这很难开发和维护。此外,代码解析器具有固定规则,可能无法处理带有拼写错误的代码文本,并且代码解析器通常无法处理不具有固定语法规则来解析的伪代码。



技术实现要素:

本文公开的编码信息提取器使用机器学习方法从文档中提取编码信息。使用各种计算机处理指令来实现编码信息提取器的实现,包括:扫描文档以生成多个令牌,使用术语频率(tf)、逆文档频率(idf)以及代码类型相似性特征来确定多个令牌的一个或多个特征,并使用命名实体识别(ner)来确定一个或多个令牌的字段类型、字段名称和字段值。

提供本概述以便以简化的形式介绍以下在详细描述中进一步描述的概念的选集。本概述并不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。

本文还描述和列举了其他实现。

附图简述

通过参考在说明书的其余部分中描述的附图可以实现对本技术的本质和优点的进一步理解。

图1示出了用于从文档中提取编码信息的系统的示例实现。

图2示出了在其被令牌化之后的输入数据的示例模式。

图3示出了使用术语频率(tf)、逆文档频率(idf)和n元(n-gram)来提取特征的示例操作。

图4示出了使用分类器来寻找两个命名实体之间的关系的示例操作。

图5示出了可用于实现所描述的用于提取代码的技术的示例计算系统。

详细描述

图1示出了用于从文档中提取编码信息的编码提取器系统100的示例实现。在一个实现中,代码提取器系统100可被部署在云环境上。代码提取器系统100的文档输入模块104可以包括扫描模块106以扫描文档102。例如,文档102可以包括各种技术文档,并且扫描模块106扫描文档102并且可以将来自文档的句子存储在一个或多个数据库中。作为示例,文档102可以包括用诸如c 、java等编程语言编写的编程代码。或者,文档102可以包括各种伪代码文档。

预处理器112从文档102中标识代码文本部分。例如,文档102之一可以是具有自然语言的it文档,例如描述或其他注释和一些编码部分。具体地,这样的编码部分可以包括使用c#编写的编程代码。预处理模块112分离这些编码部分并将它们分开存储以供进一步处理。在一个实现中,预处理部分将代码部分的每一行分隔成单独的记录。被分隔成单独记录的此类代码句子的示例可以如下:

·typedefstruct{licenselicense;certcert1;certcert2;}certified_license;(codetype:idf)

·typedefenum{linejointypemiter=0x00000000,linejointypebevel=0x00000001,linejointyperound=0x00000002,linejointypemiterclipped=0x00000003}linejointype;(codetype:idf)

·requiresortindexhintvalue::=sequence{indexonlyboolean}(codetype:asn.1)

此外,预处理器112将一些单词分组为单个预先确定的单词。例如,十进制或十六进制数字被分组为单词“num(数字)”,而文本及其引号被分组为“string(字符串)”。随后,令牌化器模块114对这些代码句子的各个部分进行令牌化。在一个实现中,令牌化器模块114使用各种预定义规则来将已知字符和单词映射到预定义令牌。将已知字符映射到预定义令牌的此类规则的示例如下:

因此,令牌化器模块114可以将句子“typedefstruct{licenselicense;certcert1;certcert2;}certified_license”从编码文档映射到“typedefstructl-bracelicenselicensesemicoloncertcert1semicoloncertcert2semicolonr-bracecertified_licensesemicolon”。

随后,特征提取模块116使用从经令牌化的文档收集的术语频率/逆术语-频率(tf-idf)统计来从经令牌化的句子中提取各种特征。为了确定tf-idf统计,首先,特征提取模块116可以生成通常出现在文档中的各种n元,并生成这种n元的字典。例如,对于下面给出的经令牌化的文档数据,最多两(2)个元的术语字典可以被如下给出:

随后,特征提取模块116使用tf-idf公式基于术语字典生成tf-idf向量。tf表示术语t的流行度是文档d。tf公式的示例可以是:

·tf(t,d)=rawcountofthetermt(术语t的原始计数);

·tf(t,d)=(0,1)(1iftermtoccurs,0otherwise)(如果术语t出现,则为1,否则为0);

·tf(t,d)=log(1 ft,d),其中ft,d=frequencyofthetermtinthedocumentd(术语t在文档d中的频率)。

另一方面,idf是术语t提供多少信息的量度,即,该术语在各种文档中是常见的还是罕见的。用于idf的公式可能是:

idf(t,d)=log(n/|{d∈d:t∈d}| 1),其中n是文档d的语料库中文档的总数

然而,在替代实施方式中,可以使用其他tf-idf公式。通过使用上面的公式,对于具有术语“typedef”的代码字符串,(“typedefstructl-bracelicenselicensesemicoloncertcert1semicoloncertcert2semicolonr-bracecertified_licensesemicolon”),tf=1且idf=log(3/2 1)(给定三(3)个代码字符串,其中两(2)个代码字符串具有术语“typedef”。

一旦针对各种术语计算tf-idf值,操作118就使用针对文档中的各种术语的术语tf-idf向量来训练支持向量机(svm)分类器。svm分类器可以输出关于“由各种代码串表示的代码类型是什么”的置信度水平的向量。这种输出置信度向量的示例可以如下:

[xml:0.1;idf:0.8:asn.1:0.3;…]

随后,命名实体识别(ner)操作120将代码字符串中的术语标记为一个或多个命名实体。例如,这样的命名实体可以将术语命名为“fieldname(字段名称)”,“fieldvalue(字段值)”等。例如,对于代码字符串“typedefenum{linejointypemiter=0x00000000,linejointypebevel=0x00000001,linejointyperound=0x00000002,linejointypemiterclipped=0x00000003}linejointype”,一旦将其令牌化为“typedefenuml-bracelinejointypemiterequnumcommalinejointypebevelequnumcommalinejointyperoundequnumcommalinejointypemiterclippedequnumr-bracelinejointypesemicolon”,ner操作120将各种令牌命名为如下:

typedefenuml-brace[linejointypemiter(fieldname)]equ[num(fieldvalue)]commalinejointypebevelequ[num(fieldvalue)]

comma[linejointyperound(fieldname)]equ[num(fieldvalue)]

comma[linejointypemiterclipped(fieldname)]equ[num(fieldvalue)]r-brace[linejointype(structurename)]semicolon

实体关系(er)提取操作122使用分类器(例如svm分类器)来寻找在操作120中标识的各种命名实体之间的关系。具体而言,来自ner操作的经识别的实体使用不同的关系相互链接,诸如fieldname(字段名称)->fieldtype(字段类型),field(字段)->parentfield(父字段),fieldvalue(字段值)->fieldname(字段名称)等。因此,例如,er提取操作122可以采用具有命名实体的上述字符串并建立以下关系:

[0x00000000num(fieldvalue)]属于[linejointypemiter(fieldname)]

[linejointypemiter(fieldname)]是[linejointype(structurename(结构名称))]的子字段

输出150可以包括由er提取操作122生成的各种命名实体关系的向量。输出150中的其他信息可以是,例如,诸如linejointypemiter,[fieldvalue:0x00000000],linejointypemiter,[parent(父):linejointype]等的记录。

图2示出了在其被令牌化之后的输入数据的示例模式200。例如,这种令牌化可以使用各种预定义规则来将已知字符和单词映射到预定义令牌。例如,代码字符串210中的单词“typedef”被令牌化为“typedef”,而字符“{”被令牌化为“l-brace”,如经令牌化的输出212中所示。类似地,代码字符串214中的符号“=”在输出字符串216中被令牌化为“equ”。根据预定义规则与任何令牌不匹配的输入代码字符串的单词保持不变。因此,代码字符串218中的单词“requiresortindexhintvalue”在输出代码字符串220中保持不变。

图3示出了用于生成标识代码字符串的编码语言的类型的置信度分数的示例操作300。代码字符串302可被输入到令牌化器操作310,该令牌化器操作310生成代码字符串的经令牌化的版本。操作312从经令牌化的代码字符串中标识各种n元。tf-idf操作314为各种n元生成tf-idf值以输出tf-idf向量。这样的tf-idf向量可被输入到svm分类器316,svm分类器316生成具有关于代码字符串302的编码语言类型的置信度分数的输出置信度向量320。

图4示出了本文公开的编码信息提取器的关系提取模型400的示例实现。特别地,关系提取模型400使用长短期记忆(lstm),其能够利用序列中较长范围的时间依赖性并避免梯度消失或爆炸。关系提取模型400由三层组成,输入层402,lstm层404和输出层406。输入层402生成从诸如图1中公开的ner操作120之类的先前操作接收到的每个命名实体的表示,诸如fieldname(字段名称),fieldvalue(字段值)等。ltsm层表示具有双向lstm递归神经网络(rnn)的句子的命名实体序列。具体地,每个ltsm单元在时间步骤t接收命名实体嵌入作为输入向量xt,先前隐藏状态ht-1,存储器单元向量ct-1,并使用以下等式产生新向量:

it=σ(wxixt whiht-1 wcict-1 bi)

ft=σ(wxfxt whfht-1 wcfct-1 bf)

ct=ftct-1 ittanh(wxcxt whcht-1 bc)

ot=σ(wxoxt whoht-1 wcoct bo)

ht=ottanh(ct)

其中σ表示逻辑函数,i,f,o,c和h分别是输入门,遗忘门,输出门,单元激活向量和隐藏状态向量。w是权重矩阵,并且b是偏向量。

输出层406使用隐藏层和softmax输出层来使用以下等式获得关系标记:

ht(r)=tanh(wrh[yt-1;ht] brh)

yt=softmax(wryht(r) by)

其中,b和h分别是权重矩阵,偏向量和隐藏状态。输出层406输出表示当前实体和第一命名实体之间的关系的关系标记序列。当关系提取模型400提取输入中的第一命名实体与当前实体之间的关系时,在一个实现中,命名实体从开始便被移除以便预测与不同输入的若干关系以获得输入代码字符串中的所有关系。

图5示出了可用于实现所描述的用于提供代码信息提取器的技术的示例计算系统500。图5的用于实现所述技术的示例硬件和操作环境包括诸如计算机20形式的通用计算设备之类的计算设备、移动电话、个人数据助理(pda)、平板、智能手表、游戏控制器或其他类型的计算设备。例如,在图5的实现中,计算机20包括处理单元21、系统存储器22,以及将包括系统存储器的各种系统组件在操作上耦合到处理单元21的系统总线23。可以有只有一个或可以有一个以上的处理单元21,以便计算机20的处理器包括单一中央处理单元(cpu),或常常被称为并行处理环境的多个处理单元。计算机20可以是常规计算机、分布式计算机、或者任何其它类型的计算机;各实现不限于此。

系统总线23可以是若干类型的总线结构中的任何一种,包括使用各种总线体系结构中的任何一种的存储器总线或存储器控制器、外围总线,交换结构、点到点连接,以及局部总线。系统存储器也可以简称为存储器,并包括只读存储器(rom)24和随机存取存储器(ram)25。基本输入/输出系统(bios)26通常存储在rom24中,包含了诸如在启动过程中帮助在计算机20内的元件之间传输信息的基本例程。计算机20还包括用于对硬盘(未示出)进行读写的硬盘驱动器27、用于对可移动磁盘29进行读写的磁盘驱动器28、以及用于对可移动光盘31,如cd-rom、dvd或其它光介质进行读写的光盘驱动器30。

硬盘驱动器27、磁盘驱动器28,以及光盘驱动器30分别通过硬盘驱动器接口32、磁盘驱动器接口33,以及光盘驱动器接口34连接到系统总线23。驱动器及其相关联的计算机可读介质为计算机20提供了对计算机可读指令、数据结构、程序模块,及其他数据的非易失性存储。本领域技术人员应该理解,可以在示例操作环境中使用任何类型的有形计算机可读介质。

可以有若干个程序模块存储在硬盘驱动器27、磁盘28、光盘30、rom24或ram25上,包括操作系统35、一个或多个应用程序36、其他程序模块37、以及程序数据38。用户可以通过诸如键盘40和定向设备42之类的输入设备在个人计算机20上生成提醒。其他输入设备(未示出)可以包括麦克风(例如,用于语音输入)、相机(例如,用于自然用户界面(nui))、操纵杆、游戏垫、圆盘式卫星天线、扫描仪等等。这些及其他输入设备常常通过耦合到系统总线23的串行端口接口46连接到处理单元21,但是,也可以通过其他接口,如并行端口、游戏端口或通用串行总线(usb)端口来进行连接。监视器47或其他类型的显示设备也可经由诸如视频适配器48之类的接口被连接到系统总线23。除了监视器之外,计算机还通常包括其他外围输出设备(未示出),如扬声器和打印机。

计算机20可以使用到一个或多个远程计算机(如远程计算机49)的逻辑连接,在联网环境中操作。这些逻辑连接由耦合至或者作为计算机20一部分的通信设备来实现;本发明不限于特定类型的通信设备。远程计算机49可以是另一计算机、服务器、路由器、网络pc、客户端、对等设备或其他常见的网络节点,并且一般包括上面关于计算机20所述的许多或全部元件。图10中所描绘的逻辑连接包括局域网(lan)51和广域网(wan)52。这样的联网环境在办公室网络、企业范围的计算机网络、内部网和因特网(它们都是各种网络)中是普遍现象。

当用于lan联网环境中时,计算机20通过网络接口或适配器53(这是一种类型的通信设备)连接到局域网51。当用于wan联网环境中时,计算机20通常包括调制解调器54、网络适配器、一种类型的通信设备,或用于通过广域网52建立通信的任何其他类型的通信设备。或为内置或为外置的调制解调器54经由串行端口接口46连接到系统总线23。在联网环境中,参考个人计算机20所描述的程序引擎,或其某些部分,可以存储在远程存储器存储设备中。可以理解,所示出的网络连接只是示例,也可以使用用于在计算机之间建立通信链路的其他装置和通信设备。

在示例实现中,用于提供可证实和可破坏的设备身份的软件或固件指令可被存储在存储器22和/或存储设备29或31中并由处理单元21处理。本文公开的一个或多个ml,nlp或dlp模型可作为持久数据存储被存储在存储器22和/或存储设备29或31中。例如,代码信息提取器模块502可被实现在计算机20上(或者,代码信息提取器模块502可被实现在服务器上或云环境中)。代码信息提取器模块502可以使用处理单元21、存储器22、系统总线23和个人计算机20的其他组件中的一个或多个。

与有形计算机可读存储介质对比,无形计算机可读通信信号可用诸如载波或其他信号传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其他数据。术语“已调制数据信号”意指使其一个或多个特性以这样的方式被设置或者改变以便在信号中对信息进行编码的信号。作为示例而非限制,无形通信信号包括有线介质(诸如有线网络或直接线路连接),以及无线介质(诸如声学、rf、红外线和其他无线介质)。

本文中所描述的各实现可被实现为一个或多个计算机系统中的逻辑步骤。逻辑操作可被实现为:(1)在一个或多个计算机系统中执行的处理器实现的步骤的序列;以及(2)一个或多个计算机系统内的互连机器或电路模块。该实现是取决于被利用的计算机系统的性能要求的选择问题。相应地,组成本文中所描述的各实现的逻辑操作另外还可被称为操作、步骤、对象、或模块。此外,还应该理解,逻辑操作可以以任何顺序来执行,除非明确地声明,或者权利要求语言固有地要求某特定顺序。

上面的说明、示例和数据提供了对本发明的示例性实施例的结构和使用的完整的描述。因为可以在不背离本发明的精神和范围的情况下做出本发明的许多实现方式,所以本发明落在所附权利要求的范围内。此外,不同实施例的结构特征可以与另一实现方式相组合而不偏离所记载的权利要求书。

转载请注明原文地址:https://doc.8miu.com/read-350239.html

最新回复(0)