🎯 一句话总结
向量化的本质,是将文本、图片、音频等信息映射到一个高维连续空间中,使得语义相似的内容在空间中的距离更近,不相似的内容距离更远。这个向量是由深度模型学习得到的,能够代表语义而非单纯的字面匹配。
🧩 为什么我们需要向量化?
传统的关键词检索方式,只能做到“字符或词面相同”才能匹配。这带来一个明显的局限:对于语义相同但表达方式不同的句子,系统无法识别它们之间的关联。例如:
这两个句子的含义完全一致,但用词却不同。向量化的目标,正是为了让这些语义相近的文本,能够拥有相近的“数学表示”,从而让机器能够理解语义层面的相似性。
🧠 直觉化理解:将语义变为“坐标”
我们可以用一个简化的例子来形象地理解。假设我们让模型学习两个语义维度:
- 第1维:内容是否与“密码”相关
- 第2维:内容是否属于求助类问题
那么,不同的句子可能会被映射为如下坐标:
- “忘记密码怎么办” → (0.9, 0.8)
- “如何重置账号密码” → (0.92, 0.79)
- “我喜欢吃苹果” → (0.1, 0.1)
你可以清晰地看到,尽管前两句的具体措辞不同,但它们的向量表示在二维空间中非常接近,而第三句完全不相关的句子则远离它们。这直观地展示了向量化如何捕捉语义。
当然,现实中用于自然语言处理和语义理解的Embedding维度远不止2维,常见的有384维、768维、1024维甚至更高。维度越高,模型能够表示和区分的语义细节就越细腻。
🧮 数学原理:高维空间与相似性度量
一旦文本被转化为高维空间中的向量,我们就可以通过数学方法来计算它们之间的“语义距离”。最常用的度量方法包括:
-
余弦相似度(Cosine Similarity)
公式为:similarity(a, b) = (a·b) / (||a|| * ||b||)
它衡量的是两个向量在方向上的差异,结果越接近1,表示语义越相似。这是语义搜索中最经典和常用的方法。
-
点积(Dot-product)
直接在向量点积的基础上进行归一化等操作,计算效率往往更高,许多现代大语言模型(LLM)的原生接口也支持此方式。
-
欧氏距离(Euclidean Distance)
计算向量在空间中的直线距离。在语义相似度任务中较少直接使用,因为它对向量的模长(长度)比较敏感。
🤖 模型是如何把文本变成向量的?
以BERT、Sentence-BERT等典型的Embedding模型为例,这个过程通常包含以下几个步骤:
步骤1:分词(Tokenizer)
首先,输入文本会被拆分成模型能够理解的子词(Token)。例如:
“我忘记密码了” → [“我”, “忘”, “记”, “密”, “码”, “了”]
步骤2:Token向量化
每个Token会通过查找一个预训练好的词表,被转换为一个初始的数值向量,即词向量(Word Embedding)。这个向量的维度通常是768或1024。
步骤3:Transformer编码器提取语义
Embedding模型的核心通常是一个Transformer编码器。它通过多头注意力机制、残差连接和层归一化等技术,深入分析Token之间的上下文关系。在这一步,模型会综合学习句子的整体语义、句法结构和词语间的相互作用。
最终,每个Token的向量都变成了蕴含了丰富上下文信息的表示。
步骤4:池化(Pooling)得到句向量
我们需要将所有Token的表示聚合成一个固定长度的向量来代表整个句子。常见策略包括:
- CLS Pooling:直接取句子开头特殊的
[CLS]标记对应的输出向量作为句向量。
- 均值池化(Mean Pooling):对所有Token的输出向量取平均值。这是目前非常流行且有效的方法。
- 最大池化(Max Pooling):取所有Token向量在每个维度上的最大值。
经过池化,我们就得到了最终的句向量——也就是文本的Embedding。例如,“忘记密码怎么办”这句话,最终被表示为一个768维的向量。
🧲 为什么向量能准确表示语义?(核心训练原理)
向量空间之所以能具备良好的语义结构,关键在于模型通过特定目标在海量数据上进行训练。常见的训练方式包括:
-
对比学习(Contrastive Learning)——最关键的方法
模型被训练去拉近语义相似句子的向量距离,同时推远不相关句子的向量距离。例如,它会学到“如何重置密码”和“忘记密码怎么办”的向量应该靠近,而与“苹果很好吃”的向量应该远离。
代表模型有SimCSE、Sentence-BERT等,常用的损失函数包括InfoNCE Loss和Triplet Loss。
-
下一句预测(Next Sentence Prediction)
源自BERT的预训练任务,让模型判断两个句子是否为连续的上下文,这极大地增强了模型对句子间关系的理解能力。
-
掩码语言模型(Masked Language Modeling)
通过随机遮盖句子中的部分词语,让模型根据上下文进行预测。这个过程使模型学习到词语之间深刻的语义和语法关联。
因此,Embedding模型本质上是通过大规模语料、Transformer架构以及对比学习等目标,共同塑造出一个隐含丰富语义结构的高维向量空间。
📌 向量化的主要应用场景
- 语义搜索(RAG的基石):相比关键词匹配,能极大提升搜索的相关性和准确性。
- 文本聚类:自动将海量文本按语义相似度进行归类。
- 推荐系统:为用户寻找相似的内容,或为内容寻找相似的用户。
- Agent工具调用:将工具的功能描述转化为向量,让大模型通过向量匹配来判断和调用最合适的工具。
- 重复检测:快速识别和去重语义相似的文本内容。
🎯 最后留一个思考题
向量化技术虽然强大,但也存在其局限性。例如,它对训练数据分布敏感、可能无法很好处理专业领域或最新出现的术语、计算和存储成本较高等。你对向量化的局限还有什么看法?欢迎在云栈社区与其他开发者一起交流探讨。
|