Using Machine Learning Methods to Establish Program Authorship 阅读笔记

机器学习方法 建立 程序作者

详细讨论了各种机器学习特征分配方法:词法度量,位置/样式度量,控制和信息结构样式度量,抽象语法树的使用,n-gram分析,项目架构研究和编程范例的使用。

 

Computational stylometry issues, a possibility of using programming paradigms as an additional factor of style identification are considered.

 

特征: characteristics (explanatory variables, attributes) of the source code

源代码的特征(解释变量,属性)

 

1.词汇指标。 通过突出显示与词法特征相关的指标进行源代码分析:语言的关键字,函数,宏,注释,预处理程序指令等。这些结构的出现频率,它们的平均值和总长度,唯一元素的数量等等都可以被视为指标。 除了实体的一般选择之外,还可以使用它们的特征,例如它们的类型。 因此,文本被转换为一系列原始对象 - 词汇标记。 基于这些对象,我们可以构建一个模型,该模型可以考虑遇到的tokens的频率,它们的上下文,相关性等。

2.布局指标和样式指标。 分析了句法结构的总体布局和特征,以及诸如空格和制表符等语言元素的使用,变量的命名方式等。例如,它可以是长度和数字的分布,以及它们的标准偏差,字符串,字符,数字文字,标准化为字符串和文件的特征; 与前导空格数量,空格/制表符,下划线,分号,逗号等的使用相关的度量。

3.控件和信息结构的样式 - 使用各种算法及其实现,控制结构,数据结构。 例如,组织循环方法,使用类/函数,分支,使用等效工具进行算法实现。 这尤其会影响具有大量语法的语言。基本概念的使用差异 - 记录(数据结构:对每个元素具有索引访问权限的数据元素的引用组),词汇闭合闭包,独立性(顺序/并行)和命名状态也是程序员的独特特征。

4.为了分析结构,经常使用抽象语法树,它是解析树和实际数据结构之间程序的中间表示,这使得更容易区分控制结构的位置,循环,嵌套级别等特征。 各种类型的运算符和操作数,分支,函数参数的数量等。

5.原始文本或字节码的N-gram分析。 在该方法中,分析n个连续元素以及这些序列的出现频率。 通常,为每个作者分配一定数量的最常遇到的n-gram,并且当分析程序时,评估候选者和程序的最常遇到的n-gram集的重叠大小。 也可以使用每个n-gram的上下文分析。 

6.项目体系结构是将系统分解为其实现模块和它们之间的依赖关系。 从修订历史中获得的指标,由于其中项目的各个部分的书写风格混合,将是非常有效和有用的。 在论文[17]和[18]中,表明变更度量的数量(the number of change metrics )对文件很重要,其中联合变更在一个和几个架构模块中进行。 文件和实现组件(函数,类等)中字符串数量的度量标准成为最重要的因素之一。

7.函数式编程、程序编程、面向对象编程、指令式编程

编程范例,您可以在其中观察程序员如何使用某些概念 - 给定层次结构中的基本元素。每个概念都实现了某种语言功能,一组概念定义了一个共同的范例。例如,离散同步编程最适用于反应性问题,即由对外部事件序列的反应组成的问题。正确理解概念有助于改进编程风格,即使在不直接支持它们的语言中也是如此,就像C语言中的面向对象编程可以使用正确的程序员态度一样。程序状态非常重要 - 它们可以是命名和未命名,确定性和非确定性,以及顺序或并行。最不具有表现力的组合是函数式编程monad,最具表现力的是面向对象的编程,支持消息交换和共享资源。许多语言支持两种甚至三种范式。第一种范式是针对通常面向语言的问题而选择的。选择第二范式来支持抽象和模块化,并在编写大型程序时使用。可以有三种互补的范例,例如,在SQL中:对数据库进行逻辑查询的关系编程机制和用于并行数据库更新的事务接口+支持OOP的主机语言。程序员使用这些范例的概念多少肯定会决定他的风格。例如,与SQL相关的是,在其他编程语言中有代码插入的方言,有多种基于不同方面的工具,允许使用语言本身的方法和扩展来编写代码。

 

很多指标

香农信息熵(衡量指标和作者归属的不确定性)

low entropy indicates that there are very few cases of using this metric and it is quite unique for developers.

计算个体一致性 - 即,代码如何随机地确定特定开发人员的程序的度量,然后是所有开发人员程序的人口一致性。 之后,我们将单个熵与第一组的比率最小化,因为低熵表明使用该度量的情况非常少,并且对于开发人员来说这是非常独特的。 因此,存在选择的度量及其顶部(基于熵的图形最小的一定数量的度量)被用作进一步学习的特征。

 

方法:support vectors ([11]), the Bayesian classifier ([19]), neural networks ([20]), and variouscombinations are common.

 

Using Machine Learning Methods to Establish Program Authorship 阅读笔记_第1张图片

 

 

 

你可能感兴趣的:(文献阅读)