本地大模型编程实战(04)给文本自动打标签

文章目录

    • 准备
    • 实例化本地大模型
    • 情感分析
    • 更精细的控制
    • 总结
    • 代码


使用本地大模型可以根据需要给文本打标签,本文介绍了如何基于 langchain 和本地部署的大模型给文本打标签。

本文使用 llama3.1 作为本地大模型,它的性能比非开源大模型要查一下,不过在我们可以调整提示词后,它也基本能达到要求。

准备

在正式开始撸代码之前,需要准备一下编程环境。

  1. 计算机
    本文涉及的所有代码可以在没有显存的环境中执行。 我使用的机器配置为:

    • CPU: Intel i5-8400 2.80GHz
    • 内存: 16GB
  2. Visual Studio Code 和 venv
    这是很受欢迎的开发工具,相关文章的代码可以在 Visual Studio Code 中开发和调试。 我们用 pythonvenv 创建虚拟环境, 详见:
    在Visual Studio Code中配置venv。

  3. Ollama
    Ollama 平台上部署本地大模型非常方便,基于此平台,我们可以让 langchain 使用 llama3.1qwen2.5 等各种本地大模型。详见:
    在langchian中使用本地部署的llama3.1大模型 。

实例化本地大模型

from langchain_ollama import ChatOllama
llm = ChatOllama(model="llama3.1",temperature=0.2,verbose=True)

情感分析

下面的代码定义了一个类 Classification 用来限定大模型对文本打标签后的格式。大模型需要给文本打如下三个标签:

  • sentiment/情绪: positive/积极的,negative/消极的
  • aggressiveness/攻击性: 以1-10代表
  • language/语言: 文本的语言
def simple_control(s):tagging_prompt = ChatPromptTemplate.from_template("""Extract the desired information from the following passage.Only extract the properties mentioned in the 'Classification' function.Passage:{input}""")# 指定​​ Pydantic 模型控制返回内容格式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")llm_structured = llm.with_structured_output(Classification)prompt = tagging_prompt.invoke({"input": s})response = llm_structured.invoke(prompt)return response.model_dump()

我们测试一下:

s = "I'm incredibly glad I met you! I think we'll be great friends!"
result = simple_control(s)
print(f'result:\n{result}')
{'sentiment': 'positive', 'aggressiveness': 1, 'language': 'English'}
s = "Estoy muy enojado con vos! Te voy a dar tu merecido!"
result = simple_control(s)
print(f'result:\n{result}')
{'sentiment': 'negative', 'aggressiveness': 10, 'language': 'Spanish'}

更精细的控制

下面我们尝试对打标签的结果进行更加精细的控制:

  • sentiment/情绪: happy,neutral,sad 中的一种
  • aggressiveness/攻击性: 以1-10代表
  • language/语言: English,Spanish,Chinese 中的一种

提示词不需要做改变,我们只是修改了 Classification

def finer_control(s):    """官网使用OpenAI,我们使用的是本地大模型。直接用官网的代码效果不好:sentiment无法按预期标记出happy,neutral,sad,依然只能标记出:positive、negative;aggressiveness的值一直为0。"""# 指定​​ Pydantic 模型控制返回内容格式class Classification(BaseModel):sentiment: str = Field(description="The sentiment of the text,it must be one of happy,neutral,sad")aggressiveness: int = Field(description="The aggressive of the text,it must be one of 1,2,3,4,5,6,7,8,9,10,the higher the number the more aggressive")language: str = Field(description="The language the text is written in,it must be one of English,Spanish,Chinese")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_structured = llm.with_structured_output(Classification)prompt = tagging_prompt.invoke({"input": s})response = llm_structured.invoke(prompt)return response.model_dump()

我们来测试一下:

s = "I'm incredibly glad I met you! I think we'll be great friends!"
result = finer_control(s)
print(f'finer_control result:\n{result}')
{'sentiment': 'happy', 'aggressiveness': 1, 'language': 'English'}
s = "Weather is ok here, I can go outside without much more than a coat"
result = finer_control(s)
print(f'finer_control result:\n{result}')
{'sentiment': 'neutral', 'aggressiveness': 5, 'language': 'English'}
s="今天的天气糟透了,我什么都不想干!"
result = finer_control(s)
print(f'finer_control result:\n{result}')
{'sentiment': 'sad', 'aggressiveness': 10, 'language': 'Chinese'}

总结

我们可以看到,使用本地部署的 llama3.1 给文本打标签的能力还可以,我想这种本地部署方案可以解决一般的情感分析等给文本打标签的任务。

代码

本文涉及的所有代码以及相关资源都已经共享,参见:

  • github
  • gitee

参考:

  • Classify Text into Labels

🪐祝好运🪐

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/68389.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

视频外绘技术总结:Be-Your-Outpainter、Follow-Your-Canvas、M3DDM

Diffusion Models专栏文章汇总:入门与实战 前言:视频Inpaint的技术很火,但是OutPaint却热度不高,这篇博客总结比较经典的几篇视频Outpaint技术。其实Outpaint在runway等工具上很火,可是学术界对此关注比较少,博主从这三年的顶会中找到了最具代表性的三篇论文解读。 目录 …

Java对象注入的常见方式

在 Java 中,对象注入(依赖注入,Dependency Injection)是实现松耦合设计的重要方式,常见的有以下几种实现形式: 1. 构造器注入(Constructor Injection) 通过类的构造函数注入依赖对象…

【数据结构】 并查集 + 路径压缩与按秩合并 python

目录 前言模板朴素实现路径压缩按秩合并按树高为秩按节点数为秩 总结 前言 并查集的基本实现通常使用森林来表示不同的集合,每个集合用一棵树表示,树的每个节点有一个指向其父节点的指针。 如果一个节点是它自己的父节点,那么它就是该集合的代…

低代码系统-产品架构案例介绍、得帆云(八)

产品名称 得帆云DeCode低代码平台-私有化 得帆云DeMDM主数据管理平台 得帆云DeCode低代码平台-公有云 得帆云DePortal企业门户 得帆云DeFusion融合集成平台 得帆云DeHoop数据中台 名词 概念 云原生 指自己搭建的运维平台,区别于阿里云、腾讯云 Dehoop 指…

.NET 8 项目 Docker 方式部署到 Linux 系统详细操作步骤

