自然语言处理从入门到应用——LangChain:模型(Models)-[文本嵌入模型Ⅰ]

分类目录:《自然语言处理从入门到应用》总目录


本文将介绍如何在LangChain中使用Embedding类。Embedding类是一种与嵌入交互的类。有很多嵌入提供商,如:OpenAI、Cohere、Hugging Face等,这个类旨在为所有这些提供一个标准接口。

嵌入创建文本的向量表示会很有用,因为这意味着我们可以在向量空间中表示文本,并执行类似语义搜索这样的操作。LangChain中的基本Embedding类公开两种方法:

  • embed_documents:适用于多个文档
  • embed_query:适用于单个文档

将这两种方法作为两种不同的方法的另一个原因是一些嵌入提供商对于需要搜索的文档和查询(搜索查询本身)具有不同的嵌入方法,下面是文本嵌入的集成示例:

Aleph Alpha

使用Aleph Alpha的语义嵌入有两种可能的方法。如果我们有不同结构的文本(例如文档和查询),则我们使用非对称嵌入。相反,对于具有可比结构的文本,则建议使用对称嵌入的方法:

非对称
dart 复制代码
from langchain.embeddings import AlephAlphaAsymmetricSemanticEmbedding
document = "This is a content of the document"
query = "What is the content of the document?"
embeddings = AlephAlphaAsymmetricSemanticEmbedding()
doc_result = embeddings.embed_documents([document])
query_result = embeddings.embed_query(query)
对称
dart 复制代码
from langchain.embeddings import AlephAlphaSymmetricSemanticEmbedding
text = "This is a test text"
embeddings = AlephAlphaSymmetricSemanticEmbedding()
doc_result = embeddings.embed_documents([text])
query_result = embeddings.embed_query(text)

Amazon Bedrock

Amazon Bedrock是一个完全托管的服务,通过API提供了来自领先AI初创公司和亚马逊的FMs,因此您可以从广泛的FMs中选择最适合您的用例的模型。

dart 复制代码
%pip install boto3
from langchain.embeddings import BedrockEmbeddings

embeddings = BedrockEmbeddings(credentials_profile_name="bedrock-admin")
embeddings.embed_query("This is a content of the document")
embeddings.embed_documents(["This is a content of the document"])

Azure OpenAI

我们加载OpenAI Embedding类,并设置环境变量以指示使用Azure端点。

dart 复制代码
# 设置用于 OpenAI 包的环境变量,以指示使用 Azure 端点
import os

os.environ["OPENAI_API_TYPE"] = "azure"
os.environ["OPENAI_API_BASE"] = "https://<your-endpoint.openai.azure.com/"
os.environ["OPENAI_API_KEY"] = "your AzureOpenAI key"
os.environ["OPENAI_API_VERSION"] = "2023-03-15-preview"
from langchain.embeddings import OpenAIEmbeddings

embeddings = OpenAIEmbeddings(deployment="your-embeddings-deployment-name")
text = "This is a test document."
query_result = embeddings.embed_query(text)
doc_result = embeddings.embed_documents([text])

Cohere

我们加载Cohere Embedding类:

dart 复制代码
from langchain.embeddings import CohereEmbeddings
embeddings = CohereEmbeddings(cohere_api_key=cohere_api_key)
text = "This is a test document."
query_result = embeddings.embed_query(text)
doc_result = embeddings.embed_documents([text])

DashScope

我们加载DashScope嵌入类:

dart 复制代码
from langchain.embeddings import DashScopeEmbeddings
embeddings = DashScopeEmbeddings(model='text-embedding-v1', dashscope_api_key='your-dashscope-api-key')
text = "This is a test document."
query_result = embeddings.embed_query(text)
print(query_result)
doc_results = embeddings.embed_documents(["foo"])
print(doc_results)

DashScope

我们加载DashScope嵌入类:

dart 复制代码
from langchain.embeddings import DashScopeEmbeddings
embeddings = DashScopeEmbeddings(model='text-embedding-v1', dashscope_api_key='your-dashscope-api-key')
text = "This is a test document."
query_result = embeddings.embed_query(text)
print(query_result)
doc_results = embeddings.embed_documents(["foo"])
print(doc_results)

