大语言模型如何“读懂”情绪?LangChain+千问实现情感分析系统

使用LangChain与Ollama实现情感分析智能体:从0到 1实现

情感分析作为NLP的重要应用之一,广泛应用于社交媒体分析、舆情监控、产品评价等领域。情感分析的目标是通过分析文本内容,判断其中的情感倾向(正向、负向或中性),并提供相应的置信度和推理依据。

本文将详细介绍如何利用LangChain框架和Ollama模型实现一个情感分析智能体。通过代码解析和功能分析,我们将深入探讨其实现原理,并结合实际案例展示其应用效果。

完整代码放在下方二维码了,免费领取

实现目标

构建一个基于LangChain框架的情感分析智能体,能够对输入文本进行情感分类,并返回结构化的分析结果。具体功能包括:

  • 情感分类:将输入文本的情感倾向分为“正向”、“负向”或“中性”。
  • 置信度评估:提供模型对分类结果的置信度评分,范围为0到1。
  • 推理过程:生成模型对文本情感的分析推理过程,帮助用户理解分类结果的依据。

实现这一目标的核心工具包括:

  • LangChain:一个模块化、可扩展的NLP框架,支持多种模型和功能的快速集成。
  • Ollama:一个轻量级的LLM(大语言模型)框架,支持本地部署和自定义模型。
  • Pydantic:用于数据结构化的库,确保输出结果的格式统一和可验证。

先看下效果

image-20250228171002158

代码分析

导入库与模型初始化

from langchain_community.llms import Ollama
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser, PydanticOutputParser
from langchain_core.pydantic_v1 import BaseModel, Field
from typing import Literal

model = Ollama(model="qwen2.5:7b", base_url="http://192.168.1.1:11434")

Ollama:这里导入了Ollama模型,并指定模型名称为“qwen2.5:7b”。需要注意的是,base_url指向本地Ollama服务的地址,这意味着模型需要在本地运行。
LangChain组件:导入了ChatPromptTemplate用于构建提示模板,StrOutputParser和PydanticOutputParser用于处理模型输出。

数据结构定义

为了确保情感分析的结果能以统一且可验证的结构返回,我们使用Pydantic库定义了一个数据模型来存储情感分析的输出。

class SentimentAnalysisResult(BaseModel):
    """情感分析结果数据结构化定义"""
    sentiment: Literal["正向", "负向", "中性"] = Field(
        ..., description="情感分类结果"
    )
    confidence: float = Field(
        ..., description="模型置信度,范围0-1", ge=0, le=1
    )
    reasoning: str = Field(
        ..., description="模型的分析推理过程"
    )

SentimentAnalysisResult:这是一个基于Pydantic的模型类,用于定义情感分析结果的结构。

  • sentiment:情感分类结果,取值范围为“正向”、“负向”或“中性”。
  • confidence:模型对分类结果的置信度,范围为0到1。
  • reasoning:模型的推理过程,用于解释分类结果。

情感分析智能体类

我们定义了一个情感分析智能体类,负责初始化模型、处理用户输入并返回分析结果。

class SentimentAnalysisAgent:
    def__init__(self, model_name="llama3"):
        """初始化情感分析智能体"""
        self.model_name = model_name
        self.parser = PydanticOutputParser(pydantic_object=SentimentAnalysisResult)
        # 构建系统提示模板
        self.prompt_template = ChatPromptTemplate.from_messages([
            ("system", """你是一个专业的情感分析AI助手。请严格遵循以下规则:
1. 分析用户输入的文本情感
2. 返回JSON格式:{{"sentiment":"正向/中性/负向", "confidence":0.0-1.0, "reasoning":"分析原因"}}
3. 置信度保留3位小数
4. 必须使用中文进行推理"""),
            ("user", "待分析文本:{input}")
        ])
        # 构建处理链
        self.chain = (
            self.prompt_template
            | model  # 绑定Ollama模型
            | StrOutputParser()  # 获取原始字符串输出
        )

在初始化情感分析智能体时,我们指定了模型的名称,并通过ChatPromptTemplate构建了一个聊天提示模板,用于向Ollama模型提供用户输入的文本。PydanticOutputParser用于将模型的输出解析成SentimentAnalysisResult数据结构。

分析方法

def analyze(self, text: str) -> SentimentAnalysisResult:
    """执行情感分析"""
    # 执行处理链
    raw_output = self.chain.invoke({"input": text})
    try:
        # 解析模型输出
        return self.parser.parse(raw_output)
    except Exception as e:
        # 错误处理(可根据需要扩展)
        raise ValueError(f"解析失败: {e}\n原始输出: {raw_output}")

在分析过程中,我们通过执行处理链来生成原始输出,并将其解析为结构化的情感分析结果。如果解析过程中出现错误,将抛出异常,供开发者排查。

使用示例

if __name__ == "__main__":
    # 初始化智能体(首次使用需要加载模型,可能需要较长时间)
    agent = SentimentAnalysisAgent(model_name="llama3")
    # 测试用例
    test_cases = [
        "我刚刚拿到了梦寐以求的录取通知书了,太开心了!",
        "这家餐厅的服务糟糕透顶,再也不会来了。",
        "根据最新数据统计,本市人口达到1000万。",
        "这个产品既有优点也有缺点,需要进一步评估。"
    ]
    # 执行分析
    for text in test_cases:
        print(f"分析文本:{text}")
        try:
            result = agent.analyze(text)
            print(f"情感:{result.sentiment}")
            print(f"置信度:{result.confidence:.3f}")
            print(f"推理:{result.reasoning}\n")
        except Exception as e:
            print(f"错误:{str(e)}\n")

在示例中,我们对几个测试用例执行情感分析,并输出分类结果、置信度和推理过程。

效果

分析文本:我刚刚拿到了梦寐以求的录取通知书了,太开心了!
情感:正向
置信度:0.985
推理:用户表达了获得梦寐以求的通知书后的极度开心情绪,因此可以判断为正向情感。

分析文本:这家餐厅的服务糟糕透顶,再也不会来了。
情感:负向
置信度:0.982
推理:用户对餐厅服务的评价非常负面,并明确表示不会再次光顾,这表明其情绪较为消极。

分析文本:根据最新数据统计,本市人口达到1000万。
情感:中性
置信度:0.987
推理:该陈述仅提供了统计数据,并未包含任何情感色彩或态度表达,因此属于中性情感。

分析文本:这个产品既有优点也有缺点,需要进一步评估。
情感:中性
置信度:0.856
推理:这句话表达了一个客观的观点,既提到了产品的正面和负面因素,但没有表现出明显的积极或消极情感倾向,因此判断为中性。

总结

通过本文的介绍,我们详细解析了如何利用LangChain框架和Ollama模型实现情感分析智能体。该实现不仅能够对文本进行情感分类,还能提供置信度和推理过程,为用户提供了全面的情感分析结果。

如何零基础入门 / 学习AI大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高

那么我作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,希望可以帮助到更多学习大模型的人!至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

👉 福利来袭CSDN大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

全套AGI大模型学习大纲+路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

read-normal-img

640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

👉学会后的收获:👈
基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

👉 福利来袭CSDN大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈

img

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值