本文将详细介绍如何将一个 .NET 8 项目通过 Docker 部署到 Linux 系统中。以下步骤包括从项目的创建、Dockerfile 的编写、镜像构建、到最后在 Linux 上的容器运行。 1. 环境准备 在开始之前,请确保你已经具备以下环境: Linux 系统(如 Ubu…

【PyTorch】5.张量索引操作

目录 1. 简单行、列索引 2. 列表索引 3. 范围索引 4. 布尔索引 5. 多维索引 个人主页:Icomi 在深度学习蓬勃发展的当下,PyTorch 是不可或缺的工具。它作为强大的深度学习框架,为构建和训练神经网络提供了高效且灵活的平台。神经网络作为…

springboot 动态线程池

在Spring Boot中,可以使用ThreadPoolTaskExecutor类来创建动态线程池。以下是一个示例: 首先,需要在配置文件中配置线程池的属性,例如最小线程数、最大线程数、线程存活时间等。可以在application.properties或application.yml中…

强化学习 - 基于策略搜索和策略优化: 高斯策略

最近在做毕设需要用强化学习来做控制,对强化学习的知识点做一下总结。 高斯策略 高斯策略属于强化学习中的基于策略优化的分支(Policy Optimization),尤其是策略梯度方法(Policy Gradient Methods) 的一部…

基于微信小程序高校课堂教学管理系统 课堂管理系统微信小程序(源码+文档)

目录 一.研究目的 二.需求分析 三.数据库设计 四.系统页面展示 五.免费源码获取 一.研究目的 困扰管理层的许多问题当中,高校课堂教学管理也是不敢忽视的一块。但是管理好高校课堂教学又面临很多麻烦需要解决,如何在工作琐碎,记录繁多的情况下将高校课堂教学的当前情况反…

论文阅读笔记:VMamba: Visual State Space Model

论文阅读笔记:VMamba: Visual State Space Model 1 背景2 创新点3 方法4 模块4.1 2D选择性扫描模块(SS2D)4.2 加速VMamba 5 效果5.1 和SOTA方法对比5.2 SS2D和自注意力5.3 有效感受野5.4 扫描模式 论文:https://arxiv.org/pdf/240…

【文星索引】搜索引擎项目测试报告

目录 一、项目背景二、 项目功能2.1 数据收集与索引2.2 API搜索功能2.3 用户体验与界面设计2.4 性能优化与维护 三、测试报告3.1 功能测试3.2 界面测试3.3 性能测试3.4 兼容性测试3.5 自动化测试 四、测试总结4.1 功能测试方面4.2 性能测试方面4.3 用户界面测试方面 一、项目背…

DBO-高斯回归预测matlab

蜣螂优化算法(Dung Beetle Optimizer, DBO)是一种新型的群智能优化算法,在2022年底提出,主要是受蜣螂的的滚球、跳舞、觅食、偷窃和繁殖行为的启发。 本次研究使用的是 Excel 格式的股票预测数据。数据集按照 8:1:1 的比例&#x…

MySQL篇之对MySQL进行参数优化,提高MySQL性能

1. MySQL参数优化说明 MySQL 参数调优是提高数据库性能的重要手段之一。通过调整 MySQL 的配置参数,可以优化查询速度、提升并发处理能力、减少资源消耗等。 MySQL 的性能优化涉及到多个方面,包括内存管理、磁盘 I/O、查询优化、连接管理、复制配置等。…

8621 二分查找

SCAU数据结构OJ第五章 文章目录 8621 二分查找 8621 二分查找 Description 编写Search_Bin函数,实现在一个递增有序数组ST中采用折半查找法确定元素位置的算法. 输入格式 第一行: 元素个数n 第二行:依次输入n个元素的值(有序) 第…

差分等长的原理

差分等长是指在设计差分信号传输线路时,保证两条差分线的长度尽量一致,长度之差在一个合理的范围内。这是为了确保两个差分信号时刻保持相反极性,减少共模分量,从而提高信号传输的质量。 在差分信号传输中,两条差分线…

Autogen_core: Reflection

目录 代码代码逻辑解释:数据类定义:CoderAgent 类:ReviewerAgent 类:主程序: 完成的功能: 代码 from dataclasses import dataclassdataclass class CodeWritingTask:task: strdataclass class CodeWritin…

我们需要有哪些知识体系,知识体系里面要有什么哪些内容?

01、管理知识体系的学习知识体系 主要内容: 1、知识管理框架的外部借鉴、和自身知识体系的搭建; 2、学习能力、思维逻辑能力等的塑造; 3、知识管理工具的使用; 4、学习资料的导入和查找资料的渠道; 5、深层关键的…

java后端之事务管理

Transactional注解:作用于业务层的方法、类、接口上,将当前方法交给spring进行事务管理,执行前开启事务,成功执行则提交事务,执行异常回滚事务 spring事务管理日志: 默认情况下,只有出现Runti…

Sora学习

openai 12天的发布会 remix:对视频处理 可以改变视频的元素和内容,打开一扇门的例子(打开门是太空,打开门是丛林) recut:重新生成或者重新剪辑,给一个视频前后做扩展 storyboard:可以对每一帧进行剪辑和生成新的 …

Python 字典:快速掌握高效的数据存储方式

文章目录 一、什么是字典?字典的定义二、字典的基本操作1. 访问字典的值2. 修改字典中的值3. 添加新的键值对4. 删除键值对5. 获取字典长度三、字典的遍历1. 遍历键2. 遍历值3. 遍历键值对四、字典的常用方法1. `keys()`:获取所有键2. `values()`:获取所有值3. `items()`:获…