news 2026/4/22 23:37:25

大语言模型推理能力全解析:从情感分析到主题识别,一行提示搞定NLP任务(附代码)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大语言模型推理能力全解析:从情感分析到主题识别,一行提示搞定NLP任务(附代码)

摘要

传统机器学习中,情感分析、命名实体识别、主题分类等任务需要分别训练和部署多个模型,耗时耗力。而大语言模型(LLM)凭借其强大的推理能力,只需通过提示词就能快速完成这些任务。本文基于 OpenAI 官方课程,系统讲解如何使用 LLM 进行文本推理。你将学习:情感二分类(正面/负面)、多情绪识别、愤怒检测、商品与品牌提取、单提示多任务联合抽取、主题列表生成、零样本主题分类与新闻预警系统。所有代码均基于 gpt-3.5-turbo 模型。

适用人群 / 前置知识

适用人群:希望快速实现 NLP 任务的开发者、数据科学家、产品经理;对传统 ML 流程感到繁琐的学习者。
前置知识:了解 Python 基础;能调用 OpenAI API;知道什么是提示词即可。

引言:从“训练模型”到“编写提示”

在传统机器学习时代,如果你想做三件事——判断评论情感、提取商品名称、识别用户是否愤怒——你需要:

  1. 收集三个带标签的数据集
  2. 训练三个不同的模型(可能是朴素贝叶斯、LSTM、BERT 等)
  3. 将三个模型分别部署到云端
  4. 编写三个推理接口

这个过程至少需要几天到几周。而有了大语言模型,你只需要写几个提示词,甚至一个提示词,就能在几秒内完成所有任务。这就是 LLM 在“推理”任务上的革命性优势。

本文将带你从零开始,掌握 LLM 的推理能力,涵盖:

  • 情感分类(正面/负面)
  • 情绪识别(快乐、沮丧、愤怒等)
  • 实体提取(商品名、品牌名)
  • 多任务联合抽取(一次提示获取多个字段)
  • 主题推断与零样本分类

环境准备

复用之前的辅助函数:

importopenaiimportosfromdotenvimportload_dotenv,find_dotenv _=load_dotenv(find_dotenv())openai.api_key=os.getenv('OPENAI_API_KEY')defget_completion(prompt,model="gpt-3.5-turbo"):messages=[{"role":"user","content":prompt}]response=openai.ChatCompletion.create(model=model,messages=messages,temperature=0,)returnresponse.choices[0].message["content"]

案例数据:一条灯的产品评论

lamp_review=""" Needed a nice lamp for my bedroom, and this one had additional storage and not too high of a price point. Got it fast. The string to our lamp broke during the transit and the company happily sent over a new one. Came within a few days as well. It was easy to put together. I had a missing part, so I contacted their support and they very quickly got me the missing piece! Lumina seems to me to be a great company that cares about their customers and products!! """

任务一:情感分析(正面/负面)

最简单的推理:判断评论是正面还是负面。

prompt=f""" 以下产品评论的情感是什么?评论用三重反引号分隔。 评论:```{lamp_review}``` """response=get_completion(prompt)print(response)# 输出:该产品评论的情感是正面的。

如果你只想得到一个词(方便后处理):

prompt=f""" 以下产品评论的情感是什么?用单个词回答,要么“positive”要么“negative”。 评论:```{lamp_review}``` """response=get_completion(prompt)print(response)# 输出:positive

任务二:情绪识别

除了整体情感,你可能还想知道客户表达了哪些具体情绪。

prompt=f""" 识别以下评论作者表达的情绪列表。最多包含五个项目。 将答案格式化为小写单词组成的列表,用逗号分隔。 评论:```{lamp_review}``` """response=get_completion(prompt)print(response)# 输出示例:satisfied, happy, grateful, relieved, content

任务三:愤怒检测

对于客户支持团队,快速识别愤怒的客户至关重要。

prompt=f""" 以下评论的作者是否表达了愤怒?用“yes”或“no”回答。 评论:```{lamp_review}``` """response=get_completion(prompt)print(response)# 输出:no

任务四:实体提取(商品与品牌)

提取结构化信息:购买的商品、生产公司。

prompt=f""" 从评论文本中识别以下项目: - 购买的商品 - 生产该商品的公司 将答案格式化为 JSON 对象,键名为“Item”和“Brand”。 如果信息不存在,用“unknown”作为值。 评论:```{lamp_review}``` """response=get_completion(prompt)print(response)# 输出:{"Item": "lamp", "Brand": "Lumina"}

任务五:多任务联合抽取(一个提示搞定所有)

你不需要为每个任务单独调用模型。一个提示可以同时提取情感、愤怒标记、商品、品牌。

prompt=f""" 从评论文本中识别以下项目: - 情感(positive 或 negative) - 评论者是否表达愤怒(true 或 false) - 购买的商品 - 生产该商品的公司 将答案格式化为 JSON 对象,键名为“Sentiment”、“Anger”、“Item”、“Brand”。 将 Anger 的值格式化为布尔值(true/false,不加引号)。 评论:```{lamp_review}``` """response=get_completion(prompt)print(response)# 输出示例:# {# "Sentiment": "positive",# "Anger": false,# "Item": "lamp",# "Brand": "Lumina"# }

这个 JSON 可以直接用 json.loads() 解析为 Python 字典,非常方便。

任务六:主题推断(从新闻文章中提取主题)

假设我们有一篇关于政府员工满意度调查的虚构新闻文章(代码中的 story 变量,内容提及 NASA、社会保障局等)。我们可以要求模型总结出 5 个主题。

prompt=f""" 确定以下文本中讨论的五个主题,文本用三重反引号分隔。 每个主题为一到两个词长。 将答案格式化为逗号分隔的列表。 文本:```{story}``` """response=get_completion(prompt)print(response)# 输出示例:government survey, job satisfaction, NASA, Social Security Administration, employee morale

你可以用 response.split(‘,’) 将其转换为 Python 列表。

任务七:零样本主题分类与新闻预警

假设你的新闻网站只追踪固定的几个主题:[“NASA”, “local government”, “engineering”, “employee satisfaction”, “federal government”]。你想判断一篇新文章覆盖了哪些主题。

topic_list = [“NASA”, “local government”, “engineering”, “employee satisfaction”, “federal government”]

prompt=f""" 判断以下主题列表中的每一项是否是下面文本(用三重反引号分隔)中讨论的主题。 给出答案格式为“主题: 0 或 1”,每行一个。 主题列表:{', '.join(topic_list)}文本:```{story}``` """response=get_completion(prompt)print(response)# 输出示例:# NASA: 1# local government: 0# engineering: 0# employee satisfaction: 1# federal government: 1

解析响应并创建预警:

topic_dict={}forlineinresponse.split('\n'):if': 'inline:key,val=line.split(': ')topic_dict[key]=int(val)iftopic_dict.get("NASA",0)==1:print("ALERT: New NASA story!")
注意:上面这个解析方式依赖于模型输出的固定格式。在生产环境中,更推荐要求模型输出 JSON,这样解析更稳健。

常见问题与注意事项

1. 输出格式不稳定的问题:模型可能有时输出“positive”,有时输出“Positive”,有时输出“The sentiment is
positive”。解决办法:在提示中明确指定格式(如“只输出一个词”),或使用 JSON 模式。
2. 布尔值格式:要求输出 true/false 时,明确说明“不要加引号”,否则模型可能输出字符串 “false”。
3. 零样本 vs 少样本:本文所有示例都是零样本(没有给任何示例)。如果模型表现不稳定,可以尝试在提示中加入一个示例(少样本)。
4. 推理与生成的界限:推理任务通常要求确定性输出,建议 temperature=0。生成任务(如写诗)才用较高temperature。
5. 多任务联合抽取的优势:减少 API 调用次数、降低延迟、节省成本。但提示会变长,需要测试是否依然准确。

扩展应用场景

  • 客户工单分类:自动判断工单类型(退货、咨询、投诉)、紧急程度。
  • 社交媒体监控:实时分析品牌提及的情感变化。
  • 简历解析:从简历中提取姓名、技能、工作年限。
  • 合同审查:提取关键条款、日期、责任方。

总结

推理任务提示关键词输出示例
情感二分类sentiment … as a single wordpositive
情绪列表list of emotionssatisfied, happy, grateful
愤怒检测expressing anger? yes or nono
实体提取identify Item and Brand as JSON{“Item”: “lamp”, “Brand”: “Lumina”}
多任务联合identify Sentiment, Anger, Item, Brand完整 JSON
主题提取determine five topicsNASA, job satisfaction, …
零样本分类determine whether each topic is in textNASA: 1

大语言模型的推理能力,让原本复杂的 NLP 任务变得像写一句话一样简单。你不需要再训练和部署多个模型,只需要掌握提示词的技巧,就能在几分钟内构建出实用的文本分析系统。

下一步,你可以尝试将自己的业务数据(用户反馈、客服对话、新闻文章)代入这些提示模板,看看模型能为你提取出哪些有价值的信息。下一篇文章我们将探讨“转换”能力——翻译、格式转换等,敬请期待!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 23:36:00

DriveDreamer-Policy:一种统一生成与规划的几何-落地世界-行动模型

26年4月来自极佳科技、多伦多大学和香港中文大学的论文“DriveDreamer-Policy: A Geometry-Grounded World–Action Model for Unified Generation and Planning”。 近年来,世界-动作模型(WAM)应运而生,旨在连接视觉-语言-动作&a…

作者头像 李华
网站建设 2026/4/22 23:32:43

前端开发者构建AI应用实战指南

1. 前端开发者如何构建AI应用:从入门到实战作为一名长期奋战在前端领域的开发者,我清晰地记得第一次尝试将AI能力整合进Web应用时的迷茫。面对TensorFlow.js的文档、各种API接口和模型部署选项,那种既兴奋又无从下手的感觉至今难忘。经过两年…

作者头像 李华
网站建设 2026/4/22 23:30:21

046、使用单元测试框架测试FreeRTOS任务与模块:从一次深夜调试说起

046、使用单元测试框架测试FreeRTOS任务与模块:从一次深夜调试说起 凌晨两点,示波器上的波形还在跳动。我盯着屏幕里那个偶尔丢失的传感器数据包,已经排查了三小时硬件链路,最后才发现问题出在一个自以为“足够简单”的FreeRTOS任务——它在高优先级任务频繁抢占时,漏掉了…

作者头像 李华
网站建设 2026/4/22 23:28:23

HttpServletRequest 接口/cookie/session知识点

1.这个接口生成的对象是谁封装的?1. 本质:它是一个接口HttpServletRequest 本身不是一个具体类,而是 Servlet 规范(Java EE / Jakarta EE)定义的接口。你可以理解成:Java 制定了一个 “请求说明书”&#x…

作者头像 李华
网站建设 2026/4/22 23:28:21

为什么很多人现在找 AI 工具,会先看国产入口?

最近一个挺明显的变化,是很多人找 AI 工具时,不再默认先去看国外那几个名字了。这个变化和“支持国货”关系没有那么大,更多还是使用顺序变了。大家现在更在意的是今天能不能把材料看完、把内容写完、把任务做完,而不是先围着模型…

作者头像 李华