基于 BERT 微调一个意图识别(Intent Classification)模型

基于 BERT 微调一个意图识别(Intent Classification)模型,你的意图类别包括:

  • 查询天气
  • 获取新闻咨询
  • 想听音乐
  • 想添加备忘
  • 查询备忘
  • 获取家政服务
  • 结束对话
  • 增加音量
  • 减小音量
  • 其他

具体实现步骤(详细版)

1. 准备你的数据集

你的数据集应该是这样的格式(通常是 CSV 或 JSON):

textlabel
今天上海天气怎么样?查询天气
给我放首轻音乐想听音乐
新闻头条是什么?获取新闻咨询
记一下明天开会想添加备忘
查看一下我的备忘录查询备忘
叫个钟点工来打扫获取家政服务
不聊了,再见结束对话
声音大一点增加音量
小点声减小音量
乱说的话其他

每一行是一个用户输入(text)和它对应的意图(label)。

注意:BERT只能识别数字标签,所以需要把意图文字映射成数字,比如:

label2id = {"查询天气": 0,"获取新闻咨询": 1,"想听音乐": 2,"想添加备忘": 3,"查询备忘": 4,"获取家政服务": 5,"结束对话": 6,"增加音量": 7,"减小音量": 8,"其他": 9
}
id2label = {v: k for k, v in label2id.items()}

2. 安装需要的库
pip install transformers datasets torch scikit-learn

3. 代码:BERT意图识别模型训练
import torch
from datasets import load_dataset, Dataset
from transformers import BertTokenizer, BertForSequenceClassification, Trainer, TrainingArguments
from sklearn.model_selection import train_test_split# 1. 准备数据
texts = ["今天上海天气怎么样?", "给我放首轻音乐", "新闻头条是什么?","记一下明天开会", "查看一下我的备忘录", "叫个钟点工来打扫","不聊了,再见", "声音大一点", "小点声", "乱说的话"
]
labels = [0, 2, 1, 3, 4, 5, 6, 7, 8, 9]  # 使用数字标签# 切分成训练集和验证集
train_texts, val_texts, train_labels, val_labels = train_test_split(texts, labels, test_size=0.2, random_state=42
)# 2. 加载分词器
tokenizer = BertTokenizer.from_pretrained("bert-base-chinese")# 3. 对数据进行编码
def tokenize_function(texts):return tokenizer(texts, padding="max_length", truncation=True, max_length=32)train_encodings = tokenize_function(train_texts)
val_encodings = tokenize_function(val_texts)# 4. 构建 PyTorch Dataset
class IntentDataset(torch.utils.data.Dataset):def __init__(self, encodings, labels):self.encodings = encodingsself.labels = labelsdef __len__(self):return len(self.labels)def __getitem__(self, idx):item = {key: torch.tensor(val[idx]) for key, val in self.encodings.items()}item["labels"] = torch.tensor(self.labels[idx])return itemtrain_dataset = IntentDataset(train_encodings, train_labels)
val_dataset = IntentDataset(val_encodings, val_labels)# 5. 加载预训练BERT分类模型
model = BertForSequenceClassification.from_pretrained("bert-base-chinese", num_labels=10)# 6. 设置训练参数
training_args = TrainingArguments(output_dir="./results",num_train_epochs=5,per_device_train_batch_size=8,per_device_eval_batch_size=8,evaluation_strategy="epoch",save_strategy="epoch",logging_dir="./logs",logging_steps=10,learning_rate=2e-5,
)# 7. 用Trainer训练
trainer = Trainer(model=model,args=training_args,train_dataset=train_dataset,eval_dataset=val_dataset,
)trainer.train()

4. 训练好以后,保存模型
model.save_pretrained("./intent_bert_model")
tokenizer.save_pretrained("./intent_bert_model")

