【发布时间】:2026-01-12 21:55:02
【问题描述】:
我是机器学习的新手,但我正在尝试研究是否可以使用机器学习来比较源代码的两个 AST(抽象语法树),以确定它们是否相似。
理想情况下,使用一些数据集进行一些训练并比较任意两个给定的 AST 以找到相似之处。
这里有什么建议吗?
【问题讨论】:
标签: apache-spark machine-learning apache-spark-mllib apache-spark-ml
我是机器学习的新手,但我正在尝试研究是否可以使用机器学习来比较源代码的两个 AST(抽象语法树),以确定它们是否相似。
理想情况下,使用一些数据集进行一些训练并比较任意两个给定的 AST 以找到相似之处。
这里有什么建议吗?
【问题讨论】:
标签: apache-spark machine-learning apache-spark-mllib apache-spark-ml
您似乎期望机器学习算法能够完成发现两个 AST 之间的相对“距离”的繁重工作。 那是独一无二的。相反,您可能会考虑两棵树的整体结构:它们在树的每一级是否具有相似数量的节点。如果他们这样做 - 至少对于大部分树 - 那么您可能希望为两棵树之间的“距离度量”定义两种方法之一:
不同节点值的数量
节点值的相对差异 - 可能是传统的 Levenshtein 距离 .. 但更可能是通过比较了解特定语言的语义来了解它们的相似程度。例如。能够理解两个结构代表相同的语句,但可能具有不重要的空格或其他格式差异。或者可能是不同的变量名但语义相同。
另一个额外的检查可能是定义有多少子树是相同的。然后为发散的子树定义一个空间度量,仅能找到该子树的结构相似性/差异
总结是:“对于整个问题没有开箱即用的方法 - 但您可以针对特定的本地化案例利用现有的想法/算法”。
【讨论】: