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


北京联盟_本文原题:词向量因何存在:一段往计算机输入文字的历史
本文转载自:AI科技评论
往计算机输入文字 , 是整个自然语言处理(NLP)领域的宏大故事的一部分 , 而 NLP 则是人工智能的重要分支研究领域 。
NLP中 , 最细粒度的部分就是词语 , 词语组成句子 , 句子再组成段落、篇章、文档 。 而语言作为人类独有的表达方式 , 如果要输入到计算机中 , 则要将语言中的一个个词语转换成数值形式 , 这就需要用到词向量 , 或者说词嵌入的方法 。
因而 , 要想研究好NLP, 势必要对词向量有透彻的理解 。
读罢此文 , 你将对词向量有一个一般性的认识:它们为何而存在 , 它们解决了什么问题 , 它们源自何处 , 它们随着时间如何变化?以及 , 目前关于词向量有哪些有待解决的问题?
本文的关键论点包括:
即使是在最基本的单词层面上 , 在可计算的条件下表征自然语言文本仍然是个难题 。
不同单词的意义或多或少有其相似之处 。 人们使用连续的向量有效地获取这种性质 , 大规模的文本语料让我们可以自动地发掘许多层面上的词义相似性 。 通常 , 预料词典中的每个单词都有一个但以固定的表征向量 。
单词的意义可以随着其出现的上下文不同而发生很大的变化 。 最新的研究进展使用 NLP 和机器学习(ML)领域的常用工具识别并学习了这种变化 。 这些方法在诸多对比基准上展示出了巨大的性能提升 。
1
早期方法:离散化表征
在计算机中 , 表征一段文本的最简单的形式是一个字符序列(根据编码的不同 , 存储一个字符可能需要一个字节或多个字节) 。 一个词形可以被表征为一个字符串(字符的有序列表) , 但是比较两个字符串是否相同的计算成本却很高 。
在之前 , 单词往往都会被整数化处理 。 这样一来 , 每个词形都会被赋予一个唯一的(或多或少任意的)非负整数值 。 这样做的优点是每个词形都以相同大小的空间被存储下来 , 基于数组的数据结构可以被用来通过词形索引其它的信息(如单词的字符串 , 对属于该词形的词例进行技术 , 或者包含单词潜在语义的细节信息的更丰富的数据结构) 。 当遇到新的词形时 , 词汇表就会被不断地扩展(直到单词数达到整型数据类型的上限 , 对于 4 字节无符号整数来说 , 这一上限超过了 40 亿) 。 当然 , 我们可以很快地测试两个整数是否相同 。
整数本身并不具有任何意义 。 为整数分配意义的过程可以是随机的 , 也可以是按照字母顺序进行的 , 或者是或根据词例在生成单词表的参考文本语料中出现的顺序进行(也就是说 , 第一个出现的词例的词形被赋予整数 0;如果第二个出现的词例与第一个不同 , 则将整数 1 赋予它对应的词形) 。 具有相关语义的两个词形将会被赋予具有一定「距离」的整数 , 两个在分配的空间中「相近」的词形彼此之间可能没有任何关系 。
使用整数只是遵循当下流行的编程语言中可用的数据类型的一种方便的表示方法 。 例如 , 在 Lisp 语言中 ,「gensym」也能达到同样的目的(尽管效率可能低一些) 。 因此 , 我们将基于整数的词形表征称为「离散化表征」 。
考虑到 NLP 程序大多都是使用监督式机器学习构建的 , 我们认为「单词或多或少存在相似性」的思路是十分重要的 。
2
究竟该如何在计算机中使用 文字 ?
为了解释 NLP 从业者为什么不再通过离散化表征的方法处理词形 , 很有必要解释下单词是如何在 NLP 程序中被使用的 。 下面是一些示例:
观测给定文档中的一个词例 , 以此为证据(evidence)预测文档的类别 。 例如 , 在一段电影影评中出现的「delightful」单词 , 说明影评人可能很喜欢这部电影 , 并给予它一个正面评价 。
观测给定文档中的一个词例 , 以此为证据在句子翻译中预测一个词例 。 例如 , 在英语句子中出现单词「cucumber」说明在法语翻译中可能出现单词「concombre」 。


推荐阅读