首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有任何预先训练过的字嵌入可以用来分类源代码?

是否有任何预先训练过的字嵌入可以用来分类源代码?
EN

Stack Overflow用户
提问于 2022-11-09 06:33:27
回答 1查看 34关注 0票数 0

我试图对从堆栈溢出中获取的源代码片段进行分类。我正在探索各种技术,如Tf-以色列国防军,角嵌入层与CNN,bert等。因为源代码分类与正常的文本分类问题有很大的不同,所以我正在寻找一些应该最适合当前问题的技术。

到目前为止,我已经申请了Tf-以色列国防军,而且我获得了大约75%的精确性。当使用文字CNN与角化嵌入层,我得到60%。我计划下一步实现与伯特相关的模型。我也读过实现‘代码-bert’的论文,但它们仅限于6-8种语言。我的数据集有超过20种语言。我想了解在底层哪种技术对源代码最有效。

EN

回答 1

Stack Overflow用户

发布于 2022-11-09 06:40:32

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

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

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

  • 源代码语言和领域的多样性和复杂性。您提到过,您的数据集有超过20种语言,这些语言可能不能很好地由预先培训的模型表示。您可能需要从零开始训练您自己的嵌入,或者使现有的嵌入适应您的语言和域。
  • 源代码片段的质量和一致性。您提到您的数据集来自堆栈溢出,该溢出可能包含噪声、不完整或不正确的代码段。您可能需要对数据进行预处理、筛选或增强,以提高其质量和一致性。
  • 对结果的评价和解释。您提到您已经应用Tf-以色列国防军和文字CNN的角嵌入层,你得到了不同的准确性分数。您可能需要考虑其他的度量和因素来评估和比较您的模型,例如精确性、回忆性、F1分数、混淆矩阵、错误分析等。您可能还需要解释为什么某些模型比其他模型工作得更好,以及每个模型的优缺点是什么。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74370759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档