⼤规模⽆监督预训练语⾔模型与应⽤(上)
作者:互联网
本系列是七月算法nlp就业班学习笔记。
文章目录
1 单词作为语言模型的基本单位的缺点
单词量有限,遇到没有见过的单词只能以UNK表示。
模型参数量太大。
对于很多语⾔,例如英语来说,很多时候单词是由⼏个subword拼接⽽成的。
可能的解决方案:subword ; wordpiece
2 character level modeling
Ling et. al, Finding Function in Form: Compositional Character Models for Open Vocabulary Word Representation
⽤BiLSTM把单词中的每个字⺟encode到⼀起。
Yoon Kim et. al, Character-Aware Neural Language Models
使用CNN,将一个单词经过模型变成一堆的character。
使⽤subword作为模型的基本单元。subword是将一个单词分成几个子单词
Compositional Morphology for Word Representations and Language Modelling
imperfection = im + perfect + ion
perfectly = perfect + ly
Byte Pair Encoding
Neural Machine Translation of Rare Words with Subword Units
参考博客:url
1 有一张字母表。所有键盘能打印出来的,都算字母。
2 在训练数据集中,找出每一个单词。
例如:我们原始词表如下:
{'l o w e r ': 2, 'n e w e s t ': 6, 'w i d e s t ': 3, 'l o w ': 5}
每个字母中间加上空格。
3 将一个单词中经常出现在一起的字符,统计出来。key是单词拆分层字母,value是出现次数。
第一步发现 s和t同时出现次数最高,所以单词表中w i d e s t 变成了 w i d e st。(st挨在一起)
接着又发现e st 出现次数最高…
这样做的好处是可以控制词表大小,迭代一次,增加一个单词。
理论上来讲,所有的单词都可以使用单词表中的词查找出来。例如 happiest 可以等于 h a p p iest。过LSTM的时候,其embedding等于 emb(h), emb(a), emb§, emb§, emb(i), emb(est)。
查找代码实现:huggingface transformers,找bert相关代码。
中文词向量
腾讯有公开的版本。词向量这样的方法不再流行。
Is Word Segmentation Necessary for Deep Learning of Chinese Representations?
大牛 Jiwei Li Shannon.AI
不需要了
3预训练句子向量
文本分类:
- 文本通过某种方式变成一个向量:wordavg,lstm,cnn
- 最后是一个linear layer 300维的句子向量
- 过一个softmax,做分类
训练一个和Resnet一样的东西,能够取代从文本到向量的这一段。然后应用到其他任务中。
有很多人提出了一些实现方法。
3.1 skip-thought
Kiros et. al, Skip-Thought Vectors
skip-thought与skip-gram的思想相似。两个句⼦如果总是在同⼀个环境下出现,那么这两个句⼦可能有某种含义上的联系。用中心句预测上一句和下一句。
如何把句子map成一个向量:compositional model,RNN, LSTM, CNN, WordAvg, GRU
论文中,把中心句用一个GRU作为编码器编码了,使⽤编码器最后⼀个hidden state来表示整个句⼦。然后使⽤这个hidden state作为初始状态来解码它之前和之后的句⼦。用了解码器。前一句和后一句的解码器不同。
解码器在这里是语言模型。编码器的hidden state参与了每一个门的计算。
我们就可以把encoder当做feature extractor了。
类似的工作还有fastsent。
3.2 InferSent
论文:Supervised Learning of Universal Sentence Representations from Natural Language Inference Data
给定两个句⼦,判断这两个句⼦之间的关系
entailment 承接关系
neutral 没有关系
contradiction ⽭盾
(non_entailment)
3.3 句子向量评价数据集
SentEval : SentEval: An Evaluation Toolkit for Universal Sentence Representations
句子任务:句子分类sentiment;句子相似度SNLI
senteval的framework:使用你的模型将句子变成向量,senteval会帮你评分。
这个方法被GLUE替换了。刷GLUE榜单。
4 预训练文档向量
基本不做了。事实上研究者在句⼦向量上的各种尝试是不太成功的。主要体现在这些预训练向量并不能⾮常好地提升。
模型在各种下游任务上的表现,⼈们⼤多数时候还是从头开始训练模型。
Learning Deep Structured Semantic Models for Web Search using Clickthrough Data:用文档向量和查询向量计算相关性,用搜索结果排序。
5 ELMO
ELMO paper: https://arxiv.org/pdf/1802.05365.pdf
contextualized word vectors:这是word2vector的加强版。
目前发现word2vector效果不够好。
contextualized word vectors真的有用。
Deep contextualized word representations震惊朋友圈的文章。
先说任务名称:
SQuAD:QA的任务 斯坦福大学收集的数据集
SNLI:句子相似性
SRL:
coref:一个名字一个代词,指的是不是同一个主体
NER:命名实体识别
SST-5:斯坦福,情感分类5分类数据集
baseline +ELMO之后分值大幅提升。
ELMO是什么?
是从语言模型学到的embedding。
ELMO有三层。第一层是character CNN,第二层和第三层是LSTM。
EMLO就是对三层做加权平均,得到contextural word vector。
使用方式是:
训练文本->ELMO->词向量->下游任务
γ
\gamma
γ和
s
s
s是可以作为参数,参与训练的。
标签:训练,ELMO,模型,单词,监督,句子,向量 来源: https://blog.csdn.net/flying_all/article/details/115588026