突破文档处理瓶颈:如何利用OpenAI Metadata Tagger自动化提取元数据

104 阅读3分钟

突破文档处理瓶颈:如何利用OpenAI Metadata Tagger自动化提取元数据

引言

在文档管理过程中,为文档标记结构化的元数据(如标题、情感、长度等)可以极大地提高后续相似性搜索的精确度。而对于大量文档,手动标记这些信息不仅费时费力,而且容易出错。本文将介绍如何使用OpenAI Metadata Tagger自动化这一过程,帮助开发者高效、准确地提取文档元数据。

主要内容

OpenAI Metadata Tagger介绍

OpenAI Metadata Tagger是一个文档转换工具,它通过OpenAI Functions自动提取每个文档的元数据。这个工具接受一个自定义的LLM实例,要求其必须是支持函数功能的OpenAI模型。这使得Metadata Tagger可以根据提供的模式,从文档中提取指定的信息。

使用JSON Schema定义元数据

在开始使用Metadata Tagger之前,我们需要定义一个JSON Schema,用于描述要提取的元数据。这可以包括文档的标题、批评者、语气、评分等。例如:

schema = {
    "properties": {
        "movie_title": {"type": "string"},
        "critic": {"type": "string"},
        "tone": {"type": "string", "enum": ["positive", "negative"]},
        "rating": {
            "type": "integer",
            "description": "The number of stars the critic rated the movie",
        },
    },
    "required": ["movie_title", "critic", "tone"],
}

初始化和使用文档转换器

要开始使用文档转换器,我们首先需要一个支持函数的OpenAI模型,并初始化Metadata Tagger:

from langchain_community.document_transformers.openai_functions import create_metadata_tagger
from langchain_core.documents import Document
from langchain_openai import ChatOpenAI

# 使用API代理服务提高访问稳定性
llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0613")

document_transformer = create_metadata_tagger(metadata_schema=schema, llm=llm)

接下来,我们可以传入一组文档,获取其增强后的版本:

original_documents = [
    Document(
        page_content="Review of The Bee Movie\nBy Roger Ebert\n\nThis is the greatest movie ever made. 4 out of 5 stars."
    ),
    Document(
        page_content="Review of The Godfather\nBy Anonymous\n\nThis movie was super boring. 1 out of 5 stars.",
        metadata={"reliable": False},
    ),
]

enhanced_documents = document_transformer.transform_documents(original_documents)

代码示例

以下是完整的代码示例,这些代码展示了如何使用Metadata Tagger进行文档元数据提取:

import json
from langchain_community.document_transformers.openai_functions import create_metadata_tagger
from langchain_core.documents import Document
from langchain_openai import ChatOpenAI

# 定义元数据模式
schema = {
    "properties": {
        "movie_title": {"type": "string"},
        "critic": {"type": "string"},
        "tone": {"type": "string", "enum": ["positive", "negative"]},
        "rating": {"type": "integer", "description": "The number of stars the critic rated the movie"},
    },
    "required": ["movie_title", "critic", "tone"],
}

# 初始化LLM和文档转换器 # 使用API代理服务提高访问稳定性
llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0613")
document_transformer = create_metadata_tagger(metadata_schema=schema, llm=llm)

# 原始文档
original_documents = [
    Document(page_content="Review of The Bee Movie\nBy Roger Ebert\n\nThis is the greatest movie ever made. 4 out of 5 stars."),
    Document(page_content="Review of The Godfather\nBy Anonymous\n\nThis movie was super boring. 1 out of 5 stars.", metadata={"reliable": False}),
]

# 提取元数据
enhanced_documents = document_transformer.transform_documents(original_documents)

# 打印转换后的文档和元数据
print(*[d.page_content + "\n\n" + json.dumps(d.metadata) for d in enhanced_documents], sep="\n\n---------------\n\n")

常见问题和解决方案

  1. 无法访问API:对于某些地区,直接访问OpenAI的API可能会受到限制。在这种情况下,开发者可以使用API代理服务来提高访问的稳定性。

  2. 文档长度问题:Metadata Tagger适用于完整文档,因此最好在进行其他分割或处理之前,先使用该工具对文档进行完整分析。

  3. 自定义提取需求:如果需要提取自定义的信息,可以传递自定义的提示或使用Pydantic模式创建文档转换器。

总结和进一步学习资源

通过这些工具,文档自动化处理变得更加简单和高效。希望本文提供的示例和建议能帮助开发者在实践中更好地使用OpenAI Metadata Tagger。

参考资料

  • OpenAI API官方文档
  • LangChain社区文档
  • JSON Schema官方网站

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

---END---