19年,百度提出了知识增强的语义表示模型ERNIE(Enhanced Representation from knowledge Integration), 并发布了基于百度自己开发的深度学习框架PaddlePaddle的开源代码和模型,在语言推断、语义相似度、命名实体识别、情感分析、问答匹配等自然语言处理(NLP)各类中文任务上模型效果全面超越Google开发的BERT。ERNIE: https://github.com/PaddlePaddle/ERNIE
ERNIE 模型通过建模海量数据中的实体概念等先验语义知识,学习真实世界的语义关系。具体来说,ERNIE 模型通过对词、实体等语义单元的掩码,使得模型学习完整概念的语义表示。相较于 BERT 学习原始语言信号,ERNIE 直接对先验语义知识单元进行建模,增强了模型语义表示能力。
ERNIE 模型本身保持基于字特征输入建模,使得模型在应用时不需要依赖其他信息,具备更强的通用性和可扩展性。相对词特征输入模型,字特征可建模字的组合语义,例如建模红色,绿色,蓝色等表示颜色的词语时,通过相同字的语义组合学到词之间的语义关系。
此外,ERNIE 的训练语料引入了多源数据知识。除了百科类文章建模,还对新闻资讯类、论坛对话类数据进行学习,这里重点介绍下论坛对话建模。对于对话数据的学习是语义表示的重要途径,往往相同回复对应的 Query 语义相似。基于该假设,ERINE 采用 DLM(Dialogue Language Model)建模 Query-Response 对话结构,将对话 Pair 对作为输入,引入 Dialogue Embedding 标识对话的角色,利用 Dialogue Response Loss 学习对话的隐式关系,通过该方法建模进一步提升模型语义表示能力。
目前来看,随着语义表示(language representation)技术的发展,使得 “预训练-微调” 作为解决NLP任务的一种新的范式开始出现。一个通用的表示能力强的模型被选择为语义表示模型,在预训练阶段,用大量的语料和特定的任务训练该模型,使其编码海量的语义知识;在微调阶段,该模型会被加上不同的简单输出层用以解决下游的 NLP 任务。
完成预训练后,如何用 ERNIE 来解决具体的 NLP 问题呢?下面以单句分类任务(如情感分析)为例,介绍下游 NLP 任务的解决过程:
- 基于tokenization.py脚本中的Tokenizer对输入的句子进行token化,即按字粒度对句子进行切分;
- 分类标志符号[CLS]与token化后的句子拼接在一起作为ERNIE模型的输入,经过 ERNIE 前向计算后得到每个token对应的embedding向量表示;
- 在单句分类任务中,[CLS]位置对应的嵌入式向量会用来作为分类特征。只需将[CLS]对应的embedding抽取出来,再经过一个全连接层得到分类的 logits 值,最后经过softmax归一化后与训练数据中的label一起计算交叉熵,就得到了优化的损失函数;
- 经过几轮的fine-tuning,就可以训练出解决具体任务的ERNIE模型。
参考资料
1、https://blog.csdn.net/weixin_41046245/article/details/100060225
2、https://github.com/PaddlePaddle/ERNIE/
3、https://aistudio.baidu.com/aistudio/projectdetail/221999
4、https://aistudio.baidu.com/aistudio/projectdetail/613616
5、https://zhuanlan.zhihu.com/p/54527459
6、https://github.com/paddlepaddle/paddlehub/wiki
7、https://aistudio.baidu.com/aistudio/projectdetail/147006
8、https://aistudio.baidu.com/aistudio/projectdetail/546835