5. 推理(用来预测意图)
from transformers import pipeline# 加载保存好的模型
classifier = pipeline("text-classification", model="./intent_bert_model", tokenizer="./intent_bert_model", device=0 if torch.cuda.is_available() else -1)# 测试
text = "帮我叫个保洁阿姨"
prediction = classifier(text)
predicted_label = int(prediction[0]["label"].split("_")[-1])  # 如果是默认模型格式
print(f"预测的标签是:{id2label[predicted_label]}")

补充说明

  • 数据集:建议你准备更多的数据样本,每个意图至少几十条,效果更好。
  • 小批量数据:小批量很少时,可以使用数据增强方法(例如同义词替换、轻微打乱顺序等)扩充数据。
  • 模型优化:可以调整学习率、batch size、epoch数来进一步优化效果。
  • 多意图识别:如果未来一个句子可能有多个意图,需要做成多标签分类(现在是单标签分类)。

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

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

相关文章

SSM书籍管理(环境搭建)

整合SSM:SpringSpringMVCMybatis 环境要求:IDEA、MySQL5、Tomcat9、Maven3 数据库搭建 数据库准备以下数据用于后续实验:创建一个ssmbuild数据库,表books,该表有4个字段,并且插入3条数据用于后续。 CRE…

API文档生成与测试工具推荐

在API开发过程中,文档的编写和维护是一项重要但繁琐的工作。为了提高效率,许多开发者会选择使用API文档自动生成工具或具备API文档生成功能的API门户产品。选择能导入API文档的工具生成测试脚本, 本文将全面梳理市面上符合OpenAPI 3.0规范的文档生成工具…

linux修改环境变量

添加环境变量注意事项。 vim ~/.bashrc 添加环境变量时,需要source ~/.bashrc后才能有效。同时只对当前shell窗口有效,当打开另外的shell窗口时,需要重新source才能起效。 1.修改bashrc文件后 2.source后打开另一个shell窗口则无效&#xff…

springboot项目中,MySQL数据库转达梦数据库

前言 前段时间,公司要求要把某几个项目的数据库换成达梦数据库,说是为了国产化。我就挺无语的,三四年的项目了,现在说要换数据库。我一开始以为这个达梦数据库应该是和TIDB差不多的。 我之前做的好几个项目部署到测试服、正式服…

【Quest开发】透视环境下抠出身体并能遮挡身体上的服装

软件:Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72 硬件:Meta Quest3 仅针对urp管线 博主搞这个主要是想做现实里的人的变身功能,最后效果如下 可以看到虽然身体是半透明的,但是裙子依旧被完全遮挡了 原理是参考…

前端安全中的XSS(跨站脚本攻击)

XSS 类型 存储型 XSS 特征:恶意脚本存储在服务器(如数据库),用户访问受感染页面时触发。场景:用户评论、论坛帖子等持久化内容。影响范围:所有访问该页面的用户。 反射型 XSS 特征:恶意脚本通过…

(第三篇)Springcloud之Ribbon负载均衡

一、简介 1、介绍 Spring Cloud Ribbon是Netflix发布的开源项目,是基于Netflix Ribbon实现的一套客户端负载均衡的工具。主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时&…

大模型——使用coze搭建基于DeepSeek大模型的智能体实现智能客服问答

大模型——使用coze搭建基于DeepSeek大模型的智能体实现智能客服问答 本章实验完全依托于coze在线平台,不需要本地部署任何应用。 实验介绍 1.coze介绍 扣子(coze)是新一代 AI 应用开发平台。无论你是否有编程基础,都可以在扣子上快速搭建基于大模型的各类 AI 应用,并…

【计算机视觉】目标检测:深度解析YOLOv9:下一代实时目标检测架构的创新与实战

深度解析YOLOv9:下一代实时目标检测架构的创新与实战 架构演进与技术创新YOLOv9的设计哲学核心创新解析1. 可编程梯度信息(PGI)2. 广义高效层聚合网络(GELAN)3. 轻量级设计 环境配置与快速开始硬件需求建议详细安装步骤…

【SpringBoot】基于MybatisPlus的博客管理系统(1)

