CN104809139A - 代码文件查询方法和装置 - Google Patents
代码文件查询方法和装置 Download PDFInfo
- Publication number
- CN104809139A CN104809139A CN201410042833.4A CN201410042833A CN104809139A CN 104809139 A CN104809139 A CN 104809139A CN 201410042833 A CN201410042833 A CN 201410042833A CN 104809139 A CN104809139 A CN 104809139A
- Authority
- CN
- China
- Prior art keywords
- code
- code file
- vector
- file
- matrix
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种代码文件查询方法和装置,属于数据处理技术领域。所述方法包括:基于历史查询词向量以及每个代码文件的文本特征向量和代码特征向量构造的转换矩阵,对当前查询词向量和每个代码文件的代码特征向量进行转换,代码特征向量根据代码文件的代码块确定;根据当前查询词向量、转换后的查询词向量、每个代码文件转换后的代码特征向量以及每个代码文件的文本特征向量,计算每个代码文件与查询词之间的相似度,得到代码文件查询结果。本发明考虑到了代码文件的结构对语义的影响,充分挖掘代码文件的内容和结构,提高了特征提取的准确性,且在查询代码文件的过程中,基于该文本特征向量和代码特征向量计算相似度,提高了查询精度。
Description
技术领域
本发明涉及数据处理技术领域,特别涉及一种代码文件查询方法和装置。
背景技术
软件***的代码库一般由大量代码文件组成,为了对软件***进行维护,需要根据一些给定的查询词,从代码库中查询与查询词相关的代码文件,从而进行有针对性的维护。
为此,由GiulianoAntoniol、Gerardo Canfora、Gerardo Casazza、Andrea DeLucia和Ettore Merlo撰写的,在2002年10月在IEEE软件工程汇刊(期刊IEEETransactions on Software Engineering)的28卷10期中公开的、名称为“RecoveringTraceability Links between Code and Documentation”的论文中,提出了一种查询代码文件的方法,具体包括以下步骤:根据代码库中代码文件所包括的文本信息,提取代码文件的文本特征;基于给定的查询词,计算提取到的代码文件的文本特征与该查询词之间的相似度,并将相似度最大的文本特征所对应的代码文件作为该查询词的查询结果输出。
然而,对于代码文件来说,即使两个代码文件包含相同的文本信息,如果该两个代码文件的结构不同,其语义也会不同。而上述查询代码文件的方法仅根据代码文件所包括的文本信息提取了文本特征,特征提取的准确性低,降低了查询精度。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种代码文件查询方法和装置。所述技术方案如下:
一方面,提供了一种代码文件查询方法,所述方法包括:
基于历史查询过程中所应用的历史查询词向量,以及代码库中每个代码文件的文本特征向量和代码特征向量构造的转换矩阵,对当前查询词向量和所述每个代码文件的代码特征向量进行转换,得到转换后的查询词向量和每个代码文件转换后的代码特征向量,所述代码文件的代码特征向量根据代码文件中的代码块确定;
根据所述当前查询词向量、所述转换后的查询词向量、所述每个代码文件转换后的代码特征向量以及所述每个代码文件的文本特征向量,计算每个代码文件与查询词之间的相似度;
根据所述每个代码文件与所述查询词之间的相似度,得到代码文件查询结果。
可选地,基于历史查询过程中所应用的历史查询词向量、所述每个代码文件的文本特征向量和代码特征向量构造的转换矩阵,对当前查询词向量和所述每个代码文件的代码特征向量进行向量转换,得到转换后的查询词向量和每个代码文件转换后的代码特征向量包括:
计算第一转换矩阵的转置矩阵与所述查询词向量的乘积,得到转换后的查询词向量,所述转换矩阵包括所述第一转换矩阵和第二转换矩阵;
将每个代码文件的代码特征向量组成代码特征矩阵;
计算所述代码特征矩阵的转置矩阵与所述第二转换矩阵的乘积,得到转换后的代码特征矩阵;
提取所述转换后的代码特征矩阵的转置矩阵中的每个向量,作为对应代码文件的转换后的代码特征向量。
可选地,根据所述当前查询词向量、所述转换后的查询词向量、所述每个代码文件转换后的代码特征向量以及所述每个代码文件的文本特征向量,计算每个代码文件与查询词之间的相似度包括:
计算每个代码文件的文本特征向量与所述查询词向量之间的第一相似度;
计算每个代码文件转换后的代码特征向量与所述转换后的查询词向量之间的第二相似度;
对每个代码文件的第一相似度和第二相似度进行加权求和,得到每个代码文件与所述查询词之间的相似度。
可选地,基于历史查询过程中所应用的历史查询词向量,以及代码库中每个代码文件的文本特征向量和代码特征向量构造的转换矩阵,对当前查询词向量和所述每个代码文件的代码特征向量进行转换,得到转换后的查询词向量和每个代码文件转换后的代码特征向量之前,所述方法还包括:
对于每个代码文件,根据所述代码文件的自然语言描述、注释和变量名称,获取所述代码文件的文本特征向量;
判断所述代码文件中是否包括出现次数大于预设阈值的代码块;
当所述代码文件中包括出现次数大于所述预设阈值的代码块时,提取所述出现次数大于所述预设阈值的代码块;
将提取到的不同代码块的出现次数组成所述代码文件的代码特征向量。
可选地,基于历史查询过程中所应用的历史查询词向量、所述每个代码文件的文本特征向量和代码特征向量构造的转换矩阵,对当前查询词向量和所述每个代码文件的代码特征向量进行向量转换,得到转换后的查询词向量和每个代码文件转换后的代码特征向量之前,所述方法还包括:
获取历史查询过程中所应用的每个历史查询词向量,组成样本查询矩阵;
将代码库中每个代码文件的文本特征向量组成样本文本特征矩阵;
将代码块中每个代码文件的代码特征向量组成样本代码特征矩阵;
根据所述样本查询矩阵、所述样本文本特征矩阵和所述样本代码特征矩阵,确定以第一转换矩阵和第二转换矩阵为自变量的目标函数;
求解所述目标函数的最小值,获取所述目标函数为最小值时所对应的解。
可选地,所述目标函数为:
其中,和为正则化参数,U为所述第一转换矩阵,V为所述第二转换矩阵,∈1(U,V)用于表示转换后同一代码文件或相似代码文件的文本特征向量与代码特征向量之间的距离,∈2(U,V)用于表示转换后相似代码文件的文本特征向量与代码特征向量之间的距离与不相似的代码文件的文本特征向量与代码特征向量之间的距离之差,g(U,V)用于表示转换后相似代码文件的文本特征向量之间的距离、代码特征向量之间的距离、文本特征向量与代码特征向量之间的距离、所述历史查询词向量与每个代码文件的文本特征向量之间的距离、所述历史查询词向量与每个代码文件的代码特征向量之间的距离以及相似历史查询词向量之间的距离之和,c(U,V)用于表示转换后任一字符段与包含所述字符段的代码文件的代码特征向量之间的距离,r(U,V)用于控制所述第一转换矩阵U和所述第二转换矩阵V的复杂程度。
可选地,
其中,m为代码文件的数目,第i个代码文件和第j个代码文件为相似代码文件,第i个代码文件和第l个代码文件为不相似代码文件,n为历史查询过程中所应用的历史查询词的数目,X为所述样本文本特征矩阵,Y为所述样本代码特征矩阵,Q为所述样本查询矩阵,W和R为所述样本文本特征矩阵与所述样本代码特征矩阵之间的相似度矩阵,L为矩阵W的归一化拉普拉斯矩阵。
另一方面,提供了一种代码文件查询装置,所述装置包括:
转换模块,用于基于历史查询过程中所应用的历史查询词向量,以及代码库中每个代码文件的文本特征向量和代码特征向量构造的转换矩阵,对当前查询词向量和所述每个代码文件的代码特征向量进行转换,得到转换后的查询词向量和每个代码文件转换后的代码特征向量,所述代码文件的代码特征向量根据代码文件中的代码块确定;
相似度计算模块,用于根据所述当前查询词向量、所述转换后的查询词向量、所述每个代码文件转换后的代码特征向量以及所述每个代码文件的文本特征向量,计算每个代码文件与查询词之间的相似度;
结果输出模块,用于根据所述每个代码文件与所述查询词之间的相似度,得到代码文件查询结果。
可选地,所述转换模块包括:
第一转换单元,用于计算第一转换矩阵的转置矩阵与所述查询词向量的乘积,得到转换后的查询词向量,所述转换矩阵包括所述第一转换矩阵和第二转换矩阵;
代码特征组成单元,用于将每个代码文件的代码特征向量组成代码特征矩阵;
第二转换单元,用于计算所述代码特征矩阵的转置矩阵与所述第二转换矩阵的乘积,得到转换后的代码特征矩阵;
代码特征向量提取单元,用于提取所述转换后的代码特征矩阵的转置矩阵中的每个向量,作为对应代码文件的转换后的代码特征向量。
可选地,所述相似度计算模块包括:
第一计算单元,用于计算每个代码文件的文本特征向量与所述查询词向量之间的第一相似度;
第二计算单元,用于计算每个代码文件转换后的代码特征向量与所述转换后的查询词向量之间的第二相似度;
加权求和单元,用于对每个代码文件的第一相似度和第二相似度进行加权求和,得到每个代码文件与所述查询词之间的相似度。
可选地,所述装置还包括:
文本特征向量获取模块,用于对于每个代码文件,根据所述代码文件的自然语言描述、注释和变量名称,获取所述代码文件的文本特征向量;
出现次数判断模块,用于判断所述代码文件中是否包括出现次数大于预设阈值的代码块;
代码块提取模块,用于当所述代码文件中包括出现次数大于所述预设阈值的代码块时,提取所述出现次数大于所述预设阈值的代码块;
代码特征向量组成模块,用于将提取到的不同代码块的出现次数组成所述代码文件的代码特征向量。
可选地,所述装置还包括:
第一矩阵组成模块,用于获取历史查询过程中所应用的每个历史查询词向量,组成样本查询矩阵;
第二矩阵组成模块,用于将代码库中每个代码文件的文本特征向量组成样本文本特征矩阵;
第三矩阵组成模块,用于将代码块中每个代码文件的代码特征向量组成样本代码特征矩阵;
目标函数确定模块,用于根据所述样本查询矩阵、所述样本文本特征矩阵和所述样本代码特征矩阵,确定以第一转换矩阵和第二转换矩阵为自变量的目标函数;
目标函数求解模块,用于求解所述目标函数的最小值,获取所述目标函数为最小值时所对应的解。
可选地,所述目标函数为:
其中,和为正则化参数,U为所述第一转换矩阵,V为所述第二转换矩阵,∈1(U,V)用于表示转换后同一代码文件或相似代码文件的文本特征向量与代码特征向量之间的距离,∈2(U,V)用于表示转换后相似代码文件的文本特征向量与代码特征向量之间的距离与不相似的代码文件的文本特征向量与代码特征向量之间的距离之差,g(U,V)用于表示转换后相似代码文件的文本特征向量之间的距离、代码特征向量之间的距离、文本特征向量与代码特征向量之间的距离、所述历史查询词向量与每个代码文件的文本特征向量之间的距离、所述历史查询词向量与每个代码文件的代码特征向量之间的距离以及相似历史查询词向量之间的距离之和,c(U,V)用于表示转换后任一字符段与包含所述字符段的代码文件的代码特征向量之间的距离,r(U,V)用于控制所述第一转换矩阵U和所述第二转换矩阵V的复杂程度。
可选地,
其中,m为代码文件的数目,第i个代码文件和第j个代码文件为相似代码文件,第i个代码文件和第l个代码文件为不相似代码文件,n为历史查询过程中所应用的历史查询词的数目,X为所述样本文本特征矩阵,Y为所述样本代码特征矩阵,Q为所述样本查询矩阵,W和R为所述样本文本特征矩阵与所述样本代码特征矩阵之间的相似度矩阵,L为矩阵W的归一化拉普拉斯矩阵。
本发明实施例提供的技术方案带来的有益效果是:
本发明实施例提供的方法和装置,考虑到了代码文件的结构对语义的影响,通过获取代码文件的文本特征向量和代码特征向量,充分挖掘代码文件的内容和结构,提高了特征提取的准确性,且在查询代码文件的过程中,基于该文本特征向量和代码特征向量计算每个代码文件与查询词之间的相似度,以得到代码文件查询结果,提高了查询精度。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种代码文件查询方法的流程图;
图2是本发明实施例提供的代码块示意图;
图3是本发明实施例提供的代码文件与查询词之间的相似度计算示意图;
图4是本发明实施例提供的一种代码文件查询装置结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1是本发明实施例提供的一种代码文件查询方法的流程图,参见图1,该方法包括:
101、基于历史查询过程中所应用的历史查询词向量,以及代码库中每个代码文件的文本特征向量和代码特征向量构造的转换矩阵,对查询词向量和该每个代码文件的代码特征向量进行转换,得到转换后的查询词向量和每个代码文件转换后的代码特征向量,该代码文件的代码特征向量根据代码文件中的代码块确定。
从文本内容上来说,代码文件包括自然语言描述、注释、变量名称等多种文本内容,从结构上来说,代码文件包括多个代码块,每个代码块由自然语言描述、注释和变量名称等文本内容组成。
首先,该历史查询词向量是指在历史查询过程中所应用的查询词构造的向量,具体可以由该查询词中文本内容的特征值组成,该查询词向量用于对该查询词的文本内容进行描述。
其次,该代码文件的文本特征向量用于对该代码文件的文本内容进行描述。通过对文本内容进行量化,得到该代码文件的文本内容的特征值,根据文本内容的特征值得到该文本特征向量。根据不同代码文件的文本特征向量之间的相似度,可以衡量代码文件之间文本内容的相似性。
再次,该代码文件的代码特征向量用于对该代码文件的结构进行描述。通过对代码块进行量化,得到该代码文件中代码块的特征值,根据代码块的特征值得到该代码特征向量。根据不同代码文件的代码特征向量之间的相似度,可以衡量代码文件之间结构的相似性。
在本发明实施例中,该查询词向量和该文本特征向量均由文本内容的特征值组成,两者之间具有可比性。在每次进行代码文件查询时,根据查询词获取查询词向量,计算该查询词向量与任一代码文件的文本特征向量之间的相似度,根据该相似度可以衡量该查询词与该代码文件之间文本内容的相似性。
但是,由于该查询词向量根据该查询词中的字符段确定,该代码特征向量根据该代码文件中的代码块确定,两者之间不具有可比性。为了使得该查询词向量和该代码特征向量之间具有可比性,需要根据构造的转换矩阵,对该查询词和该代码特征向量进行转换,使得该查询词向量和该代码特征向量映射至同一语义空间。在该语义空间中,计算转换后的查询词向量和转换后的代码特征向量之间的相似度,此时该相似度即可用于衡量该查询词与该代码文件之间结构的相似性。
102、根据该当前查询词向量、该转换后的查询词向量、每个代码文件转换后的代码特征向量以及该每个代码文件的文本特征向量,计算每个代码文件与查询词之间的相似度。
在本发明实施例中,根据该当前查询词向量和该每个代码文件的文本特征向量,可以得到该查询词与每个代码文件之间文本内容的相似度,而进行转换之后,该转换后的查询词向量和该转换后的代码特征向量处于同一语义空间,可以计算该转换后的查询词向量与该转换后的代码特征向量之间的相似度,得到该查询词与每个代码文件之间结构的相似度。
其中,在计算每个代码文件与查询词之间的相似度时,可以计算每个代码文件的文本特征向量或代码特征向量与该查询词向量之间的余弦距离,将该余弦距离作为每个代码文件与该查询词之间的相似度,也可以计算每个代码文件的文本特征向量或代码特征向量与该查询词向量之间的欧式距离,将该欧式距离作为每个代码文件与该查询词之间的相似度,本发明实施例对此不做限定。
103、根据该每个代码文件与该查询词之间的相似度,得到代码文件查询结果。
在本发明实施例中,根据该每个代码文件与该查询词之间的相似度,可以得到与该查询词相似的代码文件作为代码文件查询结果。
优选地,为了简化该查询词的代码文件查询结果,可以选择预设数目的代码文件,将该预设数目的代码文件作为该代码文件查询结果输出。而计算相似度的方式不同时,所选择的代码文件也不同。
对于计算两个向量之间的余弦距离作为代码文件与该查询词之间的相似度时,对该每个代码文件与该查询词之间的相似度进行排序,按照相似度从大到小的顺序,选取预设数目的代码文件作为该查询词的代码文件查询结果。
对于计算两个向量之间的欧式距离作为代码文件与该查询词之间的相似度时,对该每个代码文件与该查询词之间的相似度进行排序,按照相似度从小到大的顺序,选取预设数目的代码文件作为该查询词的代码文件查询结果。
进一步地,在输出该代码文件查询结果时,显示与该查询词相似的代码文件,具体可以按照名称顺序显示代码文件的名称,或者按照名称顺序显示代码文件的存储路径,或者按照代码文件的创建时间顺序显示代码文件的存储路径等,本发明实施例对此不做限定。
本发明实施例提供的方法,考虑到了代码文件的结构对语义的影响,通过获取代码文件的文本特征向量和代码特征向量,充分挖掘代码文件的内容和结构,提高了特征提取的准确性,且在查询代码文件的过程中,基于该文本特征向量和代码特征向量计算每个代码文件与查询词之间的相似度,以得到代码文件查询结果,提高了查询精度。
可选地,在图1所示实施例技术方案的基础上,步骤101“基于历史查询过程中所应用的历史查询词向量,以及代码库中每个代码文件的文本特征向量和代码特征向量构造的转换矩阵,对查询词向量和该每个代码文件的代码特征向量进行转换,得到转换后的查询词向量和每个代码文件转换后的代码特征向量,该代码文件的代码特征向量根据代码文件中的代码块确定”之前,该方法还包括下述步骤100A-100F:
100A、对于每个代码文件,根据该代码文件的自然语言描述、注释和变量名称,获取该代码文件的文本特征向量,将获取到的不同代码文件的文本特征向量组成样本文本特征矩阵。
在本发明实施例中,为了提高代码文件查询的准确率,可以将每次应用的查询词以及代码库中的代码文件作为样本,采用机器学习算法对样本进行训练,建立数学模型,以突出相似的查询词和代码文件之间的关联关系,以便在之后的查询过程中,将查询词输入该数学模型,以输出代码文件。而在对样本进行训练之前,先获取能够对查询词和代码文件的文本内容或结构进行描述的向量。
可选地,获取该代码文件的自然语言描述、注释和变量名称中的字符段,根据预先设定的字符段与特征值之间的对应关系获取每个字符段的特征值,将不同字符段的特征值组成该代码文件的文本特征向量。
其中,字符段的特征值可以为该字符段的权重,或者该代码文件中该字符段的出现次数,本发明实施例对此不做限定。
例如,该代码文件中包括3个字符段“word1”、“word2”和“word3”,且预先设定的字符段与特征值之间的对应关系如下表1所示,则该代码文件的文本特征向量为[0,3,5]T。
表1
字符段 | word1 | word2 | word3 |
特征值 | 0 | 3 | 5 |
若3个代码文件的文本特征向量分别为[0,3,5]T、[1,1,2]T和[0,2,1]T,则以该样本文本特征矩阵中的列向量表示对应代码文件的文本特征向量,该样本文本特征矩阵为
100B、判断该代码文件中是否包括出现次数大于预设阈值的代码块,当该代码文件中包括出现次数大于该预设阈值的代码块时,提取该出现次数大于该预设阈值的代码块。
该代码文件中代码块的出现次数越多,可以认为该代码块对该代码文件语义的影响越大,因此,为了提高代码特征向量提取的准确性,判断该代码文件中是否包括出现次数大于预设阈值的代码块,以提取出现次数大于该预设阈值的代码块,根据该出现次数大于该预设阈值的代码块,确定该代码特征向量。
具体地,遍历该代码文件中的代码块,统计每个代码块的出现次数,判断每个代码块的出现次数是否大于该预设阈值,当任一代码块的出现次数大于该预设阈值时,提取该出现次数大于该预设阈值的代码块。其中,该预设阈值可以根据该代码文件的代码量和特征提取精度确定,本发明实施例对此不做限定。
需要说明的是,在实际应用中,多个代码块经过组织构成一个代码文件,每个代码块具有某种语义,而这些代码块经过组织后所构成的代码文件也具有某种语义。可以认为代码文件中频繁出现的代码块的语义对该代码文件的语义影响较大,则统计该代码文件中代码块的出现次数,挑选出现次数较多的代码块,根据出现次数较多的代码块确定该代码文件的代码特征向量。
100C、将提取到的不同代码块的出现次数组成该代码文件的代码特征向量,将不同代码文件的代码特征向量组成样本文本特征矩阵。
可选地,预先设定代码块的起始关键字符段和对应的终止标识(或终止关键字符段),遍历该代码文件中的字符段,当检测到该起始关键字符段和对应的终止标识时,将该起始关键字符段和该终止标识之间的文本内容确定为一个代码块。在统计代码块的出现次数时,判断该多个代码块的起始关键字符段和终止标识是否相同,当任两个代码块的起始关键字符段和终止标识均相同时,确定该两个代码块为相同的代码块。当然,还可以为代码块添加代码块标识,根据该代码块标识可以识别该代码文件中的代码块,且当任两个代码块的代码块标识相同时,确定该两个代码块为相同的代码块。
如设定“if”为一个起始关键字符段,设定“if”之后的第一个“}”标识为“if”对应的终止标识,则当在检测到“if”之后第一次检测到“}”标识时,将“if”与该第一次检测到的“}”标识之间的文本内容确定为一个代码块。
又如,代码文件中的代码如图2所示,当检测到赋值标识“=”时,将该赋值标识“=”所在的行作为一个代码块,即代码块1“endEdge=coverage.nextSetBit(startEdge);”和代码块3“DoublelocalH=hSpanScores.getScore(startEdge,endEdge-1);”,当检测到起始关键字符段“if”,并在起始关键字符段“if”之后第一次检测到“}”标识时,将起始关键字符段“if”与该第一次检测到“}”标识之间的文本内容“if(Edge==-1){Edge=hyp.sourceSequence.size();}”组成代码块2。
假设该预设阈值为1,该代码文件中出现次数大于1的代码块与出现次数之间的对应关系如下表2所示,则将代码块1、代码块2和代码块3的出现次数组成该代码特征向量,即为[3,2,5]T。
表2
代码块 | 代码块1 | 代码块2 | 代码块3 |
出现次数 | 3 | 2 | 5 |
若3个代码文件“D1”、“D2”和“D3”的代码特征向量分别为[3,2,5]T、[1,3,2]T和[4,2,4]T,则以该样本代码特征矩阵中的列向量表示对应代码文件的代码特征向量,该样本代码特征矩阵为
100D、获取历史查询过程中所应用的每个历史查询词向量,将获取到的历史查询词向量组成样本查询矩阵。
对于一个查询词,获取该查询词中的字符段,并根据预先设定的字符段与特征值之间的对应关系获取每个字符段的特征值,将不同字符段的特征值组成该查询词向量,该查询词向量用于表示该查询词的文本内容。
例如,该查询词包括3个字符段“C1”、“C2”和“C3”,且该预先设定的字符段与特征值之间的对应关系如下表3所示,则该查询词向量为[2,3,3]T。
表3
字符段 | C1 | C2 | C3 |
特征值 | 2 | 3 | 3 |
其中,该字符段可以为一个字符、多个字符组成的词或者多个词组成的词组,该字符段与特征值之间的对应关系可以根据字符段的词性、出现次数等确定,如可以设置为动词的特征值大于名词的特征值,名词的特征值大于虚词的特征值,或者将字符段在该查询词中的出现次数作为特征值,本发明实施例对此不做限定。
若历史查询过程中所应用的4个查询词对应的查询词向量分别为[2,3,3]T、[1,2,5]T、[1,2,3]T和[4,5,6]T,则以该样本查询矩阵中的列向量表示每个查询词的查询词向量,该样本查询矩阵为
100E、根据该样本查询矩阵、该样本文本特征矩阵和该样本代码特征矩阵,确定以第一转换矩阵和第二转换矩阵为自变量的目标函数。
在构造该转换矩阵的过程中,为了使得该查询词和该代码特征向量映射至的语义空间能够突出相似的查询词与代码文件之间的关联关系,根据目标特性以及该历史查询词向量、该每个代码文件的文本特征向量和代码特征向量构造目标函数,使得在该目标函数为最小值时能够满足该目标特性,此时该目标函数所对应的解即为构造的转换矩阵。
当该语义空间满足该目标特性时,基于一个查询词所查询到的代码文件即为与该查询词相似的代码文件,可以作为该查询词的代码文件查询结果。
在本发明实施例中,该语义空间的目标特性可以包括:
(1)原空间中的同一代码文件或相似的代码文件的文本特征向量与代码特征向量在该语义空间中相似。
为了突出相同的代码文件的关联关系,同一代码文件的文本特征向量与代码特征向量在该语义空间中应当相似。
代码库中还存在相似的代码文件,相似代码文件是指两个代码文件的文本特征向量或代码特征向量不同,但能够实现相同的功能,即该两个代码文件的语义相同。为了便于识别代码库中相似的代码文件,可以为代码文件添加文件标识(Label),文件标识相同的代码文件即为相似的代码文件。
为了突出相似代码文件之间的关联关系,两个相似代码文件中任一代码文件的文本特征向量与另一代码文件的文本特征向量在该语义空间中应当相似,该任一代码文件的文本特征向量与该另一代码文件的代码特征向量在该语义空间中也应当相似。
其中,两个向量相似是指在同一空间中,两个向量之间的余弦距离大于预设阈值,或者两个向量之间的欧式距离小于预设阈值等。
(2)原空间中不相似的代码文件在该语义空间中依然不相似。
为了突出相似代码文件之间的关联关系,在原空间中不相似的代码文件中任一代码文件的文本特征向量与另一代码文件的文本特征向量在该语义空间中应当不相似,该任一代码文件的文本特征向量与该另一代码文件的代码特征向量在该语义空间中也应当不相似。
(3)原空间中相似的文本特征向量在该语义空间中依然相似。
为了突出相似文本特征向量之间的关联关系,在原空间中相似的文本特征向量在该语义空间中应当相似。
(4)原空间中相似的代码特征向量在该语义空间中依然相似。
为了突出相似代码特征向量之间的关联关系,原空间中相似的代码特征向量在该语义空间中应当相似。
(5)被标记为相似的字符段与代码块在该语义空间中依然相似。
其中,当一个代码块的文本内容中包含一个字符段时,该字符段和该代码块可以标记为相似。为了突出字符段与代码块之间的关联关系,被标记为相似的字符段与代码块在语义空间中应当相似。
可选地,该转换矩阵包括第一转换矩阵和第二转换矩阵,以U指代该第一转换矩阵,以V指代该第二转换矩阵,则以U和V为自变量的目标函数为:
其中,和为正则化参数。
以下分别对该目标函数中的五项进行介绍,以说明基于训练得到的第一转换矩阵和第二转换矩阵,该语义空间如何满足该目标特性。
第一项: 其中,X为该样本文本特征矩阵,Y为该样本代码特征矩阵。
在本发明实施例中,以两个矩阵的差的F-范数表示两个矩阵之间的距离,则在语义空间中,XTU为转换后的文本特征矩阵、YTV为转换后的代码特征矩阵,即为转换后的文本特征矩阵与转换后的代码特征矩阵之间的距离,则∈1(U,V)用于表示转换后同一代码文件或相似代码文件的文本特征向量与代码特征向量之间的距离,即原空间中同一代码文件或相似的代码文件的文本特征向量与代码特征向量在该语义空间中的距离,当∈1(U,V)最小时,在该语义空间中相似代码文件的文本特征向量和代码特征向量之间的距离最小,即该语义空间可以实现同一代码文件或者相似代码文件的文本特征向量与代码特征向量相似。
第二项: 其中,m为进行训练时所选取的代码文件的数目,i=1,2…m,l=1,2…m,,第i个代码文件和第j个代码文件为相似代码文件,第i个代码文件和第l个代码文件为不相似代码文件,ωi1为两个相似代码文件中任一代码文件的文本内容与另一代码文件的代码块之间的相似度,可以根据该样本文本特征矩阵与该样本代码特征矩阵之间的相似度矩阵W确定。
∈2(U,V)为损失函数,用于表示转换后相似代码文件的文本特征向量与代码特征向量之间的距离与不相似的代码文件的文本特征向量与代码特征向量之间的距离之差,即原空间中相似的代码文件的文本特征向量与代码特征向量在该语义空间中的距离与原空间中不相似的代码文件的文本特征向量与代码特征向量在该语义空间中的距离之差。相似代码文件的文本特征向量与代码特征向量之间的距离越小,不相似代码文件的文本特征向量与代码特征向量之间的距离越大,越能够突出相似代码文件之间的关联关系,而当∈2(U,V)最小时,可以认为相似代码文件的文本特征向量与代码特征向量之间的距离最小,且不相似代码文件的文本特征向量与代码特征向量之间的距离最大,即可以实现原空间中相似的代码文件的文本特征向量与代码特征向量在该语义空间中相似,原空间中不相似的代码文件在该语义空间中依然不相似。
其中,W为该样本文本特征矩阵与该样本代码特征矩阵之间的相似度矩阵,用于表示一个代码文件中字符段与另一代码文件的代码块之间的相似度。该相似度矩阵W可以通过判断两个相似代码文件中任一代码文件的代码块中是否包括另一代码文件的字符段,如设定该相似度矩阵W以两个相似的代码文件中其中一个代码文件的字符段为行,以另一代码文件的代码块为列,当W中任一元素位置对应的代码块中包括该元素位置对应的字符段时,在该元素位置填充1,而当任一元素位置对应的代码块中不包括该元素位置对应的字符段时,在该元素位置填充0。
第三项: 其中,Q为该样本查询矩阵,L为矩阵W的归一化拉普拉斯矩阵。
本领域技术人员可以获知,一个矩阵A的F范数等于ATA的迹,则可以采用图挖掘算法,通过计算矩阵的迹得到两个矩阵之间的距离。
W为该样本文本特征矩阵与该样本代码特征矩阵之间的相似度矩阵,用于表示一个代码文件中字符段与另一代码文件的代码块之间的相似度,如果将这些字符段和代码块看作该语义空间中的节点,则根据该矩阵W即可构造一个无向图的数据结构,根据该数据结构可以得到W的归一化拉普拉斯矩阵L,其中,I是单位矩阵,D是一个对角矩阵,D中的每个元素值dii=∑jwij。根据该矩阵L可以计算出W构成的图结构在映射至该语义空间后的图正则g(U,V)。
其中,用于表示转换后相似代码文件的文本特征向量之间的距离,即原空间中相似的代码文件的文本特征向量在该语义空间中的距离,和用于表示转换后相似代码文件的文本特征向量与代码特征向量之间的距离,即原空间中相似代码文件的文本特征向量和代码特征向量在该语义空间中的距离,用于表示转换后相似代码文件的代码特征向量之间的距离,即原空间中相似代码文件的代码特征向量在该语义空间中的距离,和用于表示转换后该历史查询词向量与每个代码文件的文本特征向量之间的距离,即原空间中该历史查询词向量与每个代码文件的文本特征向量在该语义空间中的距离,和用于表示转换后该历史查询词向量与每个代码文件的代码特征向量之间的距离,即原空间中该历史查询词向量与每个代码文件的代码特征向量在该语义空间中的距离,用于表示转换后相似的历史查询词向量之间的距离,即原空间中相似的历史查询词向量在该语义空间中的距离。当g(U,V)最小时,可以认为g(U,V)所表示的每一项距离均最小,则该语义空间可以实现原空间中相似的代码文件的文本特征向量与代码特征向量在该语义空间中依然相似,原空间中相似的文本特征向量在该语义空间中依然相似,原空间中相似的代码特征向量在该语义空间中依然相似。
由于在后续计算该目标函数的梯度时,梯度中第三项的常数项为2,因此,为了简化公式,将g(U,V)中每一项距离的系数设为该系数并不代表实际意义,也可以替换为其他数值或者忽略不计。
第四项: c(U,V)用于表示转换后任一字符段与包含该字符段的代码文件的代码特征向量之间的距离,即任一字符段与包含该字符段的代码文件的代码特征向量在该语义空间中的距离,当c(U,V)最小时,若一个代码文件中包含一个字符段,则该字符段到该代码文件的代码特征向量之间的距离最小,则该语义空间可以实现被标记为相似的字符段与代码块在该语义空间中依然相似。
其中,R为该样本文本特征矩阵与该样本代码特征矩阵之间的相似度矩阵,用于表示代码文件中字符段与代码块之间的相似度。该相似度矩阵R可以通过判断任一代码块中是否包括任一字符段确定,如设定该相似度矩阵R以字符段为行,以代码块为列,当R中任一元素位置对应的代码块中包括该元素位置对应的字符段时,在该元素位置填充1,而当任一元素位置对应的代码块中不包括该元素位置对应的字符段时,在该元素位置填充0。
例如,代码文件的文本特征向量的维度为3,该文本特征向量的每个向量值分别表示“字符段1”、“字符段2”和“字符段3”的特征值,代码特征向量的维度为4,该代码特征向量的每个向量值分别表示“代码块1”、“代码块2”、“代码块3”和“代码块4”在对应的代码文件中的出现次数,分别判断上述4个代码块中是否包括上述3个字符段。如下表4所示,“√”表示对应的代码块包含对应的字符段,“×”表示对应的代码块不包含对应的字符段,当确定“代码块2”包括“字符段2”,“代码块3”包括“字符段3”,“代码块4”包括“字符段1”和“字符段2”时,该相似度矩阵R为
表4
代码块1 | 代码块2 | 代码块3 | 代码块4 | |
字符段1 | × | × | × | √ |
字符段2 | × | √ | × | √ |
字符段3 | × | × | √ | × |
第五项: r(U,V)用于控制该第一转换矩阵U和该第二转换矩阵V的复杂程度,以防止过拟合。
100F、求解该目标函数的最小值,获取该目标函数为最小值时所对应的解。
在本发明实施例中,对于自变量U来说,该目标函数满足两个矩阵U的中点的函数值大于两个矩阵U的函数值的平均值,对于自变量V来说,该目标函数满足两个矩阵V的中点的函数值大于两个矩阵V的函数值的平均值,则该目标函数对该第一转换矩阵和该第二转换矩阵非凸,无法准确求解该目标函数的最小值,此时可以基于梯度下降算法进行优化,直至该目标函数收敛,该目标函数的值无限趋近于最小值,以得到该目标函数收敛时的第一转换矩阵和第二转换矩阵。
基于梯度下降算法进行优化的具体过程为:计算该目标函数对该第一转换矩阵的第一梯度以及该目标函数对该第二转换矩阵的第二梯度,基于该第一梯度和第二梯度,沿着梯度相反的方向分别对该第一转换矩阵和该第二转换矩阵进行迭代,直至迭代次数达到最大迭代次数时或者该目标函数收敛时停止,输出此时的第一转换矩阵和第二转化矩阵。进一步地,该第一梯度用于对该第一转换矩阵进行优化,该第二梯度用于对该第二转换矩阵进行优化,每次迭代优化时可以固定该第一转换矩阵和该第二转换矩阵中的其中一项的值,对另一项进行迭代优化。
该目标函数F对该第一转换矩阵U的第一梯度为:
该目标函数F对该第二转换矩阵V的第二梯度为:
该第一转换矩阵的迭代公式为:该第二转换矩阵的迭代公式为: 其中,η为迭代步长。
以先固定该第二转换矩阵V,对该第一转换矩阵U进行迭代优化为例,在每次迭代时将该第一转换矩阵U替换为代入该目标函数中得到优化的目标函数,判断该优化的目标函数是否收敛,当该优化的目标函数收敛时输出该第一转换矩阵和该第二转换矩阵V,当该优化的目标函数不收敛时,继续将当前的第一转换矩阵U替换为对该第一转换矩阵U进行迭代,直至该目标函数收敛,或者直至该迭代次数到达该第一转换矩阵的最大迭代次数,固定该第一转换矩阵U,对该第二转换矩阵V进行迭代优化。
需要说明的是,本发明实施例以基于梯度下降算法对该第一转换矩阵和该第二转换矩阵进行迭代优化为例进行说明,在实际应用过程中还可以使用其他的机器学习算法对该第一转换矩阵和该第二转换矩阵进行优化,本发明实施例对此不做限定。
通过基于机器学习算法,分析代码特征向量和文本特征向量在训练样本中的共现关系,实现了代码块与字符段的直接比较,进一步提高了查询精度。
可选地,在图1所示实施例技术方案的基础上,步骤101“基于历史查询过程中所应用的历史查询词向量、该每个代码文件的文本特征向量和代码特征向量构造的转换矩阵,对查询词向量和该每个代码文件的代码特征向量进行向量转换,得到转换后的查询词向量和每个代码文件转换后的代码特征向量”包括下述步骤1011-1014:
1011、计算第一转换矩阵的转置矩阵与该查询词向量的乘积,得到转换后的查询词向量,该转换矩阵包括该第一转换矩阵和第二转换矩阵。
在本发明实施例中,为了将该查询词向量和该代码特征向量映射至同一语义空间,需要获取该查询词向量和该代码特征向量的维度,以便根据该查询词向量和该代码特征向量的维度进行相应的转置运算,以实现矩阵乘法运算。
假设代码文件的个数为m,文本特征向量的维度为dx,则该查询词向量q的维度为dx*1。在构造转换矩阵的过程中,根据该第一转换矩阵U将该样本文本特征矩阵X映射至语义空间XTU,则构造的第一转换矩阵U的维度为dx*k,k为任意值。因此,为了实现矩阵乘法运算,将该第一转换矩阵U进行转置,计算该第一转换矩阵U的转置矩阵与该查询词向量q的乘积UTq。
需要说明的是,为了便于进行说明,本发明实施例以所获取的向量是指列向量为例,在后续进行矩阵乘法运算和向量提取时,对矩阵进行转置后提取的向量是指原矩阵的行向量。
1012、将每个代码文件的代码特征向量组成代码特征矩阵。
组成代码特征矩阵的过程与步骤100C中组成该样本代码特征矩阵的过程类似,在此不再赘述。
1013、计算该代码特征矩阵的转置矩阵与该第二转换矩阵的乘积,得到转换后的代码特征矩阵。
基于步骤1011的举例,为了与该样本代码特征矩阵Y进行区分,以Y’指代该代码特征矩阵,假设该代码特征向量的维度为dy,则该代码特征矩阵Y’的维度为dy*m。在构造转换矩阵的过程中,根据该第二转换矩阵V将该样本代码特征矩阵Y映射至语义空间YTV,则第二转换矩阵的维度为dy*k。因此,为了实现矩阵乘法运算,将该代码特征矩阵Y’进行转置,计算该代码特征矩阵Y’的转置矩阵与该第二转换矩阵的乘积Y’TV,即为转换后的代码特征矩阵。
1014、将该转换后的代码特征矩阵的转置矩阵中的每个向量提取为对应代码文件的转换后的代码特征向量。
该代码特征矩阵Y’的每一列表示对应的代码文件的代码特征向量,则该转换后的代码特征矩阵Y’TV的每一行表示转换后对应的代码文件的代码特征向量,则将该转换后的代码特征矩阵转置后再提取向量,即将该转换后的代码特征矩阵的转置矩阵中的每个向量提取为对应代码文件的转换后的代码特征向量。
以m为3,dx和dy均为3,k为2为例,此时,该查询词向量为[2,3,3]T,该第一转换矩阵U为 该第二转换矩阵V为 代码库中3个代码文件“D1”、“D2”和“D3”的代码特征向量分别为[3,2,5]T、[1,3,2]T和[4,2,4]T,则以每一列表示对应代码文件的代码特征向量,该代码特征矩阵Y’为 对该查询词向量进行转换时,计算 则转换后的查询词向量为 对该代码特征向量进行转换时,计算 则“D1”转换后的代码特征向量为 “D2”转换后的代码特征向量为 “D3”转换后的代码特征向量为
需要说明的是,步骤1011-1014为可选步骤,在对该查询词向量和该代码特征向量进行转换时,需要进行矩阵乘法运算,而只有两个矩阵中一个矩阵的行数与另一矩阵的列数相等时,两个矩阵才可以进行矩阵乘法运算。因此,在对该查询词向量进行转换时,判断该查询词向量与该第一转换矩阵中其中一个矩阵的行数是否等于另一矩阵的列数,如果该查询词向量的行数等于该第一转换矩阵的列表,则可以直接计算该查询词向量和该第一转换矩阵的乘积,得到转换后的查询词向量。如果该第一转换矩阵的列数等于该查询词向量的列数,则将该第一转换矩阵进行转置后,计算该第一转换矩阵的转置矩阵与该查询词向量的乘积,得到转换后的查询词向量。在对该代码特征向量进行转换时与此同理,在此不再赘述。
可选地,在图1所示实施例技术方案的基础上,步骤102“根据该查询词向量、该转换后的查询词向量、每个代码文件转换后的代码特征向量以及该每个代码文件的文本特征向量,计算每个代码文件与查询词之间的相似度”包括下述步骤1021-1023:
1021、计算每个代码文件的文本特征向量与该查询词向量之间的第一相似度。
可选地,计算每个代码文件的文本特征向量与该查询词向量之间的余弦距离,将该文本特征向量与该查询词向量之间的余弦距离作为该第一相似度。基于步骤1014的举例,该查询词向量q为[2,3,3]T,假设“D1”的文本特征向量x为[1,2,1]T,则该第一相似度为
1022、计算每个代码文件转换后的代码特征向量与该转换后的查询词向量之间的第二相似度。
可选地,计算每个代码文件转换后的代码特征向量与该转换后的查询词向量之间的余弦距离,将该代码特征向量与该转换后的查询词向量之间的余弦距离作为该第二相似度。基于该步骤1014和步骤1021的举例,转换后的查询词向量q为 “D1”的转换后的代码特征向量y为 则该第二相似度为
1023、对每个代码文件的第一相似度和第二相似度进行加权求和,得到每个代码文件与该查询词之间的相似度。
在本发明实施例中,该第一相似度用于表示该查询词与该代码文件之间的文本内容的相似度,该第二相似度用于表示该查询词与该代码文件之间结构的相似度,则在进行代码文件查询时应综合考虑该第一相似度和该第二相似度,以得到每个代码文件与该查询词之间的相似度。而在实际应用中,该第一相似度和该第二相似度对该代码文件与该查询词之间的相似度的影响可能不同,当两个代码文件的文本内容相似但结构不同时,该第二相似度对该代码文件与该查询词之间的相似度的影响较大,而当两个代码文件的结构相似但文本内容不同时,该第一相似度对该代码文件与该查询词之间的相似度影响较大,则可以设定该第一相似度的权重和第二相似度的权重,以权重表示该第一相似度和该第二相似度对该代码文件与该查询词之间相似度的影响。根据该设定的权重,对每个代码文件的第一相似度和第二相似度进行加权求和,得到每个代码文件与该查询词之间的相似度。
基于步骤1021和步骤1022的举例,假设该第一余弦相似度的权重为0.6,该第二余弦相似度的权重为0.4,则代码文件“D1”与该查询词之间的相似度为0.957*0.6+0.944*0.4=0.9518。
上述所有可选技术方案,可以采用任意结合形成本发明的可选实施例,在此不再一一赘述。
以下将结合图3对计算该代码文件与该查询词之间的相似度过程进行说明。
参见图3,从代码文件中提取注释、变量名称等文本内容,根据文本内容的特征值得到文本特征向量,从代码文件中提取出现次数大于预设阈值的代码块,将出现次数大于该预设阈值的代码块的出现次数组成该代码特征向量。在进行代码文件查询时,根据查询词获取查询词向量,计算该查询词向量与文本特征向量之间的第一相似度,将该查询词向量和该代码特征向量进行转换后,计算转换后的查询词向量和转换后的代码特征向量之间的第二相似度,对该第一相似度和该第二相似度进行加权求和,得到该代码文件与该查询词之间的相似度。
在此过程中,首先对代码文件的文本内容和出现次数大于预设阈值的代码块进行提取,则该代码文件具有两种表示形式:基于文本内容的文本特征向量和基于结构的代码特征向量。输入查询词时,该查询词也转化为查询词向量,此时该文本特征向量即可与该查询词向量直接比较,则计算该文本特征向量与该查询词向量之间的第一相似度。而为了比较该代码特征向量与该查询词向量,先对该代码特征向量和该查询词向量进行转换,将两者映射至同一个语义空间,在该语义空间中计算转换后的代码特征向量与转换后的查询词向量之间的第二相似度。通过计算该第一相似度和该第二相似度的加权和,即可得到代码文件与该查询词之间的相似度。根据每个代码文件最终得到的相似度可以对代码文件进行排序,得到代码文件查询结果。
本发明实施例提供的方法,考虑到了代码文件的结构对语义的影响,通过获取代码文件的文本特征向量和代码特征向量,充分挖掘代码文件的内容和结构,提高了特征提取的准确性,且在查询代码文件的过程中,基于该文本特征向量和代码特征向量计算每个代码文件与查询词之间的相似度,以得到代码文件查询结果,提高了查询精度。进一步地,基于梯度下降算法对该第一转换矩阵和该第二转换矩阵进行迭代优化,通过分析代码特征向量和文本特征向量在训练样本中的共现关系,实现了代码块与字符段的直接比较,进一步提高了查询精度。
图4是本发明实施例提供的一种代码文件查询装置结构示意图,参见图4,该装置包括:转换模块401、相似度计算模块402、结果输出模块403,
其中,转换模块401用于基于历史查询过程中所应用的历史查询词向量,以及代码库中每个代码文件的文本特征向量和代码特征向量构造的转换矩阵,对当前查询词向量和该每个代码文件的代码特征向量进行转换,得到转换后的查询词向量和每个代码文件转换后的代码特征向量,该代码文件的代码特征向量根据代码文件中的代码块确定;
相似度计算模块402与转换模块401连接,用于根据该当前查询词向量、该转换后的查询词向量、该每个代码文件转换后的代码特征向量以及该每个代码文件的文本特征向量,计算每个代码文件与查询词之间的相似度;
结果输出模块403与相似度计算模块402连接,用于根据该每个代码文件与该查询词之间的相似度,得到代码文件查询结果。
可选地,该转换模块401包括:
第一转换单元,用于计算第一转换矩阵的转置矩阵与该查询词向量的乘积,得到转换后的查询词向量,该转换矩阵包括该第一转换矩阵和第二转换矩阵;
代码特征组成单元,用于将每个代码文件的代码特征向量组成代码特征矩阵;
第二转换单元,用于计算该代码特征矩阵的转置矩阵与该第二转换矩阵的乘积,得到转换后的代码特征矩阵;
代码特征向量提取单元,用于提取所述转换后的代码特征矩阵的转置矩阵中的每个向量,作为对应代码文件的转换后的代码特征向量。
可选地,该相似度计算模块402包括:
第一计算单元,用于计算每个代码文件的文本特征向量与该查询词向量之间的第一相似度;
第二计算单元,用于计算每个代码文件转换后的代码特征向量与该转换后的查询词向量之间的第二相似度;
加权求和单元,用于对每个代码文件的第一相似度和第二相似度进行加权求和,得到每个代码文件与该查询词之间的相似度。
可选地,该装置还包括:
文本特征向量获取模块,用于对于每个代码文件,根据该代码文件的自然语言描述、注释和变量名称,获取该代码文件的文本特征向量;
出现次数判断模块,用于判断该代码文件中是否包括出现次数大于预设阈值的代码块;
代码块提取模块,用于当该代码文件中包括出现次数大于该预设阈值的代码块时,提取该出现次数大于该预设阈值的代码块;
代码特征向量组成模块,用于将提取到的不同代码块的出现次数组成该代码文件的代码特征向量。
可选地,该装置还包括:
第一矩阵组成模块,用于获取历史查询过程中所应用的每个历史查询词向量,组成样本查询矩阵;
第二矩阵组成模块,用于将代码库中每个代码文件的文本特征向量组成样本文本特征矩阵;
第三矩阵组成模块,用于将代码块中每个代码文件的代码特征向量组成样本代码特征矩阵;
目标函数确定模块,用于根据该样本查询矩阵、该样本文本特征矩阵和该样本代码特征矩阵,确定以第一转换矩阵和第二转换矩阵为自变量的目标函数;
目标函数求解模块,用于求解该目标函数的最小值,获取该目标函数为最小值时所对应的解。
可选地,该目标函数为:
其中,和为正则化参数,U为该第一转换矩阵,V为该第二转换矩阵,∈1(U,V)用于表示转换后同一代码文件或相似代码文件的文本特征向量与代码特征向量之间的距离,∈2(U,V)用于表示相似代码文件的文本特征向量与代码特征向量之间的距离与不相似的代码文件的文本特征向量与代码特征向量之间的距离之差,g(U,V)用于表示转换后相似代码文件的文本特征向量之间的距离、代码特征向量之间的距离、文本特征向量与代码特征向量之间的距离、该历史查询词向量与每个代码文件的文本特征向量之间的距离、该历史查询词向量与每个代码文件的代码特征向量之间的距离以及相似历史查询词向量之间的距离之和,c(U,V)用于表示转换后任一字符段与包含该字符段的代码文件的代码特征向量之间的距离,r(U,V)用于控制该第一转换矩阵U和该第二转换矩阵V的复杂程度。
可选地,
其中,m为代码文件的数目,i=1,2…m,l=1,2…m,j→i,n为历史查询过程中所应用的历史查询词的数目,X为该样本文本特征矩阵,Y为该样本代码特征矩阵,Q为该样本查询矩阵,W和R为该样本文本特征矩阵与该样本代码特征矩阵之间的相似度矩阵,L为矩阵W的归一化拉普拉斯矩阵。
本发明实施例提供的装置,考虑到了代码文件的结构对语义的影响,通过获取代码文件的文本特征向量和代码特征向量,充分挖掘代码文件的内容和结构,提高了特征提取的准确性,且在查询代码文件的过程中,基于该文本特征向量和代码特征向量计算每个代码文件与查询词之间的相似度,以得到代码文件查询结果,提高了查询精度。
需要说明的是:上述实施例提供的代码文件查询装置在查询代码文件时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的代码文件查询装置与代码文件查询方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相似的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (14)
1.一种代码文件查询方法,其特征在于,所述方法包括:
基于历史查询过程中所应用的历史查询词向量,以及代码库中每个代码文件的文本特征向量和代码特征向量构造的转换矩阵,对当前查询词向量和所述每个代码文件的代码特征向量进行转换,得到转换后的查询词向量和每个代码文件转换后的代码特征向量,所述代码文件的代码特征向量根据代码文件中的代码块确定;
根据所述当前查询词向量、所述转换后的查询词向量、所述每个代码文件转换后的代码特征向量以及所述每个代码文件的文本特征向量,计算每个代码文件与查询词之间的相似度;
根据所述每个代码文件与所述查询词之间的相似度,得到代码文件查询结果。
2.根据权利要求1所述的方法,其特征在于,基于历史查询过程中所应用的历史查询词向量、所述每个代码文件的文本特征向量和代码特征向量构造的转换矩阵,对当前查询词向量和所述每个代码文件的代码特征向量进行向量转换,得到转换后的查询词向量和每个代码文件转换后的代码特征向量包括:
计算第一转换矩阵的转置矩阵与所述查询词向量的乘积,得到转换后的查询词向量,所述转换矩阵包括所述第一转换矩阵和第二转换矩阵;
将每个代码文件的代码特征向量组成代码特征矩阵;
计算所述代码特征矩阵的转置矩阵与所述第二转换矩阵的乘积,得到转换后的代码特征矩阵;
提取所述转换后的代码特征矩阵的转置矩阵中的每个向量,作为对应代码文件的转换后的代码特征向量。
3.根据权利要求1所述的方法,其特征在于,根据所述当前查询词向量、所述转换后的查询词向量、所述每个代码文件转换后的代码特征向量以及所述每个代码文件的文本特征向量,计算每个代码文件与查询词之间的相似度包括:
计算每个代码文件的文本特征向量与所述查询词向量之间的第一相似度;
计算每个代码文件转换后的代码特征向量与所述转换后的查询词向量之间的第二相似度;
对每个代码文件的第一相似度和第二相似度进行加权求和,得到每个代码文件与所述查询词之间的相似度。
4.根据权利要求1所述的方法,其特征在于,基于历史查询过程中所应用的历史查询词向量,以及代码库中每个代码文件的文本特征向量和代码特征向量构造的转换矩阵,对当前查询词向量和所述每个代码文件的代码特征向量进行转换,得到转换后的查询词向量和每个代码文件转换后的代码特征向量之前,所述方法还包括:
对于每个代码文件,根据所述代码文件的自然语言描述、注释和变量名称,获取所述代码文件的文本特征向量;
判断所述代码文件中是否包括出现次数大于预设阈值的代码块;
当所述代码文件中包括出现次数大于所述预设阈值的代码块时,提取所述出现次数大于所述预设阈值的代码块;
将提取到的不同代码块的出现次数组成所述代码文件的代码特征向量。
5.根据权利要求2所述的方法,其特征在于,基于历史查询过程中所应用的历史查询词向量、所述每个代码文件的文本特征向量和代码特征向量构造的转换矩阵,对当前查询词向量和所述每个代码文件的代码特征向量进行向量转换,得到转换后的查询词向量和每个代码文件转换后的代码特征向量之前,所述方法还包括:
获取历史查询过程中所应用的每个历史查询词向量,组成样本查询矩阵;
将代码库中每个代码文件的文本特征向量组成样本文本特征矩阵;
将代码块中每个代码文件的代码特征向量组成样本代码特征矩阵;
根据所述样本查询矩阵、所述样本文本特征矩阵和所述样本代码特征矩阵,确定以第一转换矩阵和第二转换矩阵为自变量的目标函数;
求解所述目标函数的最小值,获取所述目标函数为最小值时所对应的解。
6.根据权利要求5所述的方法,其特征在于,所述目标函数为:
其中,和为正则化参数,U为所述第一转换矩阵,V为所述第二转换矩阵,∈1(U,V)用于表示转换后同一代码文件或相似代码文件的文本特征向量与代码特征向量之间的距离,∈2(U,V)用于表示转换后相似代码文件的文本特征向量与代码特征向量之间的距离与不相似的代码文件的文本特征向量与代码特征向量之间的距离之差,g(U,V)用于表示转换后相似代码文件的文本特征向量之间的距离、代码特征向量之间的距离、文本特征向量与代码特征向量之间的距离、所述历史查询词向量与每个代码文件的文本特征向量之间的距离、所述历史查询词向量与每个代码文件的代码特征向量之间的距离以及相似历史查询词向量之间的距离之和,c(U,V)用于表示转换后任一字符段与包含所述字符段的代码文件的代码特征向量之间的距离,r(U,V)用于控制所述第一转换矩阵U和所述第二转换矩阵V的复杂程度。
7.根据权利要求6所述的方法,其特征在于,
其中,m为代码文件的数目,第i个代码文件和第j个代码文件为相似代码文件,第i个代码文件和第l个代码文件为不相似代码文件,n为历史查询过程中所应用的历史查询词的数目,X为所述样本文本特征矩阵,Y为所述样本代码特征矩阵,Q为所述样本查询矩阵,W和R为所述样本文本特征矩阵与所述样本代码特征矩阵之间的相似度矩阵,L为矩阵W的归一化拉普拉斯矩阵。
8.一种代码文件查询装置,其特征在于,所述装置包括:
转换模块,用于基于历史查询过程中所应用的历史查询词向量,以及代码库中每个代码文件的文本特征向量和代码特征向量构造的转换矩阵,对当前查询词向量和所述每个代码文件的代码特征向量进行转换,得到转换后的查询词向量和每个代码文件转换后的代码特征向量,所述代码文件的代码特征向量根据代码文件中的代码块确定;
相似度计算模块,用于根据所述当前查询词向量、所述转换后的查询词向量、所述每个代码文件转换后的代码特征向量以及所述每个代码文件的文本特征向量,计算每个代码文件与查询词之间的相似度;
结果输出模块,用于根据所述每个代码文件与所述查询词之间的相似度,得到代码文件查询结果。
9.根据权利要求8所述的装置,其特征在于,所述转换模块包括:
第一转换单元,用于计算第一转换矩阵的转置矩阵与所述查询词向量的乘积,得到转换后的查询词向量,所述转换矩阵包括所述第一转换矩阵和第二转换矩阵;
代码特征组成单元,用于将每个代码文件的代码特征向量组成代码特征矩阵;
第二转换单元,用于计算所述代码特征矩阵的转置矩阵与所述第二转换矩阵的乘积,得到转换后的代码特征矩阵;
代码特征向量提取单元,用于提取所述转换后的代码特征矩阵的转置矩阵中的每个向量,作为对应代码文件的转换后的代码特征向量。
10.根据权利要求8所述的装置,其特征在于,所述相似度计算模块包括:
第一计算单元,用于计算每个代码文件的文本特征向量与所述查询词向量之间的第一相似度;
第二计算单元,用于计算每个代码文件转换后的代码特征向量与所述转换后的查询词向量之间的第二相似度;
加权求和单元,用于对每个代码文件的第一相似度和第二相似度进行加权求和,得到每个代码文件与所述查询词之间的相似度。
11.根据权利要求8所述的装置,其特征在于,所述装置还包括:
文本特征向量获取模块,用于对于每个代码文件,根据所述代码文件的自然语言描述、注释和变量名称,获取所述代码文件的文本特征向量;
出现次数判断模块,用于判断所述代码文件中是否包括出现次数大于预设阈值的代码块;
代码块提取模块,用于当所述代码文件中包括出现次数大于所述预设阈值的代码块时,提取所述出现次数大于所述预设阈值的代码块;
代码特征向量组成模块,用于将提取到的不同代码块的出现次数组成所述代码文件的代码特征向量。
12.根据权利要求8所述的装置,其特征在于,所述装置还包括:
第一矩阵组成模块,用于获取历史查询过程中所应用的每个历史查询词向量,组成样本查询矩阵;
第二矩阵组成模块,用于将代码库中每个代码文件的文本特征向量组成样本文本特征矩阵;
第三矩阵组成模块,用于将代码块中每个代码文件的代码特征向量组成样本代码特征矩阵;
目标函数确定模块,用于根据所述样本查询矩阵、所述样本文本特征矩阵和所述样本代码特征矩阵,确定以第一转换矩阵和第二转换矩阵为自变量的目标函数;
目标函数求解模块,用于求解所述目标函数的最小值,获取所述目标函数为最小值时所对应的解。
13.根据权利要求12所述的装置,其特征在于,所述目标函数为:
其中,和为正则化参数,U为所述第一转换矩阵,V为所述第二转换矩阵,∈1(U,V)用于表示转换后同一代码文件或相似代码文件的文本特征向量与代码特征向量之间的距离,∈2(U,V)用于表示相似代码文件的文本特征向量与代码特征向量之间的距离与不相似的代码文件的文本特征向量与代码特征向量之间的距离之差,g(U,V)用于表示转换后相似代码文件的文本特征向量之间的距离、代码特征向量之间的距离、文本特征向量与代码特征向量之间的距离、所述历史查询词向量与每个代码文件的文本特征向量之间的距离、所述历史查询词向量与每个代码文件的代码特征向量之间的距离以及相似历史查询词向量之间的距离之和,c(U,V)用于表示转换后任一字符段与包含所述字符段的代码文件的代码特征向量之间的距离,r(U,V)用于控制所述第一转换矩阵U和所述第二转换矩阵V的复杂程度。
14.根据权利要求13所述的装置,其特征在于,
其中,m为代码文件的数目,第i个代码文件和第j个代码文件为相似代码文件,第i个代码文件和第l个代码文件为不相似代码文件,n为历史查询过程中所应用的历史查询词的数目,X为所述样本文本特征矩阵,Y为所述样本代码特征矩阵,Q为所述样本查询矩阵,W和R为所述样本文本特征矩阵与所述样本代码特征矩阵之间的相似度矩阵,L为矩阵W的归一化拉普拉斯矩阵。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410042833.4A CN104809139B (zh) | 2014-01-29 | 2014-01-29 | 代码文件查询方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410042833.4A CN104809139B (zh) | 2014-01-29 | 2014-01-29 | 代码文件查询方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104809139A true CN104809139A (zh) | 2015-07-29 |
CN104809139B CN104809139B (zh) | 2019-03-19 |
Family
ID=53693964
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410042833.4A Active CN104809139B (zh) | 2014-01-29 | 2014-01-29 | 代码文件查询方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104809139B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105045781A (zh) * | 2015-08-27 | 2015-11-11 | 广州神马移动信息科技有限公司 | 查询词相似度计算方法及装置、查询词搜索方法及装置 |
CN108320026A (zh) * | 2017-05-16 | 2018-07-24 | 腾讯科技(深圳)有限公司 | 机器学习模型训练方法和装置 |
WO2019028990A1 (zh) * | 2017-08-09 | 2019-02-14 | 上海壹账通金融科技有限公司 | 代码元素的命名方法、装置、电子设备及介质 |
CN111190642A (zh) * | 2019-11-25 | 2020-05-22 | 深圳壹账通智能科技有限公司 | 代码提示方法、装置、计算机设备和存储介质 |
CN112102124A (zh) * | 2020-08-31 | 2020-12-18 | 湖北美和易思教育科技有限公司 | 一种大数据基础算法学习自动评价方法及*** |
WO2023065638A1 (zh) * | 2021-10-22 | 2023-04-27 | 平安科技(深圳)有限公司 | 一种数据检索方法、装置、电子设备以及存储介质 |
CN116401336A (zh) * | 2023-03-31 | 2023-07-07 | 华院计算技术(上海)股份有限公司 | 认知智能查询方法及装置、计算机可读存储介质、终端 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060195433A1 (en) * | 2000-07-06 | 2006-08-31 | Kim Si H | Information searching system and method thereof |
CN101233512A (zh) * | 2005-07-29 | 2008-07-30 | 微软公司 | 用于持续对象检索的智能sql产生 |
CN101454776A (zh) * | 2005-10-04 | 2009-06-10 | 汤姆森环球资源公司 | 用于识别相关法律文件的***、方法、和软件 |
-
2014
- 2014-01-29 CN CN201410042833.4A patent/CN104809139B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060195433A1 (en) * | 2000-07-06 | 2006-08-31 | Kim Si H | Information searching system and method thereof |
CN101233512A (zh) * | 2005-07-29 | 2008-07-30 | 微软公司 | 用于持续对象检索的智能sql产生 |
CN101454776A (zh) * | 2005-10-04 | 2009-06-10 | 汤姆森环球资源公司 | 用于识别相关法律文件的***、方法、和软件 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105045781A (zh) * | 2015-08-27 | 2015-11-11 | 广州神马移动信息科技有限公司 | 查询词相似度计算方法及装置、查询词搜索方法及装置 |
CN108320026A (zh) * | 2017-05-16 | 2018-07-24 | 腾讯科技(深圳)有限公司 | 机器学习模型训练方法和装置 |
CN108320026B (zh) * | 2017-05-16 | 2022-02-11 | 腾讯科技(深圳)有限公司 | 机器学习模型训练方法和装置 |
WO2019028990A1 (zh) * | 2017-08-09 | 2019-02-14 | 上海壹账通金融科技有限公司 | 代码元素的命名方法、装置、电子设备及介质 |
CN111190642A (zh) * | 2019-11-25 | 2020-05-22 | 深圳壹账通智能科技有限公司 | 代码提示方法、装置、计算机设备和存储介质 |
CN112102124A (zh) * | 2020-08-31 | 2020-12-18 | 湖北美和易思教育科技有限公司 | 一种大数据基础算法学习自动评价方法及*** |
WO2023065638A1 (zh) * | 2021-10-22 | 2023-04-27 | 平安科技(深圳)有限公司 | 一种数据检索方法、装置、电子设备以及存储介质 |
CN116401336A (zh) * | 2023-03-31 | 2023-07-07 | 华院计算技术(上海)股份有限公司 | 认知智能查询方法及装置、计算机可读存储介质、终端 |
CN116401336B (zh) * | 2023-03-31 | 2024-03-29 | 华院计算技术(上海)股份有限公司 | 认知智能查询方法及装置、计算机可读存储介质、终端 |
Also Published As
Publication number | Publication date |
---|---|
CN104809139B (zh) | 2019-03-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104809139A (zh) | 代码文件查询方法和装置 | |
CN109791626A (zh) | 神经网络权重编码方法、计算装置及硬件*** | |
CN106294684A (zh) | 词向量的文本分类方法及终端设备 | |
Chen et al. | Dimension reduction of decision variables for multireservoir operation: A spectral optimization model | |
CN104573046A (zh) | 一种基于词向量的评论分析方法及*** | |
CN105869016A (zh) | 一种基于卷积神经网络的点击通过率预估方法 | |
CN111460830B (zh) | 一种司法文本中经济事件的抽取方法及*** | |
CN105893362A (zh) | 获取知识点语义向量的方法、确定相关知识点的方法及*** | |
CN104699797A (zh) | 一种网页数据结构化解析方法和装置 | |
CN109271632B (zh) | 一种监督的词向量学习方法 | |
CN104850533A (zh) | 一种带约束的非负矩阵分解方法及求解方法 | |
CN106127330A (zh) | 基于最小二乘支持向量机的脉动风速预测方法 | |
CN115238893B (zh) | 面向自然语言处理的神经网络模型量化方法和装置 | |
CN114064852A (zh) | 自然语言的关系抽取方法、装置、电子设备和存储介质 | |
CN105808962A (zh) | 考虑多个风电出力随机性的电力***电压概率的评估方法 | |
Hu et al. | Linear convergence of an alternating polar decomposition method for low rank orthogonal tensor approximations | |
Rockafellar et al. | Minimizing buffered probability of exceedance by progressive hedging | |
Chheda et al. | Box embeddings: An open-source library for representation learning using geometric structures | |
CN110197252A (zh) | 基于距离的深度学习 | |
CN110046344A (zh) | 添加分隔符的方法及终端设备 | |
CN107730002B (zh) | 一种通信网关机遥控参数智能模糊比对方法 | |
CN114154505B (zh) | 一种面向电力规划评审领域的命名实体识别方法 | |
McIntire et al. | Applying robust design optimization to large systems | |
Van Ban et al. | Querying Data with Fuzzy Information in Object-Oriented Databases Based on Hedge Algebraic Semantic | |
Junior et al. | An efficient starting point to adaptive holomorphic embedding power flow methods |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |