词向量是把一个词变成一串数字的办法。计算机本来读不懂文字,词向量让每个词对应高维空间里的一个点:意思越接近的词,点与点之间的距离越近;意思差得远的词,离得也远。大模型处理文字的第一步,就是先把词换成这样的数字坐标。它不是词典释义,而是一种让机器能直接做加减、算距离的数学表示。
词向量是怎么算出来的
词向量不是人工编出来的,而是模型从大量文本里学出来的:一个词经常和哪些词一起出现,它的向量就往那些词的方向靠。2013年,谷歌的Mikolov团队发布Word2Vec,用预测邻近词的办法训练,证明向量间的几何关系能对应语义关系——国王减去男人再加上女人,最接近女王。2014年斯坦福的GloVe换了一条路,统计全语料里词与词共同出现的次数。两种向量都能用余弦相似度衡量远近,数值越接近1,意思越接近。
词向量和分词器、独热编码有什么不同
这三样东西处在不同环节,容易混淆。分词器负责把句子切成Token,给每个Token一个编号;词向量把编号再换成一串有含义的数字。独热编码也是把词变成数字,但每个词只有一个位置是1、其余全是0,词与词之间没有远近可言,猫和狗的距离跟猫和汽车一样远。
| 分词器 | 独热编码 | 词向量 | |
|---|---|---|---|
| 输出 | Token编号 | 0和1组成的长串 | 几百维连续数字 |
关键在于:几百个维度的连续数值记录语义,相近的词在空间里自然聚到一起。分词器决定读到什么,词向量决定怎么理解。
词向量有什么用不上的地方
早期的词向量有个硬伤:一个词不管出现在哪,都只有一个固定向量,“苹果”既可以是水果,也可以是公司,它分不清。2018年之后,ELMo和BERT改用上下文相关的表示,同一个词在不同句子里得到不同的向量,多义词问题才有了像样的解法。还有两个边界:数字、编号、人名这类精确内容靠向量找不准,相似不等于相等;向量距离近只说明用法和语境接近,不等于两个词可以互换,更不等于模型真的理解了词义。
词向量最适合用在“找相似”的地方:语义搜索、内容推荐、问答系统里找相关段落,搜“怎么给猫洗澡”能命中没出现“猫”字的宠物清洁文章。反过来,按订单号查记录、按条款原文比对合同这类精确匹配,都不该只靠向量。看一个产品是不是真用上了词向量,就看它搜同义词、换种说法时能不能找到东西:能,说明它在算语义;只能按字面匹配,大概率还在用关键词。