利用OpenAI Metadata Tagger自动化元数据提取提升文档管理效率

103 阅读3分钟

引言

在大规模文档管理中,给文档标注结构化的元数据(如标题、语调或长度)是至关重要的。这不仅有助于后续更精准的相似性搜索,也提升了整体检索效率。然而,手动执行这一过程既费时又费力。为了解决这一挑战,本文将介绍如何使用OpenAI Metadata Tagger自动化提取元数据,帮助开发者更轻松地管理大量文档。

主要内容

OpenAI Metadata Tagger简介

OpenAI Metadata Tagger是一个文档转换器,能够根据预定义的模式从文档中自动提取元数据。它使用了可配置的OpenAI Functions驱动的链,因此,若使用自定义的LLM实例,必须是支持函数的OpenAI模型。需要注意的是,这个文档转换器在处理完整文档时效果最佳,因此建议在进行任何其他拆分或处理前先执行此操作。

如何配置元数据提取

假设我们想要索引一组电影评论。我们可以通过以下方式初始化文档转换器,使用有效的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"],
}

# 必须是支持函数的OpenAI模型
llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0613")  # 使用API代理服务提高访问稳定性

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)

import json

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

定制化和Pydantic模式

文档转换器还支持通过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)

常见问题和解决方案

  • 网络限制:在使用API时,由于某些地区的网络限制,开发者可能需要考虑使用API代理服务以提高访问稳定性。
  • 文档完整性:确保在进行任何拆分或处理前使用完整文档以获得最佳效果。

总结和进一步学习资源

通过OpenAI Metadata Tagger,开发者可以显著提高文档管理和索引的效率。本文仅触及了该工具的一部分功能,以下是一些进一步学习资源:

参考资料

  • Langchain官方文档
  • OpenAI API官方文档
  • Pydantic官方文档

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

---END---