下面对文本表示进行一个归纳,也就是对于一篇文本可以如何用数学语言表示呢?
上面给出的4个类型也是nlp领域最为常用的文本表示了,文本是由每个单词构成的.
谈起词向量:
分布式假设也就是在相同的语境或语境中有些词汇可能有相似的含义或意思,即在特定的语境中,一些词汇可以被用来表示类似或相关的概念,而它们的含义可能会相互重叠或交叉。
而由此引申出了word2vec、fastText,在此类词向量中,虽然其本质仍然是语言模型,但是它的目标并不是语言模型本身而是词向量,其所作的一系列优化,都是为了更快更好的得到词向量。
glove则是基于全局语料库、并结合上下文语境构建词向量,结合了LSA和word2vec的优点。
上述方法得到的词向量是固定表征的,无法解决一词多义等问题。
为此引入基于语言模型的动态表征方法:elmo、GPT、bert。
(1)One-hot 表示 :维度灾难、语义鸿沟;
(2)分布式表示 (distributed representation) :
1)其本质都可以看作是语言模型;
2)目标不同
词向量只是NNLM一个副产物;
word2vec虽然其本质也是语言模型,但是其专注于词向量本身,因此做了许多优化来提高计算效率:
与NNLM相比,词向量直接sum,不再拼接,并舍弃隐层;
考虑到sofmax归一化需要遍历整个词汇表,采用hierarchical softmax 和negative sampling进行优化
1)都可以无监督学习词向量, fastText训练词向量时会考虑subword;
2) fastText还可以进行有监督学习进行文本分类,其主要特点:
1)glove vs LSA
2)word2vec vs glove
之前介绍词向量均是静态的词向量,无法解决一次多义等问题。
下面介绍三种elmo、GPT、bert词向量,它们都是基于语言模型的动态词向量。
从几个方面对这三者进行对比:
(1)特征提取器:elmo采用LSTM进行提取,GPT和bert则采用Transformer进行提取。很多任务表明Transformer特征提取能力强于LSTM,elmo采用1层静态向量+2层LSTM,多层提取能力有限,而GPT和bert中的Transformer可采用多层,并行计算能力强。
(2)单/双向语言模型:
word2Vec 有两种模型:CBOW 和 Skip-Gram:
context(w)
的情况下,预测 w
;w
的情况下预测 context(w)
;与NNLM相比,word2vec的主要目的是生成词向量而不是语言模型,在CBOW中,投射层将词向量直接相加而不是拼接起来,并舍弃了隐层,这些牺牲都是为了减少计算量,使训练更加高效。
不经过优化的CBOW和Skip-gram中 ,在每个样本中每个词的训练过程都要遍历整个词汇表,也就是都需要经过softmax归一化,计算误差向量和梯度以更新两个词向量矩阵(这两个词向量矩阵实际上就是最终的词向量,可认为初始化不一样),当语料库规模变大、词汇表增长时,训练变得不切实际。为了解决这个问题,word2vec支持两种优化方法:hierarchical softmax 和negative sampling。此部分仅做关键介绍,数学推导请仔细阅读《word2vec 中的数学原理详解》。
hierarchical softmax 使用一颗二叉树表示词汇表中的单词,每个单词都作为二叉树的叶子节点。对于一个大小为V的词汇表,其对应的二叉树包含V-1非叶子节点。假如每个非叶子节点向左转标记为1,向右转标记为0,那么每个单词都具有唯一的从根节点到达该叶子节点的由{0 1}组成的代号(实际上为哈夫曼编码,为哈夫曼树,是带权路径长度最短的树,哈夫曼树保证了词频高的单词的路径短,词频相对低的单词的路径长,这种编码方式很大程度减少了计算量)。
negative sampling是一种不同于hierarchical softmax的优化策略,相比于hierarchical softmax,negative sampling的想法更直接——为每个训练实例都提供负例。
bert的全称是Bidirectional Encoder Representation from Transformers,bert的核心是双向Transformer Encoder
BERT Transformer 使用双向self-attention
而GPT Transformer 使用受限制的self-attention,其中每个token只能处理其左侧的上下文。
双向 Transformer 通常被称为“Transformer encoder”,而左侧上下文被称为“Transformer decoder”,decoder是不能获要预测的信息的。
在上述3个模型中,只有bert共同依赖于左右上下文。
elmo使用的是经过独立训练的从左到右和从右到左LSTM的串联拼接起来的,不是双向。
而GPT使用从左到右的Transformer,实际就是“Transformer decoder”。
BERT 的作者认为,这种拼接式的bi-directional 仍然不能完整地理解整个语句的语义。
更好的办法是用上下文全向来预测[mask],也就是用 “能/实现/语言/表征/…/的/模型”,来预测[mask]。
BERT 作者把上下文全向的预测方法,称之为 deep bi-directional。
我们知道向Transformer这样深度越深,学习效果会越好。可是为什么不直接应用双向模型呢?因为随着网络深度增加会导致标签泄露。
深度双向模型比left-to-right 模型或left-to-right and right-to-left模型的浅层连接更强大。遗憾的是,标准条件语言模型只能从左到右或从右到左进行训练,因为双向条件作用将允许每个单词在多层上下文中间接地“see itself”。
为了训练一个深度双向表示(deep bidirectional representation),研究团队采用了一种简单的方法,即随机屏蔽(masking)部分输入token,然后只预测那些被屏蔽的token。论文将这个过程称为“masked LM”(MLM)。
虽然这确实能让团队获得双向预训练模型,但这种方法有两个缺点。
首先,预训练和finetuning之间不匹配,因为在finetuning期间从未看到[MASK]token。
为了解决这个问题,团队并不总是用实际的[MASK]token替换被“masked”的词汇。相反,训练数据生成器随机选择15%的token。例如在这个句子“my dog is hairy”中,它选择的token是“hairy”。
然后,执行以下过程:
数据生成器将执行以下操作,而不是始终用[MASK]替换所选单词:
Transformer encoder不知道它将被要求预测哪些单词或哪些单词已被随机单词替换,因此它被迫保持每个输入token的分布式上下文表示。
此外,因为随机替换只发生在所有token的1.5%(即15%的10%),这似乎不会损害模型的语言理解能力。
使用MLM的第二个缺点是每个batch只预测了15%的token,这表明模型可能需要更多的预训练步骤才能收敛。团队证明MLM的收敛速度略慢于 left-to-right的模型(预测每个token),但MLM模型在实验上获得的提升远远超过增加的训练成本。
bert模型的主要创新点都在pre-train方法上,即用了Masked LM和Next Sentence Prediction两种方法分别捕捉词语和句子级别的representation。