Elasticsearch

使用Elasticsearch中托管的嵌入模型生成嵌入的操作步骤。通过下面的方式,可以很容易地实例化ElasticsearchEmbeddings类。如果我们使用的是Elastic Cloud,则可以使用from_credentials构造函数,如果我们使用的是Elasticsearch集群,则可以使用from_es_connection构造函数:

dart 复制代码
!pip -q install elasticsearch langchain
dart 复制代码
import elasticsearch
from langchain.embeddings.elasticsearch import ElasticsearchEmbeddings
# 定义模型 ID
model_id = 'your_model_id'

如果我们希望使用from_credentials进行测试,那么我们需要Elastic Cloud的cloud_id:

dart 复制代码
# 使用凭据实例化 ElasticsearchEmbeddings
embeddings = ElasticsearchEmbeddings.from_credentials(
    model_id,
    es_cloud_id='your_cloud_id', 
    es_user='your_user', 
    es_password='your_password'
)

# 为多个文档创建嵌入
documents = [
    'This is an example document.', 
    'Another example document to generate embeddings for.'
]
document_embeddings = embeddings.embed_documents(documents)

# 打印文档嵌入
for i, embedding in enumerate(document_embeddings):
    print(f"文档 {i+1} 的嵌入:{embedding}")

# 为单个查询创建嵌入
query = 'This is a single query.'
query_embedding = embeddings.embed_query(query)

# 打印查询嵌入
print(f"查询的嵌入:{query_embedding}")

同时,我们可以使用现有的Elasticsearch客户端连接进行测试,这可用于任何Elasticsearch部署:

dart 复制代码
# 创建 Elasticsearch 连接
es_connection = Elasticsearch(
    hosts=['https://es_cluster_url:port'], 
    basic_auth=('user', 'password')
)
# 使用 es_connection 实例化 ElasticsearchEmbeddings
embeddings = ElasticsearchEmbeddings.from_es_connection(
  model_id,
  es_connection,
)
# 为多个文档创建嵌入
documents = [
    'This is an example document.', 
    'Another example document to generate embeddings for.'
]
document_embeddings = embeddings.embed_documents(documents)

# 打印文档嵌入
for i, embedding in enumerate(document_embeddings):
    print(f"文档 {i+1} 的嵌入:{embedding}")

# 为单个查询创建嵌入
query = 'This is a single query.'
query_embedding = embeddings.embed_query(query)

# 打印查询嵌入
print(f"查询的嵌入:{query_embedding}")

参考文献:

[1] LangChain 🦜️🔗 中文网,跟着LangChain一起学LLM/GPT开发:https://www.langchain.com.cn/

[2] LangChain中文网 - LangChain 是一个用于开发由语言模型驱动的应用程序的框架:http://www.cnlangchain.com/

相关推荐
Fuweizn1 分钟前
富唯智能可重构柔性装配产线:以智能协同赋能制造业升级
人工智能·智能机器人·复合机器人
taoqick2 小时前
对PosWiseFFN的改进: MoE、PKM、UltraMem
人工智能·pytorch·深度学习
suibian52352 小时前
AI时代:前端开发的职业发展路径拓宽
前端·人工智能
预测模型的开发与应用研究3 小时前
数据分析的AI+流程(个人经验)
人工智能·数据挖掘·数据分析
源大模型3 小时前
OS-Genesis:基于逆向任务合成的 GUI 代理轨迹自动化生成
人工智能·gpt·智能体
PowerBI学谦5 小时前
Python in Excel高级分析:一键RFM分析
大数据·人工智能·pandas
运维开发王义杰5 小时前
AI: Unsloth + Llama 3 微调实践,基于Colab
人工智能·llama
charles_vaez5 小时前
开源模型应用落地-LangGraph101-探索 LangGraph 短期记忆
深度学习·语言模型·自然语言处理
文心快码 Baidu Comate5 小时前
文心快码|AI重构开发新范式,从工具到人机协同
人工智能·ai编程·文心快码·智能编程助手·全栈编程
WHATEVER_LEO6 小时前
【每日论文】Latent Radiance Fields with 3D-aware 2D Representations
人工智能·深度学习·神经网络·机器学习·计算机视觉·自然语言处理