自然语言处理从入门到应用——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/

相关推荐
扫地僧98515 分钟前
基于机器学习的注意力缺陷/多动障碍 (ADHD)(python论文+代码)HYPERAKTIV
人工智能·机器学习·图像识别
想进大厂的Leo17 分钟前
【LLM学习之路】9月22日 第九天 自然语言处理
人工智能·学习·自然语言处理
AI绘画哇哒哒20 分钟前
【AI实战攻略】保姆级教程:用AI打造治愈动画vlog,轻松打造爆款,快速涨粉!
人工智能·stable diffusion·aigc
AI原吾30 分钟前
探索 ShellGPT:终端中的 AI 助手
人工智能·python·ai·shell_gpt
Linux猿34 分钟前
828华为云征文 | 云服务器Flexus X实例:开源项目 LangChain 部署,实例测试
langchain·华为云·agent·flexus云服务器x实例·华为云服务器
深耕AI36 分钟前
【Opencv知识】图像梯度如何理解?
人工智能·计算机视觉
Strengthen_沈1 小时前
图像处理软件,常用于照片编辑和修饰
图像处理·人工智能
Qspace丨轻空间1 小时前
屋顶气膜网球馆:智慧城市资源利用之道—轻空间
人工智能·科技·安全·智慧城市·娱乐
Qspace丨轻空间1 小时前
移动宴会厅:灵活便捷的宴会新选择—轻空间
大数据·人工智能·科技·娱乐
WenGyyyL2 小时前
机器学习和深度学习的区别
人工智能·深度学习·机器学习