Word2API: 自然语言单词与程序API的统一低维表示技术
Posted CodeWisdom
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Word2API: 自然语言单词与程序API的统一低维表示技术相关的知识,希望对你有一定的参考价值。
Word2API: 自然语言单词与程序API的统一低维表示技术
研究作者
该工作于2018年10月被TSE录用
作者:
李晓晨,大连理工大学博士生
江贺,大连理工大学教授
Yasutaka Kamei,日本九州大学副教授
陈信,杭州电子科技大学讲师
研究背景
应用程序接口(API,Application Programming Interfaces)的学习是软件开发者掌握软件开发技能的必经之路,为此软件工程领域研发了丰富的工具来帮助软件开发者检索API信息以提升学习效率,如通过自然语言搜索API序列,根据技术提问搜索相关的API文档。这些工具往往采用文本匹配的方式来根据自然语言中的单词查找API或者API文档,然而由于单词和API之间与生俱来的语义差异,这些工具的效果往往差强人意。我们可以用下面两个例子理解语义差异的概念:
01
在API序列搜索任务上,开发者利用查询词“generate md5 hash code”搜索API序列,相关的(Java)API可能是“MessageDigest#getInstance”或“MessageDigest#digest”。但是这些API并不包含“md5“或者”hash code“等单词,因此会导致基于文本匹配的信息检索模型返回错误的API序列。
02
在API文档链接任务上,开发者可能会在类似于Stack Overflow的问答论坛上询问技术问题,如“How to (conduct a) sanity check (on) a date in Java”。在回答中,参与者推荐利用API “Calendar#setLenient”解决该问题。但是根据文本匹配却很难发现“sanity check (on) a date”和”Calendar#setLenient”之间的关系,甚至提问者也在抱怨“(it is) not so obvious to use lenient calendar”。 (https://stackoverflow.com/questions/226910/)
CON
由此,自然语言中的单词和程序API的语义差异可见一斑
研究问题
为了消除这种语义差异,一个根本的方法就是正确的评估单词和API的语义相关性,例如正确度量“sanity check (on) a date”和”Calendar#setLenient”之间的相似性。为此我们提出Word2API方法。它利用GitHub上超过3000万的Java源代码文件,分析在每个代码段内代码注释中的单词和方法体中的API之间的语义关系,结合词嵌入(word embedding)技术,建立单词和API的向量表示,即
将每个单词和API表示为同一语义空间下的低维定长向量,进而利用向量的相似性度量不同单词和API之间的语义相关性。
研究贡献
01
我们提出Word2API方法解决自然语言中单词和程序中API的统一低维表示问题。Word2API可以将单词和API转换为统一语义空间上的低维向量。
02
利用Word2API方法,我们生成126,853个单词和API的向量,这些向量有效的消除了单词和API之间的语义差异(向量词典可访问https://github.com/softw-lab/word2api获得)。
03
我们将生成的低维向量用于解决API序列推荐和API文档链接两个典型软件工程任务,研究发现Word2API方法生成的向量可以有效提升解决典型软件工程任务的效果。
研究概要
学术报告PPT如下:
CodeWisdom
欢迎关注CodeWisdom,Codewisdom平台由复旦大学软件工程实验室运营,提供智能化软件开发平台及线上沙龙相关资讯,关注可了解更多智能化软件开发的最新消息~
以上是关于Word2API: 自然语言单词与程序API的统一低维表示技术的主要内容,如果未能解决你的问题,请参考以下文章
VueJS 异步检测语言与 Yandex Translate API
为跨 Android、IOS 和 Web 的 expo 应用程序统一 localhost dev api 服务器访问?