技术编程|词向量因何存在:一段往计算机输入文字的历史( 四 )


根据部分(或全部的)字符序列计算词向量 。 这种方法倾向于使用神经网络将任意长度的序列映射为固定长度的向量 。 这样做有两个有趣的作用:在具有复杂单词构造系统的语言中 , 具有相同底层词根的变体会拥有相似的词向量;同一单词的不同拼写方式将有详细的词向量 。
4
上下文相关词向量
首先 , 我们要区分词例和词形 。 一直以来 , 在我们的 NLP 程序中 , 我们都假设每个词形都会使用一个固定的数据对象(一开始是整数 , 后来又发明了词向量)来表征 。 这样做是很方便 , 但是它又对语言做出了一些不符合现实情况的假设 。 最重要的一点是 , 单词在不同的上下文中应该有不同的意思 。
在粗粒度的级别上 , 专家们在构建 WordNet 时捕获了这种特性 。 例如 , 在 WordNet 中「get」被映射到了 30 多种不同的含义上 。 然而 , 应该给各个单词分配多少种词义(或者确定词义之间的边界)一直都是一个难以取得共识的问题 。 词义也有可能是随语境动态变化的 。
事实上 , 在很多基于神经网络的 NLP 程序中 , 首先要做的就是将每个单词词例所属的词形向量输入到一个函数中 , 然后基于该词例附近的上下文对这个向量进行变换 。 变换过程如图 4、图 5 所示 。

技术编程|词向量因何存在:一段往计算机输入文字的历史
本文插图

图 4:图 2 中计算的 3-单词向量之间的关系大致的可视化结果 。

技术编程|词向量因何存在:一段往计算机输入文字的历史
本文插图

图 5:图 2 和图 4 中的词例「astronomers」、「bodies」、「objects」的上下文相关词向量的假想的可视化结果 。
根据相似性的基本概念 , 我们期望相似的单词彼此之间能够很好地相互替换 。 有时仅仅根据词形是很难确定相似性的 , 而当我们考虑上下文语境时 , 这个问题就会简单很多 。
在大型语料库上预训练得到的 ELMo(基于语言模型的嵌入) , 以词例向量(针对上下文中的单词的向量 , 上下文相关向量)的形式带来了巨大的进步 。 EMLo 背后有两个主要的思想:
如果每个词例都有自己的向量 , 那么这个向量应该依赖于附近单词组成的任意长度的上下文 。 为了获得「上下文向量」 , 我们首先得到词形向量 , 然后将它们传递给一个神经网络 , 该神经网络可以将任意长度的左右上下文词向量序列转换为一个固定长度的向量 。 词形向量本质上是查找表 , 与之不同的是 , 上下文相关词向量是由代表单词类型的向量和将每个单词置于上下文中的神经网络参数构建的 。 ELMo 训练一个神经网络处理左侧的上下文(往回观测到出现某词例的句子的开头) , 另一个神经网络处理右侧的上下文(直到句子的结尾) 。 原则上说 , ELMo 也可能处理更长的上下文 。
回想一下 , 估计单词向量需要通过求解优化问题来拟合数据(在这里是语料库) 。 语言建模是 NLP 领域中一个长期存在的数据拟合问题 , 它指的是根据历史单词序列预测接下来的单词 。 已经被人们所使用的许多词形向量算法都是基于固定大小的上下文工作的 , 这些上下文是从语料库中词形的所有实例中收集的 。 ELMo 涉及的语料范围更广 , 它使用任意长度的历史单词序列 , 并直接引入了对应情况下最有效的语言模型(基于循环神经网络) 。 尽管循环神经网络已经在 NLP 领域中被广泛使用 , 但是将它们训练为语言模型 , 然后使用它们为每个词例提供的上下文向量作为与训练的词例向量还是很新颖的 。
这样的研究进展为什么令人振奋呢?上下文相关的词向量是否能完全解决歧义词带来的挑战仍然有待研究 。 人们往往会在对比基准测试中使用客观的性能评价指标测试 NLP 领域新的思路 。 研究人员发现 , ELMo 在以下领域中极大提升了 NLP 程序的性能:


推荐阅读