LangChain:数据增强之嵌入模型包装器
在LangChain框架中,嵌入模型包装器(Embedding Model Wrappers) 是用于将文本转换为向量表示的标准化接口,支持多种底层模型和服务。
嵌入(Embedding )
嵌入(Embedding):核心目标是将离散的符号(如文字)转化为连续的数值向量。是文本到向量的映射技术,通过词嵌入技术可以分析两段文本之间的相关性。
嵌入(Embedding )是连接人类语言与机器计算的桥梁。它通过将文本转化为数值向量,通过计算向量之间的余弦度来量化,使得计算机能够:
- 理解语义:捕捉词与词、句与句之间的关系。
- 支持复杂任务:如搜索、推荐、翻译等。
- 适应不同场景:通过调整嵌入模型,优化特定应用的效果。
嵌入模型
官方资料:LangChain Embedding models
嵌入模型将人类语言转化为机器可理解、可高速精准比对的格式。这些模型接收文本输入后,会生成固定长度的数值数组,形成文本语义的”数值指纹“。通过语义理解(而非仅关键词匹配),嵌入技术使搜索系统能精准定位相关文档。
用单一、紧凑的数值表示捕捉任何文本(一条推文、一份文档或一本书)的语义本质——这正是嵌入模型的核心能力,也是众多检索系统的基石。
关键概念
(1) 将文本嵌入为向量:嵌入将文本转换为数字向量表示。
(2) 度量相似性:嵌入向量可以使用简单的数学运算进行比较。
历史背景
嵌入模型的发展格局历经多年演变,已发生显著变革。2018年成为关键转折点——谷歌在这一年推出了BERT(基于Transformer的双向编码器表征模型)。BERT通过Transformer架构将文本编码为简洁的向量表征,在各类自然语言处理任务中实现了前所未有的性能突破。然而,BERT在生成高效的句子向量方面存在局限,这直接推动了SBERT(Sentence-BERT/句子BERT)的诞生。SBERT对BERT架构进行优化,专注于生成语义丰富的句子向量表征,借助余弦相似度等度量方法即可快速比对语义相关性,从而将相似句检索等任务的计算开销降低数个量级。
如今,嵌入模型生态呈现多元化态势,众多技术服务商提供各具特色的实现方案。为客观评估不同模型的性能优劣,研究者和开发者常参考MTEB(海量文本嵌入基准测试)等权威测评体系。
扩展阅读:
- 参阅开创性的《BERT》原始论文
- 阅读Cameron Wolfe对嵌入模型的深度解析
- 查看MTEB(海量文本嵌入基准测试)排行榜,获取嵌入模型的全景式评估
嵌入模型包装器
接口使用
LangChain 为各类文本嵌入模型提供统一接口,针对常见操作提供标准化方法,通过两大核心方法,这一通用接口可显著简化与不同嵌入服务提供商的交互流程:
embed_documents
: 将多个文本(文档)嵌入为向量,返回一个嵌入向量列表。embed_query
: 将单个文本(查询)嵌入向量,返回一个嵌入向量列表。
这一技术区分至关重要,因为部分服务提供商对文档(被检索对象)与查询语句(搜索输入本身)采用差异化的嵌入策略。
以下为具体实例,演示如何运用LangChain的.embed_documents
方法对字符串列表进行向量化编码:
1 | from langchain_openai import OpenAIEmbeddings |
该例子返回一个嵌入向量列表,其中每个嵌入向量由 1536个浮点数构成。
API 参考:OpenAIEmbeddings
为了方便,还可以使用embed_query方法嵌入单个文本:
1 | query_embedding = embeddings_model.embed_query("What is the meaning of life?") |
扩展阅读:
- 查看LangChain嵌入模型集成的完整列表:LangChain embedding model integrations。
- 请参阅这些操作指南,了解如何使用嵌入模型:how-to guides。
嵌入集成
LangChain提供了许多嵌入模型集成,可以在嵌入模型(Embedding models)集成页面上找到。
用户可以根据自己的具体需要,选择适合的文本嵌入模型。
相似性度量
每个嵌入本质上是一组坐标,通常位于高维空间中。在这个空间里,每个点(嵌入)的位置反映了其对应文本的语义。正如相似的词语在词典中可能彼此接近,相似的概念在这个嵌入空间里也会彼此靠近。这使得不同文本之间的直观比较成为可能。
通过将文本转换为这些数值表示,我们可以使用简单的数学运算快速衡量两段文本的相似程度,而无需考虑其原始长度或结构。常见的相似性度量方法包括:
- 余弦相似度:测量两个向量之间夹角的余弦值。
- 欧氏距离:测量两点之间的直线距离。
- 点积:测量一个向量在另一个向量上的投影量值。
相似性度量的选择应基于模型。例如,OpenAI建议它们的嵌入采用余弦相似性,这很容易实现:
1 | import numpy as np |
扩展阅读
- 关于嵌入技术与相似性度量,参考 Simon Willison’s nice blog post and video 博客、视频。
- 对嵌入向量相似性度量的选择建议,参考Google this documentation 指南。
- 对相似性度量方法的全面解析,参考 Pinecone’s blog post 博客。
- 关于嵌入向量最佳相似性度量方法的常见问题解答,参考OpenAI’s FAQ。
LangChain:数据增强之嵌入模型包装器
http://blog.gxitsky.com/2025/05/25/AI-LangChain-012-Data-Connection-Embedding/