要了解语言模型的工作原理,首先需要了解它们如何表示单词。
人类用字母序列来表示英文单词,比如C-A-T表示猫。语言模型使用的是一个叫做词向量的长串数字列表。例如,这是一种将猫表示为向量的方式:
[0.0074, 0.0030, -0.0105, 0.0742, 0.0765, -0.0011, 0.0265, 0.0106, 0.0191, 0.0038, -0.0468, -0.0212, 0.0091, 0.0030, -0.0563, -0.0396, -0.0998, -0.0796, …, 0.0002]
为什么要使用如此复杂的表示法?这里有个类比,华盛顿特区位于北纬38.9度,西经77度,我们可以用向量表示法来表示:
• 华盛顿特区的坐标是[38.9,77]
• 纽约的坐标是[40.7,74]
• 伦敦的坐标是[51.5,0.1]
• 巴黎的坐标是[48.9,-2.4]
这对于推理空间关系很有用。你可以看出,纽约离华盛顿特区很近,因为坐标中38.9接近40.7,77接近74。同样,巴黎离伦敦也很近。但巴黎离华盛顿特区很远。
语言模型采用类似的方法:每个词向量代表了“词空间(word space)”中的一个点,具有相似含义的词的位置会更接近彼此。例如,在向量空间中与猫最接近的词包括狗、小猫和宠物。用实数向量表示单词(相对于“C-A-T”这样的字母串)的一个主要优点是,数字能够进行字母无法进行的运算。
单词太复杂,无法仅用二维表示,因此语言模型使用具有数百甚至数千维度的向量空间。人类无法想象具有如此高维度的空间,但计算机完全可以对其进行推理并产生有用的结果。
几十年来,研究人员一直在研究词向量,但这个概念真正引起关注是在2013年,那时Google公布了word2vec项目。Google分析了从Google新闻中收集的数百万篇文档,以找出哪些单词倾向于出现在相似的句子中。随着时间的推移,一个经训练过的神经网络学会了将相似类别的单词(如狗和猫)放置在向量空间中的相邻位置。
Google的词向量还具有另一个有趣的特点:你可以使用向量运算“推理”单词。例如,Google研究人员取出最大的(biggest)向量,减去大的(big)向量,再加上小的(small)向量。与结果向量最接近的词就是最小的(smallest)向量。
你可以使用向量运算来做类比!在这个例子中,大(big)与最大的(biggest)的关系,类似于小(small)与最小的(smallest)的关系。Google的词向量捕捉到了许多其他的关系:
• 瑞士人与瑞士类似于柬埔寨人与柬埔寨。(国籍)
• 巴黎与法国类似于柏林与德国。(首都)
• 不道德的与道德的类似于可能的与不可能的。(反义词)
• Mouse(老鼠)与mice(老鼠的复数)类似于dollar(美元)与dollars(美元的复数)。(复数形式)
• 男人与女人类似于国王与女王。(性别角色)
因为这些向量是从人们使用语言的方式中构建的,它们反映了许多存在于人类语言中的偏见。例如,在某些词向量模型中,(医生)减去(男人)再加上(女人)等于(护士)。减少这种偏见是一个很新颖的研究领域。
尽管如此,词向量是语言模型的一个有用的基础,它们编码了词之间微妙但重要的关系信息。如果一个语言模型学到了关于猫的一些知识(例如,它有时会去看兽医),那同样的事情很可能也适用于小猫或狗。如果模型学到了关于巴黎和法国之间的关系(例如,它们共用一种语言),那么柏林和德国以及罗马和意大利的关系很可能是一样的。