使用OpenAI Metadata Tagger自动化文档标签化:提高文档检索效率

93 阅读2分钟

引言

在现代信息管理中,为文档添加结构化元数据(如标题、语调或长度)有助于提高后续相似性搜索的精准度。然而,对于大量文档,手动进行标签化过程既耗时又乏味。本文将介绍如何使用OpenAI Metadata Tagger来自动提取文档元数据,从而实现高效文档管理。

主要内容

1. OpenAI Metadata Tagger概述

OpenAI Metadata Tagger是一种文档转换器,通过OpenAI Function驱动的链,依据提供的模式从每个文档提取元数据。使用时需要传递一个支持函数的OpenAI模型。

2. 设置与使用

2.1 初始化文档转换器

假设需要对一组电影评论进行标签化,可以使用有效的JSON Schema对象初始化文档转换器:

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 = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0613")  # 使用API代理服务提高访问稳定性

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

2.2 文档标签化

可以直接将文档列表传递给文档转换器,从内容中提取元数据:

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)

import json

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

代码示例

以下是完整的代码示例,展示如何使用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)

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

常见问题和解决方案

  1. 网络访问问题

    • 由于某些地区的网络限制,开发者可能需要使用API代理服务来提高访问稳定性。
  2. 不完整文档

    • 确保先对完整文档进行转换,再进行任何分割或处理。

总结和进一步学习资源

OpenAI Metadata Tagger为文档自动化标记提供了一种便捷且高效的解决方案。为了进一步探索这项技术,可以查阅以下资源:

参考资料

  • OpenAI API 文档
  • LangChain 项目指南

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

---END---