机器之心从word2vec开始,说下GPT庞大的家族系谱( 二 )


这位创始人很快意识到 , 他可以用大量文本数据对模型进行预训练从而得到嵌入 , 这样的效果比在特定的任务(数据量较少)上训练更好 。 所以 word2vec 和 Glove 这种可供下载的预训练词向量表(每个词都有自己对应的词向量)就出现了 , 图 3 展示了 GloVe 中‘stick’这个词的对应的词嵌入(部分) 。
机器之心从word2vec开始,说下GPT庞大的家族系谱
本文插图
【机器之心从word2vec开始,说下GPT庞大的家族系谱】
图 3:“stick”的词向量 (图源:[15])
ELMo [3] —— 语境很重要!
在爷爷创建了这个家族企业之后 , 后续也有很多很多后代在对其进行发展 , GPT 的近亲中也有这么一位——ELMo (2018 年 2 月) 。 这位 GPT-3 的叔叔在 2018 年跟 GPT-1 一起被 BERT 拉出来示众(作比较) , 所以大家应该也比较耳熟 。 ELMo 创业的时候 , Transformer 还未经打磨 , Transformer 的儿子 Transformer-decoder(2018 年 1 月)同样还没有火起来 , 所以他还没有用 Transformer(也因此被 BERT 在最开始的论文里拉出来作对比) , 但是他注意到了词向量不能是不变的 , 比如一开始学习词嵌入的时候是用下面这两句话:
“哦!你买了我最爱的披萨 , 我爱死你了!”
“啊 , 我可真爱死你了!你把我最爱的披萨给蹭到地上了?”
这里的 “爱” 明显意思是不同的 , 但是因为训练的时候没有看到 “爱” 后面的话 , 所以 “爱” 就在词嵌入的空间里被定义为褒义词了 。 首先我们要知道的是 ELMo(Embedding from Language Model)中也是使用了 “语言模型” 任务来完成语境的学习 , 这也是我在这篇文章里提到 ELMo 的一个重要原因(另一个就是其为了解决上面提出的问题的方法) , 为了防止有人对语言模型不熟悉 , 这里给出一个语言模型的定义——语言模型其实就是给定一个模型一串词 , 然后让模型预测下一个词 。
了解了语言模型的概念 , 上面问题出现的原因就不难理解了——模型看到的是前文 , 看不到后文 。 为了解决这个问题 , ELMo 就用双向 LSTM 来获取双向语境 。 同时 , 上面涉及的问题不只是双向语境问题 , 还有一个很严重的问题——词嵌入不应该是不变的 。 也就是说 , 不同的句子里同一个词可能有不同的意思 , 那么词嵌入肯定也该不一样 。
因此ELMo 又提出要在看完整个句子的前提下再给定这个词的嵌入 。 也就是说词嵌入的来源不再是过去的查表了 , 而是通过预训练好的模型来获得(是不是很像图像领域的 transfer learning?) 。 看一下原论文中对 ELMo 的定义:
Our word vectors are learned functions of the internal states of a deep bidirectional language model (biLM), which is pretrained on a large text corpus.
最终 , 这些思想都给他的侄子们(GPT , BERT 等)带来了很大的启发 。 如果对 ELMo 的计算细节感兴趣 , 本文最后也贴了 reference , 可以去看一下原论文 , 还是有很多很聪明的想法的 , 不过它不是我们今天的主角 , 因此这里就不多做赘述了 。
【旁支】Attention
在说完 ELMo 之后 , 本来就应该开始介绍现在家族集团的中流砥柱 BERT 和 GPT 了 , 但是在这之前还是要简要回顾一下 attention 和 self attention , 我猜很多加入 NLP 不久的人应该跟我一样 , 一上来从各大科普文中接收到的概念就是 self-attention 和 self-attention 的计算过程 , 对于 self-attention 名字的由来还是很迷糊 , 甚至很多科普文的作者对这个概念都是迷迷糊糊的 , 导致我在求证自己的理解的时候都发现很多不同的版本 , 不过我们还是要忠于原论文 , 因此这个问题还是从最开始论文对 Attention 的定义开始说起 , 很多 attention 的科普文的第一部分都会对 attention 的原理进行很形象的描述 , 顾名思义就是我们希望我们的模型在给我们结果的时候不要傻乎乎的给它什么他就都看 , 而是只看重要的那一点 , 机器之心对于注意力还有很多很有趣的解释 , 这里就不浪费篇幅做重复的工作了 , 直接上正式的定义: