刚刚智源研究院发布了清源 CPM-中文GPT3-我魔改出了一个TF版本

2020 年 11 月 21 日 AINLP

如果你是一个程序员/技术人员,只想最快跑起来代码,请点击文末阅读原文直接打开REPO:

https://github.com/qhduan/CPM-LM-TF2

下面文章主要分为3个部分,(1)CPM/GPT3介绍;(2)结果例子举例;(3)一些技术向闲聊。

请酌情跳过部分自己没兴趣的章节。

CPM和GPT3的介绍

什么是CPM?

CPM是Chinese Pre-trained Model的简写,清源 CPM 计划将依托智源研究院新建的人工智能算力平台,建立以中文为核心的超大规模预训练模型,进行基于超大规模预训练语言模型的少次学习能力以及多任务迁移能力研究,探索更具通用能力的语言深度理解技术。

项目官网为 https://cpm.baai.ac.cn/ 感谢智源研究院的相关工作和开源贡献。

什么是GPT3?

GPT3是OpenAI设计的一个语言模型(Language Model,LM)的第三个版本。

语言模型可以认为是人类对于语言中词汇概率相关关系的一种研究结果,GPT这类语言模型最简单的理解可以认为是,给出半句话,预测下一个词的概率。

比如说半句话是:“今天的天空好”,后面可能跟着的词可能是“蓝”,句子是“今天的天气好蓝”

也可能是“晴朗”,句子是“今天的天气好晴朗”

但是我们知道这个词不太可能是“火箭”,因为句子“今天的天气好火箭”实在不太像话。

所以基于前面半句话,显然后面是“蓝”和“晴朗”的概率,比“火箭”要高得多。

GPT3能干嘛?

最直接的应用,显然是通过预测下一个词的概率,实现基于语言模型的文字生成,从而不断的生成,组成一个文章。

但是GPT3不局限于此,因为语言的概率本质上也是一种推理。

例如前半句话是有一定的逻辑的,例如“一个老师在讲台上说,1+1=2,1+2=3,1+3=4,1+4=”,如果是人继续写下去,或者说继续“生成”下去这句话,那显然下一个词是“5”的概率最大。

其实也同样可以这样,也就是说我们同样喂给GPT3这句话,我们希望它生成的下一个词是“5”的概率最大,理论上来说它能做到的话,就能实现这样的推理。

是的,十以内加减法也是一种推理。

也就是说,假设我们能构造出一些足够信息量的问题,我们就可以让这样的语言模型帮我们回答问题。

当然现在这些模型的效果还不够,它可能会让你觉得AI依然很傻。

但是我们还是应该抱有对于未来的期待,下面我们看一下一些例子。

CPM-LM的结果例子

下面图片中,sample(tokenizer, gpt, 'xxxxxxxxxx', 3, 10),这里的'xxxxxxxxx'可以认为是我们构造的“半句话”,每个例子会生成3个结果。

这3个结果没有先后顺序,也就是并不是第一个结果最好。

我们可以做一种概率统计,例如生成300个,而不是3个结果,最后选这300结果中,出现次数最多的那个词或句子作为答案,这样可能更准确一点的接近实际答案。

一些额外的技术闲聊

模型的转换参考

模型的具体转换代码在load_pytorch.ipynb文件中,希望有类似torch to tensorflow的同学可以参考

原模型的一些细节

模型的训练基础是英伟达的github.com/NVIDIA/Megat,这大概算是一个英伟达魔改的PyTorch上的高级API,论文在arxiv.org/pdf/1909.0805。

这个应该主要是为了能把一个很大的模型在很多张显卡上更好的并行训练而设计的,原模型分了两个文件,也提到了需要两张显卡,应该是在每张显卡上分别载入这两个文件。

这两个文件中大概各有一半的模型参数,有些层,例如全连接层(Dense)的参数会平均到两个模型中。

