seq搜索引擎优化至少包括那几步?( 博文基线模型原理如何实现semanticsearch?|模型)

优采云 发布时间: 2021-11-18 20:20

  seq搜索引擎优化至少包括那几步?(

博文基线模型原理如何实现semanticsearch?|模型)

  重现基线模型

  我们选择重现的模型是 Hamel 模型。

  图片来源和参考博文

  基线模型原理

  如何实现语义搜索?我们需要创建一个代码空间和语言空间共享的向量空间,如下图

  

  通过将代码和自然语言映射到这个向量空间,可以比较{text, code}的相似度,选择相似度最高的那个进行匹配。所以当我们输入自然语言文本进行代码搜索时,我们将语言片段转换为共享空间中的向量,然后从代码构建的向量数据库中寻找最相似的进行匹配并返回。

  概述

  整个过程可以分为五个步骤:

  

  预处理

  数据预处理,从数据库中提取代码(函数)、文档字符串和代码路径。通过代码创建词汇表,将代码转化为向量,然后作为编码器的输入。docstring 是代码的注释,词汇表也被转换成向量作为监督训练编码器的标签。保存代码路径以查找源代码的索引,并在匹配成功时将其返回给用户。

  代码编码器

  这里使用了Seq2Seq模型,采用了教师强制的训练策略。什么是老师强迫?RNN 模型通常使用前 T-1 步的输出作为输入来预测下一步 T,但教师强制策略使用前 T-1 步的 Ground Truth 作为当前输入。

  Seq2Seq模型采用Encoder和decoder结构,使用GRU构建。

  

  句子(文本)编码器

  使用 fast.ai 中的 AMD_LSTM 模型,输入文档字符串以训练和预测句子中的下一个单词。训练好的模型被转移到编码的短语或句子中。什么是 AMD_LSTM 模型?AMD_LSTM 是目前最先进的语言模型之一,在字符模型方面也取得了突出的成功。一个简单的描述就是它使用了一些正则化方法、DropConnect 策略和 NT-SGD 优化器来改进传统的 LSTM 网络,使其具有更好的泛化语言能力。

  代码到发送编码器

  在预训练的 Seq2Seq 模型的基础上,以上一步训练的语言模型的代码向量作为输入,输出作为监督,对之前的代码编码器进行微调,将代码向量映射到共享空间。

  模型的优缺点

  这个模型实现了代码语义搜索,取得了不错的效果,但是每一步的过程都尽可能的简化了(作者也在博客中调整了这一点)。

  机型优势

  该模型的优点之一是为codeSearch的任务提供了一个整体框架,即将code和docstring编码到同一个向量空间进行比较,完成搜索。另一个是该模型不仅可以应用于代码语义搜索,还可以自然地扩展到其他搜索或匹配,例如只需要映射到一个向量空间。

  型号缺点

  缺点,首先是非常耗时和计算资源,感觉这个模型还是比较大的。二是有很多的简化和改进,比如不用的代码本身就很有条理,直接把代码当成自然语言处理。

  模型再现结果

  我们复现的是Semantic Code Search项目,主要参考博客How To Create Natural Language Semantic Search For Arbitrary Objects With Deep Learning

  环境配置

  由于项目环境配置过程比较复杂,我们使用了作者推荐的Docker容器:hamelsmu/ml-gpu。我们的机器配置,硬件是12核Intel Core i9 CPU,2个NVIDIA RTX 2080 Ti,系统是Ubuntu 16.04,CUDA版本是10.1,使用Python3.6。

  数据准备

  从BigQuery下载数据,数据格式如下图所示:

  

  使用AST库存,首先将数据解析成(code, docstring)对,结果如下:

  

<p>将上表中pair项中的数据展开为function_name、lineno等,然后对数据进行去重,根据是否有docstring(至少3个字)对数据进行划分,然后对数据进行划分用docstring根据

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线