当前位置: 首页 > news >正文

Langchian - 实现文本分类实际应用

文本分类是 自然语言处理 领域中的一个重要任务,旨在将文本数据自动归类到预定义的类别中。 它是实现信息检索、智能推荐、情感分析等应用的基础技术之一。

以下程序实现了 文本分类任务,适用于:

  • 社交媒体情绪分析
  • 客服对话情感识别
  • 多语言内容自动检测
  • 用户评论质量评估(是否攻击性强)

1.加载配置并初始化大模型

import os
from dotenv import load_dotenv
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from pydantic.v1 import BaseModel, Fieldload_dotenv()
llm = ChatOpenAI(model=os.getenv("MODEL"),api_key=os.getenv("OPENAI_API_KEY"),base_url=os.getenv("BASE_URL")
)

2.定义文本分类的数据模型

定义一个 TextClassification 模型,用于指定输出格式:
sentiment:情感倾向(如“愤怒”、“高兴”等)
aggressiveness:攻击性评分(1~10 分)
language:识别使用的语言(如“中文”、“英语”)

class TextClassification(BaseModel):sentiment: str = Field(description="文本的情感")aggressiveness: int = Field(description="描述文本的攻击性,数字越大表示越攻击性")language: str = Field(description="文本使用的语言")

3.构建提示模板

定义一个系统提示,要求模型只提取与 TextClassification 相关的信息。
{input} 是占位符,将在运行时被实际文本替换。

prompt = ChatPromptTemplate.from_template("""从以下段落中提取所需信息。只提取'TextClassification'类中提到的属性。段落:{input}"""
)

4.构建执行链并执行输出

使用 LangChain 的管道操作符 | 构建一个链式流程。
with_structured_output 强制模型输出符合 TextClassification 结构的 JSON 数据。

调用链处理该文本,并将结果解析为 TextClassification 类型对象。

chain = prompt | llm.with_structured_output(schema=TextClassification)input_text = "你这个小孩儿,太不懂事了,做出的事情实在让我生气!"
result: TextClassification = chain.invoke({'input': input_text})
print(result)

执行结果:

sentiment='negative' aggressiveness=3 language='Chinese'

如果你需要扩展支持更多分类维度(如主题、意图识别等),只需在 TextClassification 模型中添加字段即可。

class TextClassification(BaseModel):"""定义一个Pydantic的数据模型,未来需要根据该类型,完成文本的分类"""# 文本的情感倾向,预期为字符串类型sentiment: str = Field(..., enum=["happy", "neutral", "sad"], description="文本的情感")# 文本的攻击性,预期为1到5的整数aggressiveness: int = Field(..., enum=[1, 2, 3, 4, 5], description="描述文本的攻击性,数字越大表示越攻击性")# 文本使用的语言,预期为字符串类型language: str = Field(..., enum=["spanish", "english", "french", "中文", "italian"], description="文本使用的语言")input_text = "Estoy increiblemente contento de haberte conocido! Creo que seremos muy buenos amigos!"

执行结果:

sentiment='happy' aggressiveness=1 language='spanish'

http://www.xdnf.cn/news/938935.html

相关文章:

  • 【Java学习笔记】System类
  • vite ts 配置使用@ 允许js
  • 基于SpringBoot实现的大创管理系统设计与实现【源码+文档】
  • 「Java基本语法」标识符、关键字与常量
  • Java编程之组合模式
  • Python项目的构建和部署方案推荐
  • remote display server is not supported (e.g. Wayland)
  • CentOS-7 通过 NFS 实现服务器之间的文件共享
  • 深入了解NIO的优化实现原理
  • 二叉树-226.翻转链表-力扣(LeetCode)
  • Python学习(7) ----- Python起源
  • cookie session和token的区别
  • 突破同步训练瓶颈!AReaL如何实现大规模异步强化学习系统的高效语言推理?
  • 树的基本概念与操作:构建数据结构的层级世界
  • leetcode2368. 受限条件下可到达节点的数目-medium
  • JDK8新特性之Steam流
  • 手动实现C#ArrayList容器
  • Boost ASIO 库深入学习(2)
  • Redis持久化策略:RDB与AOF详解
  • shell脚本 --案例实操
  • cognee,有望替代 RAG, 简单了解一下
  • 服务网格技术深度解析:Istio vs Linkerd的选型对比
  • 【Self-Ask with Search Agent机制概述】利用TavilyAnswer实现搜索代理
  • 【文件传输脚本】
  • XSS攻击防御全指南:核心防护技巧
  • UVM的断言assert详谈
  • 【GESP真题解析】第 17 集 GESP 三级 2024 年 12 月编程题 2:打印数字
  • Linux 基础IO(下)
  • Linux 内核内存管理子系统全面解析与体系构建
  • 基于cornerstone3D的dicom影像浏览器 第三十章 心胸比例测量工具CTRTool