是否有任何预训练的词嵌入可用于对源代码进行分类?

问题描述 投票:0回答:1

我正在尝试对从堆栈溢出中获取的源代码片段语料库进行分类。我正在探索各种技术,例如 Tf-Idf、带有 CNN 的 keras 嵌入层、bert 等。 由于源代码分类与普通文本分类问题有很大不同,因此我正在寻找一些最适合当前问题的技术。

到目前为止,我已经应用了 Tf-Idf,并且获得了 75% 左右的不错的准确率。当使用带有 keras 嵌入层的文本 CNN 时,我得到了 60%。接下来我打算实现bert相关的模型。 我也读过实现“code-bert”的论文,但它们仅限于 6-8 种语言。 我的数据集有 20 多种语言。 我想从根本上了解哪些技术最适合源代码。

programming-languages text-classification bert-language-model tf-idf word-embedding
1个回答
4
投票

有一些预先训练的词嵌入可用于对源代码进行分类,但它们可能无法涵盖您感兴趣的所有语言或领域。一些示例是:

  • Code2Vec:这是一种神经网络模型,可以根据抽象语法树学习代码片段的分布式表示。它可以用于代码摘要、代码搜索、代码完成等各种任务。它支持 Java、C# 和 Python。您可以在这里找到论文和代码:Code2Vec:学习代码的分布式表示
  • CodeBERT:这是一个基于 BERT 的模型,在来自各种来源(例如 GitHub、Stack Overflow 等)的大量代码和自然语言对上进行预训练。它可用于自然语言代码搜索、代码文档生成、代码克隆检测等。它支持六种编程语言:Python、Java、Javascript、PHP、Ruby、Go。您可以在此处找到论文和代码:CodeBERT:编程和自然语言的预训练模型
  • GraphCodeBERT:这是 CodeBERT 的扩展,它结合了图神经网络来捕获代码的结构信息。它可用于代码精炼、代码翻译、代码补全等。它支持与 CodeBERT 相同的六种语言。您可以在此处找到论文和代码:GraphCodeBERT:使用数据流和控制流进行预训练代码表示

这些模型基于迁移学习的思想,这意味着您可以使用少量标记数据根据您的特定任务和数据集对它们进行微调。但是,他们可能无法处理您在问题中可能面临的一些挑战,例如:

  • 源代码语言和领域的多样性和复杂性。您提到您的数据集有 20 多种语言,预训练模型可能无法很好地表示这些语言。您可能需要从头开始训练自己的嵌入或使现有嵌入适应您的语言和领域。
  • 源代码片段的质量和一致性。您提到您的数据集取自 Stack Overflow,其中可能包含嘈杂、不完整或不正确的代码片段。您可能需要预处理、过滤或扩充数据以提高其质量和一致性。
  • 结果的评估和解释。您提到您已经应用了 Tf-Idf 和带有 keras 嵌入层的文本 CNN,并且获得了不同的准确度分数。您可能需要考虑其他指标和因素来评估和比较您的模型,例如精度、召回率、F1 分数、混淆矩阵、错误分析等。您可能还需要解释为什么某些模型比其他模型效果更好,以及什么是每个模型的优点和缺点。

因此,哪种技术最适合源代码分类并没有明确的答案,因为这取决于您的数据、任务、目标和偏好。您可能需要尝试不同的模型、嵌入、超参数和评估方法,以找到问题的最佳解决方案。您可能还需要查阅有关源代码分析和自然语言处理的现有文献和研究,以获得更多见解和想法。以下是一些您可能会觉得有用的资源:

© www.soinside.com 2019 - 2024. All rights reserved.