[如何利用Docugami高效加载和处理文档,提升数据检索能力]

61 阅读3分钟

引言

在日常工作中,我们经常需要处理大量的文档数据。如何快捷、高效地加载和处理这些文档,是每个开发者都需要面对的挑战。本文将介绍如何利用Docugami来加载和处理文档,以及它在智能分块方面的优势。同时,我们将展示实际的代码示例,并讨论一些常见问题和解决方案。

主要内容

1. Docugami简介及优势

Docugami是一种智能文档处理工具,它可以将文档分块成有层次的语义XML树,每个块具有不同的大小,从单个词或数值到整个章节。这种分块方法提供了更有意义的文档表示,比简单的基于字符长度或空白分块方法更具优势。以下是Docugami的主要优势:

  • 智能分块:根据文档的语义轮廓,将文档拆分成不同大小的块。
  • 语义注释:文档的每个块都附带统一的语义标签,有助于跨多个文档进行一致的层次化查询。
  • 结构化表示:利用XML树指示文档的结构轮廓,包括标题、段落、列表、表格等元素。
  • 附加元数据:如果用户使用Docugami,文档块还会附带额外的元数据,有助于高精度的文档问答。

2. 基本使用方法

为了使用Docugami加载器,首先需要设置工作空间并获取访问令牌。接着,将文档(如PDF、DOCX或DOC)添加到Docugami中,并让它智能聚类这些文档。然后,根据以下代码示例来加载文档。

import os
from docugami_langchain.document_loaders import DocugamiLoader

# 设置Docugami访问令牌
DOCUGAMI_API_KEY = os.environ.get("DOCUGAMI_API_KEY")

# 设置文档集ID和文档ID
docset_id = "26xpy3aes7xp"
document_ids = ["d7jqdzcj50sj", "cgd1eacfkchw"]

# 创建Docugami加载器并加载文档
loader = DocugamiLoader(docset_id=docset_id, document_ids=document_ids)
chunks = loader.load()
print(f"文档块总数: {len(chunks)}")

3. 使用Docugami进行文档问答

可以利用Docugami加载器进行文档问答,与一般加载器不同的是,Docugami能更好地跟踪文档的自然轮廓,提高问答的准确性。

from langchain.chains import RetrievalQA
from langchain_chroma import Chroma
from langchain_openai import OpenAI, OpenAIEmbeddings

# 使用已预处理的文档集
loader = DocugamiLoader(docset_id="zo954yqy53wp")
chunks = loader.load()

# 设置嵌入和向量数据库
embedding = OpenAIEmbeddings()
vectordb = Chroma.from_documents(documents=chunks, embedding=embedding)
retriever = vectordb.as_retriever()
qa_chain = RetrievalQA.from_chain_type(
    llm=OpenAI(), chain_type="stuff", retriever=retriever, return_source_documents=True
)

# 测试问答
response = qa_chain("What can tenants do with signage on their properties?")
print(response)

4. 处理大文档的挑战和解决方案

处理大文档时,正确答案可能依赖于文档中相距较远的块。传统分块技术即便有重叠也难以提供足够的上下文来回答这些问题。而Docugami通过附加元数据能够更好地解决这一问题。

chain_response = qa_chain("What is rentable area for the property owned by DHA Group?")
print(chain_response)

通过调整Docugami加载器的参数,开启更多的XML标签和元数据,可以显著提高问答的准确性。

总结和进一步学习资源

Docugami通过智能分块和附加元数据,提供了比传统方法更强大的文档处理能力。这对于需要高精度文档问答的应用场景尤为重要。想了解更多关于Docugami和文档处理的内容,可以参考以下资源:

参考资料

  • Docugami 文档
  • LangChain 文档
  • OpenAI 文档

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