标记化后,每个标记只是一个数字 - 词汇表中的索引。但索引 4,821 没有告诉模型任何有关含义的信息。人工智能如何知道“国王”和“女王”是相关的,或者“银行”可以表示河岸或金融机构?答案是嵌入。
简单的方法将每个单词表示为一个包含一个 1 和数千个 0 的向量。 “猫”可能是[0, 0, 1, 0, ..., 0],“狗”是[0, 0, 0, 1, ..., 0]。
这有两个致命的缺陷:
嵌入将每个标记映射到一个密集向量,例如 256 或 768 维。与 one-hot 向量不同,这些维度是在训练和编码过程中学习的。
在相似的上下文中使用的单词最终在这个空间中紧密结合在一起。 “小狗”落在“小猫”附近。 “伦敦”降落在“巴黎”附近。空间的几何形状就是意义。
2013 年的 Word2Vec 论文展示了一些非凡的东西。在大型文本语料库上进行训练,学习到的向量表现出算术关系:
vector("king") − vector("man") + vector("woman") ≈ vector("queen")
从“男人”到“女人”的方向抓住了性别的概念。将其添加到“国王”移动到“女王”。这不是编程的——它是从语言模式中产生的。
其他示例:Paris − France + Italy ≈ Rome、bigger − big + small ≈ smaller。
Word2Vec 由 Tomáš Mikolov 在 Google 于 2013 年创建。该论文被引用超过 40,000 次,被认为是有史以来发表的最具影响力的 NLP 论文之一。它证明了在原始文本上训练的简单神经网络可以学习惊人的语义关系。
现代模型使用不同的嵌入大小:
|型号|嵌入尺寸| |--------|---------------------| | Word2Vec | 100–300 | |伯特 | 768 | 768 | GPT-3 | 12,288 | 12,288 | OpenAI 文本嵌入-3-大 | 3,072 | 3,072
更多维度可以捕捉更精细的区别,但需要更多内存和计算。可以把它想象成描述一个人:3个维度(身高、体重、年龄)给出了一个粗略的草图; 768个维度描绘出一幅细致的肖像。
著名的方程式”国王−男人+女人≈女王”说明了什么?
词嵌入代表单个单词,但我们经常需要比较整个句子或文档。 句子嵌入(来自 Sentence-BERT 或 OpenAI 的嵌入 API 等模型)将整个段落压缩为单个向量。
登录 参与讨论
“如何重置密码?”和“我忘记了我的登录凭据”将具有非常相似的句子嵌入,即使它们几乎没有共享单词。嵌入捕获意图,而不仅仅是词汇。
为了比较两个嵌入,我们使用余弦相似度 - 两个向量之间角度的余弦。它的范围从-1(相反)到+1(同向)。
余弦相似度忽略矢量大小,纯粹关注方向——这就是意义所在。
“爱”和“恨”在含义上是相反的,但可能具有适度的余弦相似性,因为它们出现在相似的上下文(情感、关系)中。这告诉我们什么关于纯粹根据单词共现训练的嵌入的局限性?
矢量数据库存储数百万个嵌入并以极快的速度检索最相似的嵌入。您不用关键字匹配(“查找包含‘机器学习’的文档”),而是按含义(“查找有关人工智能教育的文档”)进行搜索。
流行的矢量数据库包括:
这些数据库使用 HNSW(分层可导航小世界)等算法在几毫秒内搜索数十亿个向量。
向量搜索相对于传统的关键词搜索有什么优势?
RAG 是现代人工智能中最重要的模式之一。它将向量搜索与语言模型结合起来:
RAG 让语言模型回答有关“您的”特定数据(公司文档、产品目录、研究论文)的问题,而无需重新训练。它极大地减少了幻觉,因为该模型有真实的来源可供参考。
在RAG系统中,向量数据库扮演什么角色?
嵌入为无数现实世界的系统提供支持:
Spotify 使用音频嵌入来推荐歌曲。每首曲目都根据其声学特征进行嵌入,建议来自于查找附近的向量 - 在嵌入空间中“听起来相似”的歌曲。
如果您将每个产品嵌入在线商店中,您如何构建一个推荐系统,在不依赖购买历史记录的情况下说“查看过该商品的客户可能也喜欢......”?