1.准备工作 1.1数据库 -- 建表SQL create database if not exists java_blog_spring charset utf8mb4;use java_blog_spring; -- 用户表 DROP TABLE IF EXISTS java_blog_spring.user_info; CREATE TABLE java_blog_spring.user_info(id INT NOT NULL AUTO_INCREMENT,user_na…

贵族运动项目有哪些·棒球1号位

10个具有代表性的贵族运动: 高尔夫 马术 网球 帆船 击剑 斯诺克 冰球 私人飞机驾驶 深海潜水 马球 贵族运动通常指具有较高参与成本、历史底蕴或社交属性的运动,而棒球作为一项大众化团队运动,与典型贵族运动的结合较为罕见。从以下几个角度探…

【Tauri2】035——sql和sqlx

前言 这篇就来看看插件sql SQL | Taurihttps://tauri.app/plugin/sql/ 正文 准备 添加依赖 tauri-plugin-sql {version "2.2.0",features ["sqlite"]} features可以是mysql、sqlite、postsql 进去features看看 sqlite ["sqlx/sqlite&quo…

全链路自动化AIGC内容工厂:构建企业级智能内容生产系统

一、工业化AIGC系统架构 1.1 生产流程设计 [需求输入] → [创意生成] → [多模态生产] → [质量审核] → [多平台分发] ↑ ↓ ↑ [用户反馈] ← [效果分析] ← [数据埋点] ← [内容投放] 1.2 技术指标要求 指标 标准值 实现方案 单日产能 1,000,000 分布式推理集群 内容合规率…

是否想要一个桌面哆啦A梦的宠物

是否想拥有一个在指定时间喊你的桌面宠物呢(手动狗头) 如果你有更好的想法,欢迎提出你的想法。 是否考虑过跟开发者一对一,提出你的建议(狗头)。 https://wwxc.lanzouo.com/idKnJ2uvq11c 密码:bbkm

Unity AI-使用Ollama本地大语言模型运行框架运行本地Deepseek等模型实现聊天对话(二)

一、使用介绍 官方网页:Ollama官方网址 中文文档参考:Ollama中文文档 相关教程:Ollama教程 使用版本:Unity 2022.3.53f1c1、Ollama 0.6.2 示例模型:llama3.2 二、运行示例 三、使用步骤 1、创建Canvas面板 具体…

从 BERT 到 GPT:Encoder 的 “全局视野” 如何喂饱 Decoder 的 “逐词纠结”

当 Encoder 学会 “左顾右盼”:Decoder 如何凭 “单向记忆” 生成丝滑文本? 目录 当 Encoder 学会 “左顾右盼”:Decoder 如何凭 “单向记忆” 生成丝滑文本?引言一、Encoder vs Decoder:核心功能与基础架构对比1.1 本…

数据结构入门:详解顺序表的实现与操作

目录 1.线性表 2.顺序表 2.1概念与结构 2.2分类 2.2.1静态顺序表 2.2.2动态顺序表 3.动态顺序表的实现 3.1.SeqList.h 3.2.SeqList.c 3.2.1初始化 3.2.2销毁 3.2.3打印 3.2.4顺序表扩容 3.2.5尾部插入及尾部删除 3.2.6头部插入及头部删除 3.2.7特定位置插入…

LeetCode热题100--53.最大子数组和--中等

1. 题目 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组是数组中的一个连续部分。 示例 1: 输入:nums [-2,1,-3,4,-1,2,1,-5,4] 输出&…

python:练习:2

1.题目:统计一篇英文文章中每个单词出现的次数,并按照出现次数排序输出。 示例输入: text "Python is an interpreted, high-level, general-purpose programming language. Created by Guido van Rossum and first released in 1991…

AI Agent 孵化器?开源框架CAMEL

简介 CAMEL(Communicative Agents for Mind Exploration of Large Scale Language Model Society)是一个开源框架,大语言模型多智能体框架的先驱者。旨在通过角色扮演和自主协作,探索大语言模型(LLM)在多智…