• 第二次结对编程作业


    baseline 复现

    我们选择的 baseline 是 CodeNet。CodeNet 的模型可以用如下的图描述:

    模型的输入由两个主要的分支组成。一支接受代码信息(方法名、API 序列、tokens 等),另一只则接受文档描述信息。我们的任务是将两种输入转化成为相似的 vector (即图中的 code vector 和 docstring vector)。模型使用了 RNN/MLP 的结构对输入做特征抽取。在网络的最后,CodeNet 将代码匹配视为二分类任务(匹配上与未匹配上),对提取出的 code vector 和 docstring vector 做监督。

    CodeNet 是基于 CodeNN 做改进的。它们最大的不同之处是,CodeNN 使用余弦相似度计算 vector 的 loss,而 CodeNet 则将匹配任务视为二分类问题。CodeNet 这种改进可以提高匹配的准确率,但随之而来的是搜索时计算量的提高。CodeNN 在训练完成后只需对 code 和 docstring 分别做特征提取,即可抛开 model 投入生产环境,预测时用余弦相似度作为标准进行搜索即可。但 CodeNet 在生产环境中还需保留最后的 MLP 层,这里有额外的计算开销。

    复现时遇到的最大问题是 CodeNet 的代码不完整,同时 README 与实际代码有若干不一致的地方。具体而言,CodeNet 的代码库中缺少了 transformer.py 这个文件,我们于是模仿 ·cleaner.py` 的写法将其恢复出来。README 与代码主要是参数的名字有些不一致,这些都不是什么大问题。

    我们复现时使用 py_github 数据集。训练时我们使用 1e-3 作为学习率,并在单卡上训练 200 epochs,花费 6 个小时。我们最终性能如下:

    dataset precision auc acc@top5 acc@top10
    val(pool=200) 0.8926 0.9519 0.5060 0.6942
    val(pool=800) 0.2199 0.3549
    test(pool=200) 0.8918 0.9507 0.5151 0.6959
    test(pool=800) 0.3615 0.2255

    基本达到 README 中提到的性能(甚至超过)。但奇怪的是 test 上的性能居然比 validation set 的性能还要好。此处我们还要细究原因。

    对伙伴的评价

    本次结对编程的伙伴是和纪言同学。结对编程时我们都比较忙,因此没有花太多额外的时间,同时线下交流比较少,我们的工作主要时线上完成的。个人感觉伙伴对ML有许多自己的想法,同时代码能力也很强。

  • 相关阅读:
    在Magento中添加一个自己的支付模块----第一部分
    留言互相关注哟
    【Java】final修饰符的使用
    【java】关于Cannot refer to the non-final local variable list defined in an enclosing scope解决方法
    【Java】遍历List/Set/Map集合的一些常用方法
    Java Socket编程,小案例(有注释)
    xml解析
    阿九说:Dom4j解析XML
    神秘的Java注解
    反射是框架设计的灵魂
  • 原文地址:https://www.cnblogs.com/hsfzxjy/p/11669470.html
Copyright © 2020-2023  润新知