今天发现有一个朋友的github更新了一个新的项目,于是我点进去扫了两眼。首先必然还是把两个预训练语言模型的压缩包下载下来。跟随者这个项目的步伐我发现了一个超级厉害的项目。
thu-coai/CDial-GPTgithub.com在项目介绍中描述到。本项目提供了一个大规模中文对话数据集,并提供了在此数据集上的中文对话预训练模型(中文GPT模型)。
大概就是用了很多的开源的对话语聊训练了一个中文版本的GPT闲聊对话模型。
我应该吧GPT简单的介绍一下。
GPT(Generative Pre-Training),是OpenAI在2018年提出的模型,利用Transformer模型来解决各种自然语言问题,例如分类、推理、问答、相似度等应用的模型。GPT采用了Pre-training + Fine-tuning的训练模式,使得大量无标记的数据得以利用,大大提高了这些问题的效果。
GPT就是利用Transformer进行自然语言各种任务的尝试之一,主要有以下三个要点
- Pre-Training的方式
- 单向Transformer模型
- Fine-Tuning与不同输入数据结构的变化
如果已经理解了Transformer的原理,那么只需要再搞懂上面的三个内容就能够对GPT有更深的认识。
作者:Ph0en1x
链接:https://zhuanlan.zhihu.com/p/69290203
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
嗯这个解释还是比较言简意亥的。
so 我们开始玩一玩。怎么去在这个代码的基础之上继续进行预训练。很不幸我没看到版本的要求。就是所应用的深度学习计算框架的版本在readme中并没有体现。按照代码的指示首先常规操作
pip install -r requirements.txt
安装过程中看到了thu-coai/CDial-GPT的版本是pytorch 1.4.0版本的。这里面还是建议在安装之前就进行pytorch的安装。
karll:Centos 7 conda安装特定CUDA版本的Pytorch 1.4.0 和 Apexzhuanlan.zhihu.com可以参考这个教程进行 pytorch的 1.4.0版本的安装。
我们来看看官方给出的数据集是什么格式的
首先需要把数据集给解压然后放在一个目录之下嗯 按照下面这个写法来看更清晰一些 开源的代码是可以单机多显卡跑任务的。
python train.py --pretrained --model_checkpoint 模型目录/ --data_path 数据集目录/STC.json # 使用单个GPU进行训练
启动的时候数据集预处理的时间还是挺长的 ,然后就变成了这个样子了。pytorch并不是很熟悉。今天阿里源应该是出现了一些问题,转到清华源会好很多。
然后我就想造一个 自己的数据集。于是我找了一些对话的数据。两万条非重复数据 五千条 验证 五千条测试 一万五千条 训练。在cpu上面进行训练。因为机器坏掉了,所以只能在cpu上面凑活跑一下。
一个 epoch上面大概 六个小时
另外一点就是根据readme中的描述 base的数据质量回比large版本的数据质量更高一些
https://miao-picture.oss-cn-shanghai.aliyuncs.com/GPT_LCCC-base-tf.zipmiao-picture.oss-cn-shanghai.aliyuncs.com贡献一下自己的OSS支持大家快速进行预训练模型的下载。
看到了评论区的提问,之前bert也很大,但是现在很多公司的bert已经是炉火纯青了。所以开源才是深度学习前进的最大动力呀。本地采用的是单卡2080ti进行的模型训练。现在 30系列的显卡出来了。看参数,20系列真的是整体去世了。
对于这个模型我认为是一个辅助发现问答对的好模型,还没有经历过预测的测试。在这个参数之下,响应速度应该会受到一定的影响。模型内部的数据流程也是下一阶段主要探索的点。新开源工作就像新大陆一样。总会有着惊喜,相信美好的事情即将发生。
(一下信息来自实习生 杨红文编辑)
GPT 调研报告
对于 https://github.com/thu-coai/CDial-GPT 数据结构及模型有以下调研:
提出了一个清洁中文会话数据集 LCCC(其中包含基本版本(680 万对话)和
大型版本(1200 万对话))的模型。该数据集的质量是通过严格的数据清理管道
来确保的,该管道基于一组规则和在手动注释的 110K 对话对上训练的分类器而
构建。 并用对话生成预训练模型(GPT),分别在基于 LCCC-base 和 LCCC-large
上进行了训练。
清理后的数据集和预训练模型将有助于短文本对话建模的研究。
一、 数据集
1 数据获取
数据集主要是基于公共资源进行抓取的,其来源包含电影脚本、社交媒体
(twitter、reddit、weibo 以及技术论坛等)。这些从公共资源抓取的数据集通常是
大规模的,因为公共资源的语料库很丰富。
但也包含很多噪音,需要仔细清洁。
首先从微博抓取了 79M 条对话。 通过严格的清理过程,构建了清理后的微
博数据集(LCCC-base)。 然后,将 79M 条会话与几个公共中文会话数据集混
合,并通过更宽松的清洁条件获得更大的中文会话数据集(LCCC-large)。 清洗
过程包括基于规则的过滤和基于分类的过滤。
LCCC-base: 两阶段数据收集方案用于构建我们的原始对话。 在第一阶段,收集
了一组种子用户。 即手动选择了一批遵循专业大众传媒致力于发布新闻的微博
帐号。 然后,我们将在这些新闻下发表评论的用户视为“高质量”用户(因为机
器人帐户通常不会过多关注这些日常新闻。)在第二阶段,我们收集了这些种子
用户的对话。 这些用户的微博帖子与以下注释(以树结构组织)一起收集。 请
注意,从根到叶的任何路径都可以视为对话会话。 我们使用“深度优先搜索”流
程重建了这些会话,并构建了 7,900 万个原始会话。 然后,使用情节方法清洁数
据构建了一个清洁的微博数据集。
LCCC-large: 从多个开源存储库中收集了语料库,包括中国 Chatterbot 语料库,
PTT 闲话语料库,字幕语料库和小黄集语料库。这些数据集与 Qingyun 语料库和
Tieba 语料库一起被清理并处理为单个回合对话数据.此外,还收集了多回合对话
数据,包括豆瓣对话语料库,电子商业对话语料库和中文聊天语料库。然后,我
们将这些数据集与 7900 万对话进行了混合。 使用相同的清洗过程,但通过放宽
下面描述的分类器的阈值,我们获得了较大版本的数据集(LCCC-barge)。
2 清洁过程
基于规则的噪声过滤是通过规则过滤出多种类型的噪声,包括:(1)在对话
框中删除平台标签;(2)从文字中删除网址字符串;(3)将会话数超过 30 的会话
拆分为多个会话数少于 30 的会话;(4)在一个句子中仅保留重复超过 6 次的短
语或单词的副本; (5)如果回答太长或太短,则删除对话; (6)如果将响应
标识为广告,则删除对话; (7)如果响应中 90%的三元组是高频三元组,则删
除对话; (8)如果响应具有某些特定形式的通用响应,则删除对话; (9)删
除回复与帖子相同的对话。
其次,还构建了包含以下噪声的黑名单:(1)脏话,敏感词和方言; (2)
特殊主题词,如左氧氟沙星; (3)名称,称谓和未知缩写; (4)特殊符号和
表情符号; (5)平台标志,例如与广告,图片和视频相关的单词。 如果对话
中包含出现在黑名单中的单词,则该对话将被删除。
基于分类器的过滤是就语义和语法而言,许多类型的噪声,以及某些与上下文相关的对话,很难用规则过滤。因此,我们建立了两个 BERT 分类器,以进行
更精细的过滤。我们用不同的置信度分数评估了准确性,召回率和 F 分数,以选
择最佳置信度阈值。第一个 BERT 分类器接受了手动标记的 100,000 个对话的培
训。如果对话具有上述噪声或以下噪声,则标记为嘈杂:(1)响应不流畅或句子
中存在严重错别字;(2)响应信息不完整;
(3)对话的主题是时间敏感的,(4)
帖子中未提及的节日,地点,性别和时间出现在回复中(5)帖子和回复无关。
表 1 中显示了某些情况(底部)。测试集的分类精度达到 73.76%。在社交媒体中,
许多对话不可避免地依赖于文本之外的外部上下文[27,33],从而使其难以理解[9]。
为了减轻这个问题,第二个 BERT 分类器在包含 10,000 个语音的手动标记数据
集上进行了训练。测试集的分类精度达到 77.60%。
二、模型
GPT 模型主要是使用 transformer 的 decoder 结构,并对 transformer decoder
结构进行改进,原本的 decoder 包含两个 multi-head attention 结构,GPT 只保留
了 mask multi-hesd attention 结构.GPT 使用句子序列预测下一个单词,因此采用
采用 multi-head attention 对下文进行遮挡,防止信息泄露。GPT 在训练时时利用
上文预测下一个单词,Bert 时根据上下文预测单词,因此在很多 NLU 任务上,
GPT 的效果较 BERT 要差。但 GPT 更适合用于文本生成的任务,因为文本生成
通常时基于当前已有的信息,生成下一个单词。
(来自实习生 杨红文编辑)