比如一个256到256的Dense层,按道理来说有一个256x256的kernel和一个256的bias,平分之后会在每个文件分别有一个128x256的kernel和一个128的bias。

因为有些层无法平分,例如LayerNormalization层,所以是在两个文件中有重复的。

fp32和fp16

fp16在笔者的CPU上几乎和龟速一样(Macbook Pro 2020),比fp32的慢了好多倍。

猜测这应该是由于现代cpu上实际上不具备物理的fp16运算器导致的,也就是每次进行fp16的前后其实是把fp16转换为了32再运行的,所以非常浪费CPU。

fp16的模型相比fp32的其实是有一些区别的,主要是原来的attention mask的问题,因为1e10这个数字在fp32上是合法的,但是在fp16上是inf,所以笔者把这部分mask的1e10的超参改为了1e4,才跑起来fp16的模型。

TensorFlow版本和原版本的区别

道理来讲应该没有什么太大区别,而且也载入了原来的参数,不过毕竟还是有GPU -> CPU,PyTorch -> TensorFlow这样的转换,所以可能和原模型结果有一定出入,不过笔者估计这个出入不会很大,顶多1%左右。


由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:

(1)点击页面最上方"AINLP",进入公众号主页。

(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。

感谢支持,比心

欢迎加入预训练模型交流群
进群请添加AINLP小助手微信 AINLPer(id: ainlper),备注预训练模型

推荐阅读

这个NLP工具,玩得根本停不下来

征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)

完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)

从数据到模型,你可能需要1篇详实的pytorch踩坑指南

如何让Bert在finetune小数据集时更“稳”一点

模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法

文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化

Node2Vec 论文+代码笔记

模型压缩实践收尾篇——模型蒸馏以及其他一些技巧实践小结

中文命名实体识别工具(NER)哪家强?

学自然语言处理,其实更应该学好英语

斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。


阅读至此了,分享、点赞、在看三选一吧🙏

登录查看更多
4

相关内容

港中文《深度学习导论》2021课程,李鴻升老师讲授
专知会员服务
52+阅读 · 2021年1月21日
专知会员服务
36+阅读 · 2020年11月29日
清华大学《人工智能》书籍教学课件开放下载
专知会员服务
140+阅读 · 2020年7月27日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
226+阅读 · 2020年3月22日
【电子书】Flutter实战305页PDF免费下载
专知会员服务
23+阅读 · 2019年11月7日
实测超轻量中文OCR开源项目,总模型仅17M
机器之心
3+阅读 · 2020年3月7日
下载 | 最全中文文本分类模型库,上手即用
机器学习算法与Python学习
30+阅读 · 2019年10月17日
【Github】GPT2-Chinese:中文的GPT2训练代码
AINLP
52+阅读 · 2019年8月23日
资源 | 《Scikit-Learn与TensorFlow》中文精要
AI研习社
25+阅读 · 2018年9月21日
Arxiv
6+阅读 · 2020年9月29日
Arxiv
7+阅读 · 2020年3月1日
Arxiv
11+阅读 · 2019年6月19日
How to Fine-Tune BERT for Text Classification?
Arxiv
13+阅读 · 2019年5月14日
Residual Policy Learning
Arxiv
4+阅读 · 2018年12月15日
Arxiv
5+阅读 · 2018年5月16日
Arxiv
5+阅读 · 2018年4月17日
VIP会员
相关VIP内容
港中文《深度学习导论》2021课程,李鴻升老师讲授
专知会员服务
52+阅读 · 2021年1月21日
专知会员服务
36+阅读 · 2020年11月29日
清华大学《人工智能》书籍教学课件开放下载
专知会员服务
140+阅读 · 2020年7月27日
【干货书】流畅Python,766页pdf,中英文版
专知会员服务
226+阅读 · 2020年3月22日
【电子书】Flutter实战305页PDF免费下载
专知会员服务
23+阅读 · 2019年11月7日
Top
微信扫码咨询专知VIP会员