本文主要是介绍【数据应用技巧】NLP领域的预训练之风,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
案例来源:@AI科技评论 @集智翻译组 @人工智能LeadAI
案例地址:https://mp.weixin.qq.com/s/NCLkZqdmqY9lm5BhyEcLXQ;https://www.sohu.com/a/233269391_395209;https://arxiv.org/pdf/1801.06146.pdf;http://wemedia.ifeng.com/64207141/wemedia.shtml;https://baijiahao.baidu.com/s?id=1607601183904724013&wfr=spider&for=pc;http://www.igeek.com.cn/article-1176781-2.html
0. 背景:ImageNet带来了数据预训练的风,通过在ImageNet数据集上训练得到的网络权重,可以迁移学习到较少标注集较高标注成本的领域。这股思想也进入了NLP领域,本文介绍几种预训练方法。
目前NLP领域的预训练方法有:
1)word2vec
2)ULMFit
3)ELMo
4)Open AI Transformer
对标ImageNet,目前NLP领域的主流标注数据集有:
1)斯坦福问答数据集(SQuAD):10万多对问答对
2)斯坦福自然推理语料库(SNLI):57万对英语句子对
3)WMT:4千万对 英语-法语 翻译句子对
4)WikiTest-2:维基百科文本
这些语料库都有一定的缺陷(如人工标注员倾向于通过否定的方式创造新的句子对),不一定同ImageNet一样,可以表征所有自然语言处理的问题空间,削弱了使用这些语料库提取特征的泛化能力
1. word2vec
1)预训练获得词嵌入,然后将词嵌入作为特征输出神经网络的第一层。是一种浅层网络的特征表示方法,类比于cv中对浅层神经元对物体边缘的表示
2. ULMFit(Universal Language Model Fine-tuning)
1)LM pre-training:在大型语料库上训练word的表达
2)LM fine-tuning:在特定语料上训练word在深层网络中的表达
3)Classifier fine-tuning:上层分类器
3. ELMo(Embeddings from Language Models,深层语境化词表征)
1)特点:
a. 输入是字符而不是词,因此可以利用子字词单元来计算有意义的表征,即使对于词典外的词也是如此
b. 词向量不是一成不变的,而是根据上下文不同而变化。如“我买了富士康生产的苹果”与“我吃了一个富士苹果”中“苹果”并不是一个事物
2)方法:首先在大文本语料库上预训练了一个深度双向语言模型(biLM),然后把根据它的内部状态学到的函数作为词向量。语言模型的不同层对单词上的不同类型信息进行编码(例如,词语标注由biLSTM的较低层完成预测,而词义消歧在较高层中更好地编码)。 把所有层连接起来,可以自由组合各种文字表征,以提高下游任务的性能表现
4. Open AI Transformer
1)在大规模数据集上用无监督的方式训练一个transformer模型(参:https://blog.csdn.net/allwefantasy/article/details/50663524)
2)在小规模有监督数据集上进行微调
5. NLP预训练展望:
1)可以用主流语言语料库做预训练,迁移学习到标注资源特别匮乏的小语种
2)文本中的常识性信息,有一些不能从文本上下文中获得,而是要结合外部额外信息,这也是进一步优化预训练能力的点
这篇关于【数据应用技巧】NLP领域的预训练之风的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!