【RAG】如何让你的Embedding比HuggingFaceEmbeddings快几倍?

453 阅读2分钟

你是否在使用HuggingFaceEmbeddings时遇到了速度慢的问题?或者在尝试将其部署到云端时遇到了各种麻烦?别担心,这里为你提供了一个解决方案!

1. 速度问题,一招解决

使用HuggingFaceEmbeddings时,速度慢可能让你感到沮丧。自写的Embedding工具,速度提升高达三四倍,确保你在处理大量数据时依然流畅。告别等待,让你的工作效率翻倍!

2. 云端部署,不再头疼

将Embedding工具部署到云端时,你是否遇到了各种技术难题?我们的工具设计简洁,部署过程轻松,让你不再为云端部署而烦恼。无论是AWS、GCP还是Azure,都能轻松应对。

3. 简单易用,快速上手

无需复杂的配置,我们的工具设计简单易用,即使是初学者也能快速上手。只需几步操作,你就能享受到高效、稳定的Embedding服务。

现在开始:

1)准备环境
python = "^3.11"
python-dotenv = "^1.0.1"
transformers = "^4.46.1"
sentence-transformers = "^3.2.1"
  • python-dotenv获取环境变量
  • transformers和sentence-transformers下载用到的模型

然后在项目根目录下创建.env
写入你下载模型位置的绝对地址
MODEL_SAVE_PATH = '/Users/[你的用户名]/xxx/local_model/models'

2)下载模型并保存到本地
from sentence_transformers import SentenceTransformer
import os
from dotenv import load_dotenv
load_dotenv()
# 指定保存模型的路径
save_path = os.getenv("MODEL_SAVE_PATH") 
# 指定要下载的模型名称
model_name = "sentence-transformers/all-mpnet-base-v2"

# 下载模型
model = SentenceTransformer(model_name)

# 保存模型到指定路径
model.save(save_path)

print(os.getcwd()+ save_path)

3)基于模型创建自己的embedding,这里有并发和进度显示
from sentence_transformers import SentenceTransformer
import os
from dotenv import load_dotenv
load_dotenv()
# 使用示例
model_path = os.getenv("MODEL_SAVE_PATH") # 替换为你的本地模型路径


class LocalSentenceTransformerEmbeddings:
    def __init__(self):
        self.model = SentenceTransformer(model_path)
    
    def embed_documents(self, texts: list) -> list:
        """
        生成多个文本的嵌入向量。

        :param texts: 输入文本列表
        :return: 嵌入向量列表
        这里显示了进度
        """
        embeddings = self.model.encode(texts, batch_size=32, show_progress_bar=True)
        return embeddings.tolist()
        
    def embed_query(self, text: str) -> list:
        """
        生成单个文本的嵌入向量。

        :param text: 输入文本
        :return: 嵌入向量
        """
        embedding = self.model.encode(text)
        return embedding.tolist()

4)使用
embedder = LocalSentenceTransformerEmbeddings()

# 嵌入多个文本
texts = ["这是一个示例文本", "这是另一个示例文本"]
embeddings = embedder.embed_documents(texts)
print("多个文本的嵌入向量:", embeddings)

# 嵌入单个文本
single_text = "这是一个单个文本的示例"
single_embedding = embedder.embed_query(single_text)
print("单个文本的嵌入向量:", single_embedding)

end. 欢迎关注up

不要再为Embedding的速度和部署问题烦恼,立即体验我们的工具,让你的工作效率大幅提升。无论是数据处理还是模型训练,都能轻松应对。 可以关注当前账号,如有其他问题,请加wx: qiaochao2015,进群详聊