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


相反 , 给定证据的全部权重 , 在给定的上下文中 , 选择一个词形并输出一个它的词例 。
在以上各种情况下 , 对词形进行离散化处理有一个严重的缺点:有关如何将一个特定的词用作证据 , 或者是否生成一个输出词例的信息 , 不能在具有相似特性的单词之间共享 。 举个简单的例子 , 请考虑填补下面句子中的空缺:
S.will eat anything, but V. hates _
根据你对世界的先验知识 , 你可能会倾向于很有把握地填上词形为「豌豆」(pears)、「豆芽菜」(sprouts)、「鸡肉」(chicken)的词例 , 或其它代表食物的复数名词 。 这样的词形共有一些性质(和其它表示食物的单词一起) , 我们希望使用这些单词的模型能够用到这样的信息 。 两个不同的单词可能或多或少具有一些相似性 。
考虑到 NLP 程序大多都是使用监督式机器学习构建的 , 我们认为「单词或多或少具有一些相似性」的思路是十分重要的 。 在这里 , 监督式机器学习指的是我们拥有代表一个任务的输入和输出的示例(二者中至少有一个是由单词组成的) , 并且有一套根据这些「输入-输出」对泛化的机制 。 理想状况下 , 这样的机制应该能够利用相似性:它发现的关于某个单词的性质可以迁移到相似的单词上 。
在本文中 , 探讨两种将相似性信息引入程序的方法(理性主义和经验主义) 。
理性主义告诉我们 , 人类(尤其是受过人类语言科学方面训练的人)会知道这些相似性信息 , 我们可以设计数据结构显式地对其进行编码 , 让我们的程序在需要时访问这些信息 。 一个代表性的工作是 WordNet , 它使用 13 个词法数据库存储单词及其之间的关系(例如 , 同义:两个单词意味着同样的事情;上下位关系:一个词的意思是另一个词更加具象化的表现) 。 WordNet 也显式地捕获了一词多义的现象(例如 , 风扇:吹动空气的机器 , 有时也指「粉丝」) 。 句子结构(句法)的语言学理论提供了另一种方法来思考名词、动词这种形式的词的相似性 。
经验主义告诉我们 , 针对 NLP 应用 , 我们可以使用一组独立的程序收集并组织信息 。 随着网络上的文本数据越来越多 , 这种方式逐渐占据了主导地位 。 被用于从语料库中提取信息的程序已经经历了几个阶段的发展(从基于技术的统计 , 到使用更先进的统计方法建模 , 再到越来越强大的机器学习工具) 。
基于以上两种思路 , 我们都会想到通过向量而不是整数来表示词形 。 此时 , 我们需要确定向量的维度 , 并赋予不同的维度不同的目的 。 例如:
为每个词形赋予一个维度 , 该维度上赋值为 1(而其它所有的词形对应的维度上的值为 0) 。 这种方式本质上相当于对单词进行整数化处理 , 单词被表征为一个独热(one-hot)编码 。
对于属于已知类型的词形(例如 , 一周的七天) , 我们可以使用给定了二进制值的维度 。
对于具有相同词根的变体词形 , 我们同样可以使用一个维度将其归于同一类 。 例如 , 「know」、「known」、「knew」、「knows」的某一个维度上都被赋值为 1 , 而其它与 know 词根不同的单词则在该维度上被赋值为 0 。
更宽泛地说 , 我们可以使用表面的属性将看起来相似的词形绑定在一起:例如大小写的模式 , 长度 , 出现某个数字 。
如果词形的存在表示大小关系的意义 , 我们可能会分配一些维度来捕获这样的大小信息 。
在 NLP 领域中 , 有很多通过赋予向量某些维度 , 从而表征词形(或多单词序列)的例子 。 这些维度被称为「特征」 , 它们可以由专家设计 , 也可以通过自动化的算法得到 。
3
将词表征为分布式的向量
在语言学中 , 一个重要的思想是:可以通过相似的方式使用的单词(或表达)趋向于拥有相关的语义 。 在一个大型语料库中 , 我们可以收集有关词形「w」被使用的方式的信息(例如 , 统计它子其它词形附近出现的次数) 。 当我们研究语料库中存在 w 的上下文(附近的单词或句子)的完整分布时 , 我们采取了一种词义的分布式视角 。


推荐阅读