Created
Jul 21, 2023 07:22 AM
Tags

前言:

目前的语言模型中,国外比较出名的一个是不开源的chatgpt,一个是由meta开发并开源的LLama。国内最近比较火的开源模型分别是清华的ChatGLM和复旦的MOSS。

各语言模型的对比与个人方案的选择:

就我了解的一些语言模型针对个人的应用主要是利用开源模型来搭建一些个人知识库什么的,由于我自己用notion做好了我自己的知识库所以这种方案对我来说没啥太多用处。就我而言GPT4几乎可以满足我的所有日常需求,所以我对其他的功能性方案兴趣并不大。我个人想要做的是通过对已有的语言模型进行微调,从而训练出一个像贾维斯那样的人工智能助手,或者训练出一个和我语气性格相近的ai聊天机器人。
tips:什么是微调,训练集
数据集这个概念应该好理解,就是用来微调ai的数据集合
前面提到的ChatGPT、LLama,ChatGLM等这些都是通过大型数据集上预训练的模型,微调是指将这些预训练模型作为基础,再通过一些较小的训练集进行训练。
对于目前这两个需求,其实都要考虑两个同样的问题:
  1. 微调所需的数据集从何而来?
  1. 这么多AI大模型用哪个训练更好?
关于第一个问题,根据两个需求分别进行分析:
第二个问题,用哪个模型进行训练:
这里毋庸置疑的是用gpt肯定是最好的,但是就现在这个时间点选择训练openai的模型并不算很合适,因为,openai宣布在2023 年 7 月 6 日弃用 ada、babbage、curie 和 davinci 模型。这些模型(包括微调版本)将于 2024 年 1 月 4 日关闭。而常用的模型GPT-4 和 GPT-3.5 Turbo 的微调还在来的路上,官方只说在将在今年晚些时候退出,也没有个具体时间,如果现在微调上面提到的四个模型玩不了多久就没了。还有训练模型是需要花费token的,具体收费标准如下,所以现在训练openai 的模型着实不划算。
notion image
由于现在并不是太适合训练openai提供的模型,于是我不得不着眼现在的这些开源模型,我自己最后选择的是使用LLama模型进行部署训练,当然我也尝试了一下尝试了一下openai提供的微调接口。
为什么没有选择ChatGLM或者MOSS呢,原因是我在网上看了一些分析与实测,感觉LLama在代码生成以及逻辑推理一块的表现是几个开源模型中相对稳定的,不过它的训练数据是以英文为主,并不包含中文,一开始其实考虑使用chatglm不过,后面看到一个项目
Chinese-LLaMA-Alpaca
ymcuiUpdated Oct 30, 2023
,它在预训练模型LLama的基础上进行了二次训练,加入了中文词表,于是我果断转用了Chinese-LLaMA-Alpaca。文章最后会提供程序员树先生关于MOSS和ChatGLM的部署以及微调方案,这里主要介绍Chinese-LLaMA-Alpaca,和open ai的微调。

openai相关模型微调方案:

训练模型首先需要准备你的数据集,而且openai的模型对数据集的格式还有要求,具体为:
数据必须是JSONL文档,其中每一行都是与训练示例相对应的提示-完成对。
我们提供的数据集都需要转换成这种格式进行训练
openai提供了一个工具可以用来检测数据集的格式是否过关。
关于微调的一些要求:
  • 在提示符末尾使用分隔符,例如\n\n###\n\n。当我们最终向模型发出请求时,请记住还要附加此分隔符。
  • 选择映射到单个标记max_tokens=1的类。在推理时请指定,因为我们只需要第一个标记进行分类。
  • 确保提示 + 完成不超过 2048 个标记,包括分隔符。
  • 目标是每次微调的数据至少有约 100 个示例。
  • logprobs=5要获取类对数概率,您可以在使用模型时指定(针对 5 个类)
  • 确保用于微调的数据集在结构和任务类型上与模型将用于的数据集非常相似