从零开始理解词向量
在大模型时代,经常听到向量这个词,比如向量检索、相似度计算等。那么要怎样理解自然语言处理(NLP)中的向量呢?本文通过介绍一个简单的例子来理解向量,重点介绍共现矩阵。
共现矩阵
共现矩阵是自然语言处理中一种用来表示词语之间关系的工具。在共现矩阵中,每一行代表一个词语,每一列也代表一个词语,矩阵中的每个元素则表示对应行词语和列词语在一段文本或者一组文本中同时出现的次数。简而言之,共现矩阵告诉我们哪些词语在文本中经常一起出现,从而揭示它们之间的关联性。
构建示例
举例说明,有下面一个句子:
'小华喜欢吃苹果和橙子,他经常在学校买水果吃。'
将这句话按词语切分为:
'小华'、'喜欢'、'吃'、'苹果'、'和'、'橙子'、'他'、'经常'、'在'、'学校'、'买'、'水果'。
我们设置一个规则,即窗口大小为 2。然后,对于每个词,看它周围 2 个词内出现了哪些其他词语,如果出现了就在共现矩阵中对应位置加 1。
以"小华"为例,它周围 2 个词是"喜欢"、"吃",所以我们在共现矩阵中"小华"行,"喜欢"、"吃"列的位置上加 1。
依此类推,我们可以构建出如下的共现矩阵(为了简洁起见,这里只展示部分共现关系):
| 小华 | 喜欢 | 吃 | 苹果 | 和 | 橙子 | 他 | 经常 | 在 | 学校 | 买 | 水果 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 小华 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 喜欢 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 吃 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 苹果 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
(注:实际矩阵为对称矩阵,此处仅示意逻辑)
词向量与相似度计算
有了这个共现矩阵之后,我们就可以用向量来表示词了。例如:


