趋近智
在前面一步将文档分割成可管理的片段后,我们面临一个新问题:如何高效地在成千上万甚至数百万个文本片段中查找与用户查询最相关的那些?直接比较原始文本字符串效率低下,并且经常错过语义关联(例如,“狗品种信息”与“关于金毛猎犬的事实”)。我们需要一种方法来以数值方式表示文本的含义。这就是文本嵌入模型发挥作用的地方。
文本嵌入模型是专门的神经网络,用于将文本片段(词语、句子、段落或整个文档)转换为称为向量的数值表示。可以将这些向量看作是在高维“含义空间”中定位文本的坐标。
有效文本嵌入背后的核心思想是:语义相似性对应于空间邻近性。含义相似的文本将被映射到该向量空间中彼此靠近的向量,而含义不同的文本则会相距更远。这种数值表示使得我们能够通过计算进行有意义的比较和搜索。
例如,像“流感的症状是什么?”和“我怎么知道自己是否得了流感?”这样的句子很可能产生彼此非常接近的嵌入向量。相比之下,像“法国的首都是哪里?”这样的句子会得到一个与流感相关句子相距很远的向量。
一个简化的二维高维嵌入空间表示。像“狗”和“小狗”这样相似的事物被映射到一起很近,而不相关的“汽车”则相距很远。
文本的数值表示,即向量表示,并非随意创建。它们是复杂深度学习模型的产物,通常基于Transformer架构(该架构也驱动了许多大型语言模型,如GPT和BERT)。这些嵌入模型在海量文本数据上进行训练,学习捕捉词语和事物之间的上下文细节、语义和关系。
生成嵌入的常见方式包括:
text-embedding-ada-002、text-embedding-3-small、text-embedding-3-large)、Cohere和Google等服务商通过API调用提供嵌入生成服务。这简化了集成,但会涉及网络延迟和每次API调用可能产生的费用。sentence-transformers(基于Hugging Face的transformers构建)这样的库提供了大量预训练模型的访问(例如,all-MiniLM-L6-v2、multi-qa-mpnet-base-dot-v1),你可以在本地或自己的基础设施上运行这些模型。这提供了更多控制,对于大量数据而言具有成本效益,但需要管理模型和计算资源。嵌入模型的选择会很大程度上影响RAG系统的性能。考虑的因素有:
一旦我们将文本表示为向量,如何在这一高维空间中衡量“接近度”呢?最常用的指标是余弦相似性。余弦相似性不是测量向量端点之间的欧几里得距离(这对向量大小敏感),而是测量两个向量之间夹角的余弦。它能很好地说明这些向量是否指向同一方向。
对于两个向量 A 和 B,余弦相似性计算公式如下:
相似性=cos(θ)=∥A∥∥B∥A⋅B=∑i=1nAi2∑i=1nBi2∑i=1nAiBi其中:
结果范围从-1到1:
实际中,对于许多常见模型生成的嵌入,其值通常介于0和1之间,因为模型常被训练为在此范围内表示语义相似性。
文本嵌入是RAG中“检索”步骤的核心。该过程如下:
这些检索到的信息随后用于“增强”发送给大型语言模型的提示,为其提供所需上下文,以便根据外部数据回答用户查询。
现在我们了解了如何将文本片段表示为可搜索的向量,我们需要一种有效的方法来存储这些向量并快速执行相似性搜索,尤其是在处理大型数据集时。这引向了向量数据库这个方向。
简洁的语法。内置调试功能。从第一天起就可投入生产。
为 ApX 背后的 AI 系统而构建
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造