Skip to content

Latest commit

 

History

History
55 lines (36 loc) · 4.7 KB

Questions.md

File metadata and controls

55 lines (36 loc) · 4.7 KB

Questions

冯昊 2016013255

A Survey of Machine Learning for Big Code and Naturalness

  1. 在文中提到了,现在github等开源代码以及其debug过程、代码审查的过程给我们提供了丰富的素材,但是文中并没有详细描述开源库中代码审查及修改的过程的用处。那么,这些对代码进行修改的过程可以用来进行代码错误检测、给用户提出修改建议吗?

Code2Vec

  1. 在Path-Context的定义过程中,对于x=7和x=6这样的两个不同的语句,他们的Path-Context区别仅仅在于$x_t$的值(这里的7和6),但是这个区别大部分情况下其实并不重要,如果不采用数据的值,而是使用数据类型会不会好一些?
  • 但是也存在着某些常量存在特殊含义的问题,比如许多情况下返回值为0表示正确,为1表示错误,不知道能否采取一些办法区分这种情况 与 常量仅仅是一个普通的用户自定义参数的情况?
  1. 训练使用的tag是使用函数名,数据清洗是否会处理掉那些没有意义的函数名?
  • 比如对于函数名test,可能有很多种测试都可以叫做test,但是可能这些test做的事情完全不同;
  • 或者有可能存在不同的人写的同名函数也有可能有不同的功能

Maybe Deep Neural Networks are the Best Choice for Modeling Source Code

  1. 对于token的预测过程中,给出的预测的token是否会将一些用户自定义程度高的token(如一些变量名)忽略掉?
  • 比如一些习惯性的写法通常会用某些变量名,但是用户可能换用其他变量名,但此时可能仍然会提示别人常用的变量名?这样可能会导致不适合于用户个人
  1. 在token的预测时,是否只限制于函数和类名范围内?否则,是否可能会对一些常量进行预测(比如一些常用的字符串或者数字)?这样可能意义不大(因为一些常量并不是整个使用过程必须用到的,而是用户自己定义的)?

How To Create Natural Language Semantic Search For Arbitrary Objects With Deep Learning

  1. 余弦距离不应该是越大越好吗?为什么排序的过程中是余弦距离越小的排在前面?

    • 在自己训练的过程中(和他文章中提供的图片),查询结果里面的排序方式是余弦距离小的排在前面,如下图:

      image-20190706093019654

Deep API

  1. 这里面的API序列是基于语法解析树得到的,用到的Java中有严格的类型可以很容易判断出来每个变量是什么类型,如果在JS或者Python中,可能变量的类型不能容易得到(特别是函数参数的类型),这样怎么能知道这个变量对应的类型和他调用的函数对应的类?
    • 虽然有Python3新版本的类型签名,但是有类型签名的毕竟是少数
    • JS的闭包机制可能会导致变量的查找存在一定难度
  2. 注释中可能会有多种国家语言,是否进行了数据清洗筛选去除了其他的语言(或者把他们翻译成了英语)?(论文中没有提到)
  3. 不同API使用频率不同(比如假设文件读写的使用少于直接输出到stdout)可能导致这个被算法认为是这几个API的重要程度不同?
    • 但是实际上感觉输出到文件和输出到标准输出流的重要程度应该是一样的,只是统计上数量有所差异

Deep Code Search

  1. 如何区分同一个类的不同版本?
    • 在Java里面可能API更新不是很多(此处不是很确定,用Java用的不太多不是很了解),Python和npm中不同的库的不同版本的API可能有很大的区别,甚至于参数啥的都有所改变,动不动就deprecate一些方法,可能搜索出来的结果并不适用,对于这个问题处理可能比较麻烦
    • 虽然有package.json或者requirement.txt可以提供信息,但是某些兼容性的版本不会在里面体现,限制某个版本区间也可能会导致训练数据不够?
  2. token会不会有重名的问题?
    • 在不同的代码里面,同一个token可能表达不同含义,这个是怎么解决的?
    • 有一些没有特殊意义的token(比如随手写的a、b这些名字)

Aroma

  1. 通读后感觉这个方法并没有考虑语义因素,在不同函数的使用频次相差很大的情况下,如果想要写一个不常见的功能,会被程序误认为是错误情况而强行建议改成别的更为常见的功能吗?

When Deep Learning Met Code Search

  1. 对于不同领域的代码写作(比如同为JAVA开发,可能不同领域使用的是不同架构如数据库领域和后台服务领域),不同的方法会不会有非常显著的准确度区别?