来源:市场资讯
(来源:图灵人工智能)
“向量”是一串有固定顺序的数字;
“词向量”就是用一串有固定顺序的数字表示一个词。
下面是斯坦福大学发布的GloVe词向量模型中的一个真实例子。该模型把每个词表示成50个数字;也有100维、200维和300维的版本(参考文献[1])。
英语单词 king(国王) 被表示成下面这串数字:
[0.50451,0.68607,-0.59517,-0.022801,0.60046,
-0.13498,-0.08813,0.47377,-0.61798,-0.31012,
-0.076666,1.493,-0.034189,-0.98173,0.68229,
0.81722,-0.51874,-0.31503,-0.55809,0.66421,
0.1961,-0.13495,-0.11476,-0.30344,0.41177,
-2.223,-1.0756,-1.0783,-0.34354,0.33505,
1.9927,-0.04234,-0.64319,0.71125,0.49159,
0.16754,0.34344,-0.25663,-0.8523,0.1661,
0.40102,1.1685,-1.0137,-0.21585,-0.15155,
0.78321,-0.91241,-1.6106,-0.64426,-0.51042]
第一次看到词向量,最自然的反应大概是:
“国王”明明是一个人人都懂的词,为什么到了计算机里,却变成了这样一串莫名其妙的小数?
这些数字对人来说并没有清晰含义。不能说第一个数字表示权力,第二个数字表示男性,第三个数字表示统治者。假如换一个模型,同一个词会得到另一串完全不同的数字。
单独看这50个数,几乎什么也看不出来。它们只有和同一模型中的其他词放在一起比较时,才开始发挥作用。例如,把 king、queen、man、woman 的向量放在同一个空间中,它们之间会呈现出某些有规律的位置关系。从 man 指向 king 的方向,与从 woman 指向 queen 的方向大致平行。也可以写成:
king − man ≈ queen − woman
所以,词向量真正值得追问的,不是:
这50个数字分别是什么意思?
而是:
一个词原本已经有写法、有读音、有词典解释,为什么还要用数字给它安排一个位置?
把词变成一串数字以后,计算机究竟多获得了什么能力?
要搞清楚这个问题,不妨先从一次普通的买衣服说起。
一、当“查找”变成“选择” —— 为什么需要向量?
对商店来说,组织上千上万件衣服,最简单的办法,是先给衣服打上各种特征标签:
男装还是女装;
衬衫、外套还是羽绒服;
黑色、白色还是蓝色;
什么尺码;
什么价格。
这些信息放进数据库后,就可以准确查询(定位):
找出价格低于800元的黑色女式羽绒服。
这是典型的符号计算。每件衣服属于什么类别、具有什么属性,都被明确记录下来;计算机只需按条件查找。
但现实中的选择往往没有这么简单。
你真正考虑的可能是:
穿去上班,还是参加婚礼;
天气冷不冷;
是否适合自己的年龄和身材;
是不是太张扬;
能不能和已有的鞋子、裤子搭配;
穿起来是否舒服;
价格虽然稍高,是否仍然值得。
这时,问题已经不再是:
哪件衣服完全符合条件?
而变成了:
假如没有一件衣服完全符合要求,哪一件衣服总体上感觉最合适?
解决这个问题,当然可以继续在数据库中增加字段,编写更多规则:
婚礼要穿正式的衣服;
冬天要保暖;
年长者不宜过于鲜艳;
上班穿着不能太随意。
但是,规则很快就会越来越多,而且互相牵连。
正式一点的衣服可能不够舒适;保暖的衣服可能显得臃肿;颜色虽然合适,款式却不适合这个场合。每个因素都不是简单的“有”或“没有”,而是有程度差别;不同因素的重要性还会随着人和场合变化。
符号方法擅长处理界限清楚的问题:
是不是黑色?
价格是否低于800元?
是否属于羽绒服?
却不擅长直接回答:
在多大程度上合适?
两件衣服哪一件更接近我的需要?
问题从“逐项查找”变成了“综合比较”。这时,向量化的思想便自然出现了。
二、向量化究竟增加了什么能力?
我们可以把一件衣服放到若干连续的尺度上考察:
正式程度;
保暖程度;
鲜艳程度;
宽松程度;
运动感;
价格水平。
例如,一件衣服可以粗略表示为:
[正式8,保暖6,鲜艳2,宽松5,运动感1,价格7]
这串数字不是衣服的编号。这串数字描述的是一件衣服在多个方面所处的位置。
同样,“某个人在冬天参加一场正式晚宴”也可以形成一组对衣服的需求:
[正式9,保暖7,鲜艳3,宽松5,运动感1,价格6]
现在,选择衣服的问题就发生了变化:
不必为每一件衣服编写一套规则,只需比较每件衣服与这组需求总体相差多少。
差得越少,通常就越合适。
向量化最重要的地方,不是“把几个特征写成数字”,而是把所有对象放进同一个空间。每一件衣服在这个空间中都有一个位置;人的需要和使用场合,也可以在同一个空间中形成一个位置。原本复杂的“是否合适”,便转化为“两个位置相距多远”。
符号表示主要回答:
它是什么?具有什么明确属性?
向量表示进一步回答:
它与另一个对象有多接近?
在没有完全相同对象时,哪一个最相似?
在多种因素互相冲突时,哪一个总体上更合适?
这就是向量方法的核心优势:它特别适合处理连续的、模糊的、多因素共同决定的、无法穷举全部规则的问题。
更进一步说,符号系统往往需要逐条记录关系:
A和B相似;
A和C不太相似;
B比C更适合某种场合。
对象一多,关系就会急剧增加。
向量则把大量难以穷举的关系压缩进每个对象的空间位置中。
只要知道两个对象的位置,就可以计算它们的远近,而不必事先把每一对关系都列出来。
三、为什么自然语言中的词语也需要向量化
词语知识可以放进数据库。
词典可以记录:
“苹果”是名词;
“苹果”是一种水果;
“苹果”可以食用;
“苹果”和“梨”属于同类;
“高兴”和“快乐”是近义词;
“高兴”和“悲伤”是反义词。
对于清楚、固定的知识,这种符号表示十分好用。
可是,语言中的关系远不止这些。
“高兴”“快乐”“兴奋”“欣慰”“满意”“得意”都有联系,却不是简单的相同或不同。它们在感情色彩、程度、产生原因、使用对象和适用场合上各有差异。
我们很难逐条写出:
“高兴”和“快乐”有多接近;
“欣慰”在哪些方面接近“高兴”;
“兴奋”为什么在这个句子里合适,在另一个句子里却不合适。
语言表达的组合更是无法穷举。
一个人搜索:
饭卡丢了怎么办?
学校网站上的通知可能写着:
校园卡遗失补办办法。
从字面看,“饭卡”不等于“校园卡”,“丢了”不等于“遗失”,“怎么办”也不等于“补办办法”。按照符号进行精确匹配,可能什么也找不到;但人一看就知道,这两个表达说的是同一件事。
这正是词语需要向量化的原因。
如果把词放进一个“语言空间”,使用方式相近、经常出现在相似环境中的词,可以处在相近位置;差异较大的词,则处在较远位置。这样,计算机就不必只判断两个词是否完全相同,还可以计算它们在语言使用中有多接近。
词向量因此能够帮助计算机处理:
近义表达检索;
语义相似判断;
自动推荐;
文本分类;
翻译;
根据上下文选择更合适的词。
这种思想并不限于词。
语素可以向量化,词可以向量化,句子、段落乃至整篇文章也都可以向量化。这样一来,一条问题和一篇答案、一段新闻和另一段报道、一份材料和用户的查询,都可以放进某个共同空间中进行比较。
对象一旦向量化,就获得了一种统一的计算方式:
不再只问“是否相同”,还可以问“相似到什么程度”。
所以,词向量真正完成的是一次重要转换:
普通的符号化的编码,告诉计算机“这是哪个词”(符号编码化);
词典和数据库记录已经明确规定的属性与关系(特征化);
词向量表示则进一步将词语之间模糊、复杂而难以穷举的关系,转化为空间中的位置、距离和方向(向量化);
词向量,就是词在一个可计算的语言空间中的位置(词语世界地图中的GPS精准定位)——需要用一串长长的数字表示,数字越长,表示能力就可以越精细,从而让词语能够被比较、在复杂场景下依据语境约束选择如何使用。
参考文献
[1] Jeffrey Pennington, Richard Socher, and Christopher D. Manning. 2014. “GloVe: Global Vectors for Word Representation.” *Proceedings of EMNLP 2014*, 1532–1543.
热门跟贴