NLP领域有着四个比较大的方向:

  • 文本分类
  • 序列标注
  • 文本匹配
  • 文本生成

在NLP里头,最细粒度的就是 词语,由词语组成句子,由句子组成文章继而表达一些语言层面上的含义。因此本文从NLP的根源问题 词语表达 开始讲起,即word2vec,NLP领域重要的预训练方法。

word2vec考古史

Word2vec最早出现是以一个副产品的身份出现的。它是在实现语言模型过程中出现的一个惊喜的意外。简而言之,就是在做实现语言模型的过程中,我们得到了词语的数值表达,这也就是word2vec的精髓。

词语是人类对语言在符号上的抽象总结,通过word2vec,将符号语言转化为数值表达,方便计算机寻找语言背后的抽象逻辑。

语言模型

生成word2vec的语言模型是个什么东西呢?如下图:

语言模型就是量化的衡量哪一个句子更像是人说的,核心函数p的思想是说,通过一系列的前导词,预测出后面跟着哪一个词的概率最大。

数据的输入问题,第一步是将每个词用一个向量来唯一表示(one-hot),然后才可能对这个向量进行编码,得到具有语言意义的一个向量(word2vec)。

one-hot的实现过程为建立一个长度为V的表,假设这个V表示世界上所有词语的词语。当我们对出现的一个词语进行编码的时候,只需要将这个词语出现的位置置为1,其他为0,即得到了这个词语的唯一表达(one-hot形式)。

语言网络的设计,加入你设计出了如下的结构:

这就是大名鼎鼎的神经网络语言模型,由Bengio 2003发表在JMLR上,2013年深度学习升温后,才慢慢进入了神坛。

他的核心思想即是最大似然估计的思想:
$$
\begin{equation}
\left.P\left(W_{t}=\operatorname{‘Bert’} | W_{1}, W_{2}, \ldots W_{(} t-1\right) ; \theta\right)
\end{equation}
$$
即如果当前位置出现了’Bert‘,要求网络预测前t-1的参数,使得当前出现Bert的概率最大。网络的输入,我们最初说使用one-hot的形式,但是为了另其具有语言的含义,我们在将词语输入网络之前,使用矩阵Q进行语义上的转换。从而得到词语的word embedding表达。

矩阵Q就是所谓的word2vec的转换矩阵,它包含V行,每一行表示一个单词的vector值,有一点值得注意的是,Q矩阵一开始是用随机值进行初始化的,矩阵Q参与网络的训练,当网络训练好之后,矩阵Q就被正确赋值了。

word2vec有两种训练方式:

  • CBOW:从一个句子中将一个词抠掉,用这个词的上下文去预测这个词。
  • skip-gram:用一个词去预测这个词的上下文。

ELMO克服word2vec的多义词缺陷

word2vec对下游的nlp任务有一些帮助,但是帮助却不是那么大。一个比较严重的问题在于多义词的问题,例如bank这个单词,可以指银行也可以指河床,但是在矩阵Q中,这个单词只有一种特征的编码。

如何解决这个问题呢,ELMO模型提出了一种想法,利用上下文场景来确定多义词的语义。

ELMO的本质思想是:事先用语言模型学好一个单词的Word Embedding,此时多义词无法区分。在下游任务中,实际使用Word Embedding的时候,单词已经具备了特定的上下文,这个时候可以根据上下文单词的语义去调整单词的Word Embedding表示,经过调整后的Word Embedding更能表达在这个上下文中的具体含义,即确定了多义词的具体语义。

ELMO采用典型的两阶段:

  • 第一个阶段利用语言模型进行word embedding的预训练
  • 第二个阶段是提取对应单词网络各层的word embedding作为新特征,补充到下游任务中

上图是第一阶段的预训练过程,网络结构采用双层的word embedding作为新特征补充到任务中。网络结构采用双层的LSTM,左端正向表示正向的编码器。右边逆向,表示逆向的编码器。从两个方向来预测扣掉的那一个词。

使用这个网路,每次输入一个句子网络将会输出三个向量,分别是 单词特征,句法特征,语义特征。

这三个特征如何使用呢,在下游的任务中,我们给每一个vector一个权重,然后将三个特征相加,整合成一个特征输入下游的任务中。这个权重需要通过网络的学习得到。EMLO效果相比较于传统的word2vec性能上得到了比较明显的提升。

ELMO有什么缺点呢:

  • LSTM抽取特征的能力远弱于transformer
  • 拼接方式双向融合特征,融合能力偏弱

接下来,我将在另外的文章中介绍transformer。

inference

https://zhuanlan.zhihu.com/p/49271699