【问题标题】:How to fine tune fine tune GitHub Copilot?如何微调微调 GitHub Copilot?
【发布时间】:2023-01-19 05:45:49
【问题描述】:

我们可以微调语言模型,如BERTGPT-3

我可以微调GitHub Copilot模型吗?

我已经查看了来自https://copilot.github.com/ 的示例,但无法找到详细信息。

如果有人对 Github Copilot 进行了微调,我将不胜感激。

【问题讨论】:

    标签: github deep-learning openai gpt-3 github-copilot


    【解决方案1】:

    OpenAI API 提供“Davinci Codex”机器学习模型和按点击付费订阅,类似于 davinci 模型的非编码版本。

    OpenAI 也应该启用 Davinci Codex 的微调选项。当他们这样做时,您将能够通过 API 调用使用它。

    检查该先决条件后,我认为您可以通过一些代码更改将 OpenAI API 链接到本地​​安装的 Github Copilot,理论上这应该是可能的。

    第一步可能是有一个调用 OpenAI Codex API 的 copilot VSCode 扩展的分支(或者一个在代码中插入文本的完全自定义的扩展)

    然后你会把它指向你的模型的微调版本。要了解微调 OpenAI 模型,您应该查看它们的文档:

    请注意,他们还有一个 openai CLI,可让您执行大部分数据加载和微调任务。

    不幸的是,目前您只能微调 OpenAI 模型的非编码版本,希望他们能尽快提供 Codex。

    【讨论】:

    • @makevoid - 很确定你错了。你不能微调法典。您只能微调 GPT。
    • @Exploring true,你还不能微调davinci codex,只有普通的davinci,希望他们能尽快提供
    • 知道任何暂定时间表吗?谢谢。
    • @Exploring 我不知道 - 顺便说一句,还有 GPT-J-6B(开源,更小的模型),有人成功地对其进行了微调以生成代码,但这是一项更大的任务,不如 Codex/Copilot 好
    • @makevoid Codex 还有另一个开源替代品,称为 CodeGeeX。代码可在github.com/THUDM/CodeGeeX获取,模型权重可以应用和下载。
    【解决方案2】:

    似乎没有面向客户的功能允许您直接微调 Copilot。

    这里有两个说明为什么目前(2022 年第二季度)缺少此功能。

    Copilot feature page 最初包括这个:

    随着时间的推移,GitHub Copilot 将如何变得更好?

    GitHub Copilot 实际上并不测试它建议的代码,因此代码甚至可能无法编译或运行。 GitHub Copilot 只能保存非常有限的上下文,因此即使是超过几百行的单个源文件也会被裁剪,并且只使用紧接其前的上下文。 GitHub Copilot 可能会建议使用旧的或已弃用的库和语言。您可以在任何地方使用该代码,但风险自负。

    正如Tomek Korbak 解释on Twitter

    实际上,Copilot 的补全总是会根据人类的喜好进行优化,而不一定是编译器的喜好。

    这是因为语言模型训练目标(预测文本中的下一个标记)非常擅长捕捉短期依赖性(这解释了生成的 sn-ps 的人类感觉)。

    但它很难捕捉生成序列的长期、全局、语义属性,例如可编译性。并且没有简单的方法将可编译性作为他们训练的信号。

    众所周知,标准方法——使用 RL 微调语言模型并以可编译性作为奖励——会导致灾难性的遗忘:多样性和准确度较低。

    Tomek 引用“Energy-Based Models for Code Generation under Compilability Constraints (pdf)

    我们的解决方案 (KL-DPG) 将生成序列的可编译率从 55% 提高到 70%。
    RL 微调可以做得更好,但代价是灾难性的遗忘。

    总的来说,基于能量的模型 (EBM) 被证明非常擅长表达奇怪的、序列级的约束,而这些约束对于表达为自回归语言模型的规范化先验来说是非常困难的。

    EBM 提供了一种将我们的结构化符号知识注入大型语言模型的方法,而不会分解它们或牺牲它们不可思议的能力。
    可控发电的进一步应用空间巨大。

    所以不是那么容易。

    Tanishq Mathew Abraham在“Coding with GitHub Copilot”中解释

    我想知道 GitHub 团队是否也可以开发一种方法来针对特定用例微调 GitHub Copilot。

    例如,可能有一个特定的 GitHub Copilot 模型用于 fastai、JAX 等。它们将根据这些库的源代码和使用这些库的代码库进行微调。

    但确保该工具不提供过时的建议仍然是一个挑战。
    我认为不可能为没有足够代码库的全新库提供建议来使用它进行训练。

    此外,对于像 fastai 这样有旧 API 和新 API 的情况,在微调模型时,必须过滤掉使用旧 API 的代码库。

    【讨论】:

      【解决方案3】:

      一点都不。客户系统中没有存储 GitHub Pilot 的模型,也没有提供对模型的访问,因为现在他们已经开始对他们的服务收费,因此更明显地表明他们的项目不是也不会是开源的。

      【讨论】:

        猜你喜欢
        • 2022-01-02
        • 2021-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-21
        • 2019-10-03
        • 2020-06-10
        相关资源
        最近更新 更多