一架梯子,一头程序猿,仰望星空!
LangChain教程(Python版本) > 内容正文

LangChain 文本嵌入模型(Text embedding models)


文本嵌入模型

文本嵌入模型主要用于计算文本的向量表示,这里的向量指的就是数学向量,也叫特征向量,作为开发者你只要知道通过文本嵌入模型,可以计算文本的特征向量,然后通过向量的相似度计算,可以找出特征相似的文本内容。

提示:文本嵌入模型基础知识,请学习文本嵌入模型入门教程

向量搜索&基于关键词搜索的区别

  • 向量搜索是基于词向量的语义相似性进行的,它可以找到与查询语义上相关的结果,即使查询词和结果中的词不完全匹配。向量搜索会把词映射到一个高维向量空间,计算向量之间的相似性。这样即使词本身不匹配,只要语义上相似,也能找到相关的结果。
  • 基于关键词的搜索是简单的字符串匹配。它只会返回包含完全匹配查询词的结果。如果文档使用了不同的词语,即使语义相似,也不会被匹配到。

Embeddings类是一种专门与文本嵌入模型进行接口交互的类。有许多嵌入模型提供者(OpenAI、Cohere、Hugging Face等)-这个类的设计是为所有提供者提供一个标准接口。

Embeddings类创建文本的向量表示。通过向量搜索,可以进行语义搜索之类的操作,例如我们在向量空间搜索最相似的文本片段。

LangChain中的基本Embeddings类公开两种方法:一种用于嵌入文档,一种用于嵌入查询。前者以多个文本作为输入,而后者以单个文本作为输入。之所以将它们作为两种不同的方法是因为一些嵌入提供者对于要搜索的文档和查询(搜索查询本身)有不同的嵌入方法。

快速入门

下面以openai的嵌入模型为例子介绍

配置

首先,我们需要安装OpenAI的Python包,因为LangChain有很多种文本嵌入模型实现,开发者需要根据自己的选择,安装不同模型的实现依赖:

pip install openai

通过环境变量配置openai的key

export OPENAI_API_KEY="..."

如果你不想设置环境变量,则可以通过在初始化OpenAI LLM类时直接传递openai_api_key命名参数来传递密钥:

from langchain.embeddings import OpenAIEmbeddings

embeddings_model = OpenAIEmbeddings(openai_api_key="...")

否则,可以不带任何参数初始化:

from langchain.embeddings import OpenAIEmbeddings

embeddings_model = OpenAIEmbeddings()

embed_documents

计算一批文本的向量特征

embeddings = embeddings_model.embed_documents(
    [
        "Hi there!",
        "Oh, hello!",
        "What's your name?",
        "My friends call me World",
        "Hello World!"
    ]
)
# 打印向量数量和第一个文本向量的长度
len(embeddings), len(embeddings[0])
(5, 1536)

embed_query

计算一个查询文本的向量特征,通常是把需要搜索的问题,转化成特征向量,然后使用这个向量去向量数据库查询相似的文本。

embedded_query = embeddings_model.embed_query("What was the name mentioned in the conversation?")
embedded_query[:5]
[0.0053587136790156364,
 -0.0004999046213924885,
 0.038883671164512634,
 -0.003001077566295862,
 -0.00900818221271038]


关联主题