BilSTM 实体识别_软件开发社交内容中特定于功能的命名实体识别

33fbf6cc9e1542f31efd730345774a07.png 摘要:软件开发社交网站,例如Stack Overflow或CSDN,包含有关软件功能的丰富信息。 可以从该信息中获取特定于软件功能的命名实体,此外,还可以基于对软件功能命名实体识别来挖掘问题解决方案和实体使用模式。命名实体识别主要集中在医学和新闻领域,在软件工程领域中,对命名实体识别的软件研究很少,实际上,软件开发社交网站的内容始终是自由形式的文本,由源代码,链接,缩写和中文词汇或英语单词组成,这给软件功能命名实体识别带来了一些困难。因此,在本文中,我们提出了一种利用BI-LSTM和词嵌入技术进行软件功能命名实体识别的方法。初步的经验评估表明,我们的方法有效地从软件开发社交网站的内容识别了软件功能命名实体。  引言由于互联网的快速发展和大量信息的可用性,社交网站在日常生活中变得越来越流行。问答社区站点,例如StackOverflow,Quora和CSDN,对于软件开发人员的软件开发知识共享和获取非常重要。在软件开发社交网站中,问题和答案均以自然语言表示。这些网站中的这些问答文本内容已成为补充软件开发文档的重要软件开发信息资源。在软件开发社交网络内容的挖掘基础上,进行了很多工作,例如识别软件API功能缺陷,挖掘软件源代码描述和自动注释生成。上述工作关注的是源代码的功能及其表述。这些研究大多基于自然语言处理技术来挖掘源代码的描述,例如语义依赖性分析,词嵌入和TF-IDF。但是在软件开发问答社会文本中,每个问答都是独立的,并且包含分散的信息。如果将这些分散的软件功能描述信息结合起来,形成软件功能描述的知识图谱,对于理解和重用软件开发人员的软件功能将非常有帮助。建立知识图的第一步是识别特定于软件功能特征的实体。但是,关于特定于软件功能特征的NER(命名实体识别)的研究很少。来自软件开发社交内容的软件功能命名实体识别的主要挑战如下。在软件功能特征特定领域中,没有合适的识别方法来识别特定实体,且标准语料较少。一个更精确的标注和分类语料库是NER系统最重要的输入之一。但在软件功能领域,没有准确标注和分类的语料库。在编写软件功能问题或博客时,用户以自己的方式描述软件功能特征。它使软件开发社交网站数据的文本为自由格式。此外,软件功能相关的数据通常由源代码,链接,缩写和中文或英文单词组成,这使软件功能NER更加困难。为了应对这些挑战,我们提出了一种利用BI-LSTM(双向长期短期记忆)模型和词嵌入技术来识别软件功能命名实体的方法。我们工作的主要贡献如下:在软件开发社交内容中识别软件功能命名实体的第一项工作。在我们的方法中,定义了用于对软件功能特征特定实体进行分类的类别方法。手工给出了软件功能特性的特定语料库,以支持软件功能命名实体识别。软件功能NER流程可基于标记的语料库有效帮助识别未知功能特征的特定实体。  问题定义     基于我们的分析,我们在软件开发社交网站内容中定义了软件功能NER问题。令COL为讨论集合,其中COL表示所有问题中的句子及其在CSDN上的答案。句子由许多词组成,其中一些词充当主语,另一些词充当宾语,其余词充当动词,副词或补语。用作主语或宾语的单词是句子的实体。因此,软件功能NER的任务是识别在软件功能特定的句子中充当主语或宾语的单词。我们将句子划分为单词序列作为输入。这些单词是由中文分词器获得的。软件功能NER问题的目标是从单词序列中识别软件功能特定实体的边界。特定于软件功能特征的实体由一个或多个单词组成。因此,当识别软件功能特征特定实体时,有两种情况。第一个是软件功能的实体由一个词组成。我们只需要确定单词是否为实体。有很多方法可以判断单词是否为实体。最简单的方法是查询字典中单词的存在。如果单词在词典中,我们将其视为一个实体。有许多由一个单词组成的实体,例如“ GPU”,“ CPU”,“JAVA”。在这种情况下,软件功能实体的边界是单词。第二个是软件功能实体由多个单词组成。我们需要判断软件功能实体的第一个单词和最后一个单词。这不可以通过查找字典来解决,因为软件功能实体由许多不在训练数据或词典中的词汇组成。对于这种情况,我们需要使用深度学习技术来判断软件功能实体的边界。使用字典可能会在CRF模型中定义其他功能,这些功能代表单词NER标签之间的依存关系。对于NER任务,需要明确定义直观且信息化的实体类别。在传统医学NER任务中,实体类别通常不包括患者名称,患者年龄,医学名称,疾病名称,时间和位置。在传统的新闻NER任务中,实体类别通常不包含人员,组织,位置,时间和日期。这些类别是从先前的知识中获得的,这些知识在现实生活中是高度抽象和有意义的。在特定的软件功能特征中,Deheng等人定义了5种类别:编程语言(PL),平台(Plat),API,工具库框架(Fram)和软件标准(Stan)。但是,不可能将软件功能实体完全划分为这些类别,例如“ exchangeTwoNumber()”,“ login()”,“ WebCrawler”和“软件开发”。在特定于软件功能的功能中,某些实体可以是功能名称,这些名称可以由开发人员自己定义或已经存在于工具库中。在软件开发社交网站的内容中,作为一个实体的函数名称数量非常多。在以前的研究中,研究人员忽略了这些函数名。软件功能特征特定句子中的函数名称作为主语,我们应该将函数名识别为软件功能实体。因为函数名作为一个实体将帮助我们理解句子的语义。因此,我们为这些功能添加了一个类别。我们定义了6种软件功能实体:编程语言 ( PL ),平台 ( P l at),API,工具库框架 ( Fra m ),软件标准 ( S tan )和未定义函数(UF)。表I中显示了软件功能的实体类别的列表。 fbf73f8929f8470f24a558c9a3ed535e.png 方法在本节中,我们介绍特软件功能NER系统的详细设计。图1显示了软件功能命名实体识别系统的框架。该系统包括三个步骤:第一步是通过网络爬虫从CSDN收集并清洗数据,以获取不包含代码和链接的文本。第二步是将文本处理为包含软件功能的短句,将短句分割为单词,通过word2vec训练单词以获得单词嵌入。第三步是训练BI-LSTM模型,以识别软件功能实体的边界并保存输出结果。 A.数据收集和清洗NER中没有针对CSDN中软件功能特定文本的研究,因此我们首先需要通过网络爬虫从CSDN收集HTML页面。CSDN是一个中文的Stack Overflow.我们从CSDN中选择了有关python的问答页面。对于这些“问答页面”源代码,我们必须分析页面的结构,找到标签,标题,问题描述和答案的位置,提取此信息并将其保存为文本格式。软件功能特征特定的数据通常由源代码,链接,缩写和中文或英文单词组成。但是源代码对于软件功能特定的实体识别是无用的。在本文中,我们基于Dagenais等人提出的一组规则,使用一组正则表达式规则来识别文本中的块代码并从文本中删除该块代码。B.Word2Vec词嵌入词嵌入是指自然语言中的字符或单词到低维密集实数向量的映射,广泛用于从自然语言训练数据中捕获词的语义和句子的句法属性。在词嵌入中,词的相似度被编码为低维密集实数向量。因此,如果我们想知道两个或更多单词之间的相似性,我们可以计算单词矢量空间中这些单词矢量之间的距离。它提高了NLP任务的性能,例如命名实体识别,情感分析。汉英之间最大的区别是单词之间的边界很模糊,没有空格分隔。对于中文单词嵌入,我们需要使用中文单词分割来识别单词边界。但是,如果使用中文单词分割生成的单词作为输入,中文NER的性能将不佳。有许多原因导致这种结果,其中单词的错误分割是一个重要的因素。英文的嵌入单位是单词,但是中文单词包含几个汉字。因此,大多数中文命名实体识别技术都使用单个汉字嵌入作为输入。尽管在中文NLP任务中嵌入单位应为汉字,汉字嵌入可以更完整地保留信息,但是内容包含许多英语单词,例如java,python。基于上述情况,我们采用单词嵌入。有很多词嵌入工具包。Word2Vec 是Google在2013年推出的一种广泛使用的高效词嵌入工具包。word2vec中有两种词嵌入训练模型:CBOW(连续词袋)模型和Skip-gram模型。CBOW模型使用周围的单词来预测当前单词,而Skip-gram模型使用当前的单词来预测周围单词。考虑到Skipgram模型对符合软件功能数据上下文的稀有词有更好的效果,本文采用Skipgram模型构造语义向量。正样本包含当前词和词的上下文,我们使用负样本采样生成负样本集。例如,当窗口大小为2时,我们输入句子“ windows compile Skia Graphics Library error”,当前单词为“ Skia”,正样本为“ windows”,“ compile”,“ Graphics”和“ Library”。因此,阳性样本的数量取决于窗口大小。否定样本取决于单词在内容中出现的次数。如果出现的次数很高,则被选为阴性样本的可能性就很高,反之亦然。在此样本中,负样本可以是“ Python”或“ QT”。我们将gensim库应用于Skip-gram模型实现。Skip-gram模型中有一系列参数,例如大小,窗口,工作程序和迭代器。size的参数表示设置的单词嵌入维数,设置为128。window的参数表示设置的预测单词数,设置为8。worker的参数表示工作线程的数量,设置为20。iter的参数表示设置为20的迭代总数。我们尝试了不同的词嵌入窗口大小和dimensión设置。实验结果表明,当窗口大小设置为8时,词嵌入效果更好。实验结果还表明,当词嵌入大小从100维到300维时,BI-LSTM模型的结果之间没有显着差异。 C. BI-LSTM用于实体识别在本文中,我们应用BI-LSTM模型来解决软件功能的NER问题。BILSTM模型的整体结构如图2所示。 69d2cce9165ec5e472b22e5fc542b72d.png在此模型中,我们表示输入是单词序列SeqWord =(wi,w2,…,wn),其中wi表示句子中的第i个单词。通过使用中文分词获得单词序列。我们使用BIOES标记架构进行NER标记。在我们SFF专用的NER系统中,标签集是BIOES(开始(Beginning),内部(Internal),结束(End),其他(Other)和单个(Single))。五个标签代表实体边界信息。B,I和E的标记表示实体的开始词,实体的内部词和实体的结束词,S表示实体的单个词,O表示非实体词汇。我们将Keras库应用于BI-LSTM模型实现。我们设置了由功能特征文档组成的训练数据集来训练BI-LSTM模型。BI-LSTM模型的参数设置如下。在输入层中,输入形状大小是80x128的向量序列。如果句子的长度小于80,则将其余向量与零对齐。如果句子的长度超过80,则放弃溢出向量。输出形状是80x128的向量序列。在本文中,我们两次训练了BI-LSTM层,目的是逐步压缩向量的维数。对于第一BI-LSTM层,输入形状是80x128的向量序列,输出形状是80x64的向量序列。对于第二BI-LSTM层,输入形状是80x64的向量序列,输出形状是80x32的向量序列。在输出层中,输入形状的是80x128的向量序列,输出形状是80x25的向量序列。我们尝试了对序列大小的不同设置。结果表明,序列大小为80通常表现更好。我们还观察到,使用300维与100维的词嵌入,BI-LSTM模型的有效性之间没有显着差异。  案例研究为了评估我们的方法,我们从CSDN问答网站中随机选择了100个有关python的网页。我们从每个网页提取标题,问题描述,问题解决方案。A. 数据收集在本文中,我们通过网络爬虫从CSDN上的“问答”站点收集原始数据。在这一步中,数据是图3中所示的HTML文档。我们需要通过BeautifulSoup分析HTML文档的结构,以获取图3中方框的内容。 601c9e96d84f734013191f04a014e25e.png我们需要清洗Web内容以获得有关python问题和答案的文本内容,因为内容是混合了代码,缩写,链接和软件功能特性的词汇的混合语言。在此步骤中,数据如图4所示。 11ce52917eb2ccd439ca5bcc7ae7edfa.png本文中,我们只需要获得有关软件功能特性的文字,图4中方框的代码和链接对我们没有用。我们可以使用正则表达式删除块代码和链接。然后我们获得带有软件功能特征特定文本的纯数据。文本包含许多实体,在图5中标记为红色。通过对这些标记实体的分析,我们发现有很多非词库的词(OOV)。例如,python和code都在词库中,但“python code”不是。因此,我们需要神经网络来学习内容数据中“ python code”的使用模式。 5746aeddf91a9bfeaaeab6076bd97e86.png深度学习技术在有监管的任务中表现更好,这也适用于命名实体识别任务。但是我们需要手动标记问答文本内容句子中包含的实体。图6显示了文本内容中的手动标记示例的某些实体。 8b3452402165dcb0b840bb1b882d6b68.png B. 软件功能NER系统中的词嵌入首先,用jieba分词将语料库分割成单词,我们可以得到图7中带有单词的文本数据。然后,将带有单词的文本输入到Word2Vec中,以使单词嵌入成向量,如图8所示。 485ace6f2f3e493ddd6090035f65fa32.png fd6b0b408beb8f02ff1de8d74e66b1c1.png C.  软件功能NER的BI-LSTM训练对于BI-LSTM输入层,仅输入上一步获得的单词嵌入是不够的。我们必须输入每个单词的标签。标记的目的是让模型知道实体的边界并学习实体的模式。根据手动注释实体,我们知道单词的标记,分别是B,I,E,O和S。对于每个类别,标记都被实例化。在编程语言类别中,B实例化为B-PL,表示该单词是属于编程语言的实体中的开始单词,I实例化为I-PL,表示该单词是中间语言中的中间单词属于编程语言的实体,E实例化为E-PL,表示单词是属于编程语言的实体中的结尾词,S实例化为S-PL,表示属于实体的单一单词。O表示单词不是实体。根据手动标记实体文本,我们得到最终标签文本作为输入,如图9所示。 e507bd9f6712151d3a63f8487c50c25e.png D. 软件功能NER结果‘传统命名实体识别任务的评估指标为precision,recall和F1。我们使用相同的NER评估指标来评估SFF专用NER的结果。对于命名实体识别任务,precision测量输出标签正确的百分比。recall衡量测试数据中命名实体正确标记的百分比。F1分数是precision和recall的调和平均值。结果的输出格式如图10所示。表2显示NER结果的precision,recall和F1。 eb37567bfc2424064b40c689881d999b.png b1e8a0a456c6c5830ba6cb35ea806533.png通过结果的分析,模型对未定义的函数名称识别效果不佳。我认为有两个主要原因:第一个原因是未定义的函数名出现的次数更少,或者具有不同的书写形式。第二个原因是该模型不能很好地识别这种实体的特征。解决上述问题的方法是增加数据量,尤其是对于未定义的函数。  总结和未来工作在本文中,我们定义了软件功能NER的研究问题,并介绍了软件功能NER的困难。为了解决上述问题和困难,我们设计了软件功能NER系统。针对软件功能文本和软件功能实体的独特性,我们将序列到序列深度学习神经网络作为BI-LSTM模型和NLP技术相结合,以设计有效的软件功能NER解决方案,从而可以减少人工注释数据量,并保持软件功能NER系统的通用性和鲁棒性。将来,我们计划定义软件功能实体的关系并分析关系的类别。此外,我们旨在识别实体之间的关系,并使用深度学习技术形成软件功能特征特定的图谱。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值