句向量(句嵌入)模型sent2vec的训练及应用

词嵌入(word embedding)旨在将自然语言中的单词映射成一个向量,学界在这方面的研究已经相当深入,从事NLP的人对此必然是早有了解的(如果你对此尚不熟悉,可以参考【1】)。本文将讨论另外一个与此十分相关的话题——句向量模型(sent2vec),也就是将一个完整的句子映射成一个实数向量的技术。实际上,这方面已经发表的成果也是比较多的,本文中所涉及的技术主要是源自NAACL 2018的一篇论文(具体可以参见文献【2】)。

文献【2】中提出的sent2vec模型可以理解为词嵌入技术中经典的CBOW方法的扩展。具体来说,为了“扑捉”到句子的语义(而不局限于某个具体单词),需要做两点改进:1)考察的对象是一整个句子,而非用固定大小的窗口在句子中框出来的一段单词序列。2)引入n-gram,从而增强对句子中单词顺序的嵌入能力。注意到,嵌入模型基本都是无监督学习的。对于一个给定的句子,sent2vec在训练时的输入是该句子中的所有单词以及n-gram序列,而输出(或者说需要用神经网络拟合的)则是missing words。文献【3】从另外一个角度理解sent2vec(如下图所示),把它看成是无监督版的fastText,“the entire sentence is the context and possible class labels are all vocabulary words”,注意到这里的all vocabulary words其实就是前面说到的missing words(如果你理解CBOW,那么在这一点上,它们是异曲同工的)。在得到句子中每个单词的embedding向量之后,句子的embedding就是其中所有词向量的平均。

下面尝试来训练一个sent2vec模型。论文原作者在【4】中提供了一些已经训练好的模型(处理的语言为英语),同时也给出了自行训练sent2vec模型的步骤(【5】中还给出了在此基础上的一个封装,使用【4

猜你喜欢

转载自blog.csdn.net/baimafujinji/article/details/50652798