基于PaddleNLP的端到端智能家居对话意图识别

一、基于PaddleNLP的端到端智能家居对话意图识别

0.摘要

对智能设备的对话数据进行整理,然后基于预训练模型微调的二分类/多分类端到端应用方案,使用ernie-3.0-tiny-medium-v2-zh模型,进行训练、评估、模型导出,以及预测,并提交结果。

1.比赛介绍

意图识别是指分析用户的核心需求,输出与查询输入最相关的信息,例如在搜索中要找电影、查快递、市政办公等需求,这些需求在底层的检索策略会有很大的不同,错误的识别几乎可以确定找不到能满足用户需求的内容,导致产生非常差的用户体验;在对话过程中要准确理解对方所想表达的意思,这是具有很大挑战性的任务。

意图识别的准确性能在很大程度上影响着搜索的准确性和对话系统的智能性,在本赛题中我们需要选手对中文对话进行意图识别。

2.数据集介绍

  • 训练数据:大约1.2万条中文对话
  • 测试数据:3000条无标注对话

3.提交样式

评分使用准确率进行评分,准确率值越大越好。

  • 实操方案不允许使用外部数据集,允许使用公开的外部预训练模型。
  • 实操方案需要在指定平台进行评分,提交csv格式。

提交样例:

ID,Target
1,TVProgram-Play
2,HomeAppliance-Control
3,Audio-Play
4,Alarm-Update
5,HomeAppliance-Control
6,FilmTele-Play
7,FilmTele-Play
8,Music-Play
9,Calendar-Query
10,Video-Play
11,Alarm-Update
12,Music-Play
13,Travel-Query
14,TVProgram-Play
复制代码

4.基本思路

二、环境准备

%cd ~
!git clone https://gitee.com/paddlepaddle/PaddleNLP/
复制代码
/home/aistudio
正克隆到 'PaddleNLP'...
remote: Enumerating objects: 47494, done.[K
remote: Counting objects: 100% (34730/34730), done.[K
remote: Compressing objects: 100% (17072/17072), done.[K
remote: Total 47494 (delta 23983), reused 27016 (delta 16711), pack-reused 12764[K
接收对象中: 100% (47494/47494), 87.84 MiB | 4.86 MiB/s, 完成.
处理 delta 中: 100% (32328/32328), 完成.
检查连接... 完成。
复制代码
!pip install -U paddlenlp
复制代码

三、数据处理

import pandas as pd
df=pd.read_csv('data/data208091/train.csv',sep='\t',header=None)
df.head(10)
复制代码

.dataframe tbody tr th:only-of-type { vertical-align: middle; } .dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; }

0 1
0 还有双鸭山到淮阴的汽车票吗13号的 Travel-Query
1 从这里怎么回家 Travel-Query
2 随便播放一首专辑阁楼里的佛里的歌 Music-Play
3 给看一下墓王之王嘛 FilmTele-Play
4 我想看挑战两把s686打突变团竞的游戏视频 Video-Play
5 我想看和平精英上战神必备技巧的游戏视频 Video-Play
6 2019年古装爱情电视剧小女花不弃的花絮播放一下 Video-Play
7 找一个2004年的推理剧给我看一会呢 FilmTele-Play
8 自驾游去深圳都经过那些地方啊 Travel-Query
9 给我转播今天的女子双打乒乓球比赛现场 Video-Play

1.生成label文件

labels=df[1].unique()
# 打开文件并写入列表中的元素  
with open('label.txt', 'w') as f:  
    for item in labels:  
        f.write(str(item) + '\n')
复制代码
!cat label.txt
复制代码
Travel-Query
Music-Play
FilmTele-Play
Video-Play
Radio-Listen
HomeAppliance-Control
Weather-Query
Alarm-Update
Calendar-Query
TVProgram-Play
Audio-Play
Other
复制代码
%cd ~/PaddleNLP/applications/text_classification/multi_class
!mkdir data
复制代码
/home/aistudio/PaddleNLP/applications/text_classification/multi_class
复制代码

2.划分数据集

  • train_test_split直接按照 8:2 划分训练集、测试集
import os
from sklearn.model_selection import train_test_split
# 划分训练及测试集
train_data, dev_data= train_test_split( df, test_size=0.2)
root='data'
train_filename = os.path.join(root, 'train.txt')
dev_filename = os.path.join(root, 'dev.txt')
train_data.to_csv(train_filename, index=False, sep="\t", header=None)
dev_data.to_csv(dev_filename, index=False, sep="\t", header=None)
复制代码

3.数据整理

训练需要准备指定格式的本地数据集,如果没有已标注的数据集,可以参考文本分类任务doccano数据标注使用指南进行文本分类数据标注。指定格式本地数据集目录结构:

3.1目录结构

data/
├── train.txt # 训练数据集文件
├── dev.txt # 开发数据集文件
└── label.txt # 分类标签文件
复制代码

3.2数据集格式

训练、开发、测试数据集 文件中文本与标签类别名用tab符'\t'分隔开,文本中避免出现tab符'\t'。

train.txt/dev.txt/test.txt 文件格式:

<文本>'\t'<标签>
<文本>'\t'<标签>
...
复制代码

3.3分类标签格式

label.txt(分类标签文件)记录数据集中所有标签集合,每一行为一个标签名。

  • label.txt 文件格式:
<标签>
<标签>

复制代码
!cp ~/data/data208091/test.csv data/test.txt
!cp ~/label.txt data/label.txt
复制代码
!tree data
复制代码
data
├── bad_case.txt
├── dev.txt
├── label.txt
├── test.txt
└── train.txt

0 directories, 5 files
复制代码

四、模型训练

使用使用 Trainer API 对模型进行微调

只需输入模型、数据集等就可以使用 Trainer API 高效快速地进行预训练、微调和模型压缩等任务,可以一键启动多卡训练、混合精度训练、梯度累积、断点重启、日志显示等功能,Trainer API 还针对训练过程的通用训练配置做了封装,比如:优化器、学习率调度等。

1.训练参数

主要的配置的参数为:

  • do_train: 是否进行训练。
  • do_eval: 是否进行评估。
  • debug: 与do_eval配合使用,是否开启debug模型,对每一个类别进行评估。
  • do_export: 训练结束后是否导出静态图。
  • do_compress: 训练结束后是否进行模型裁剪。
  • model_name_or_path: 内置模型名,或者模型参数配置目录路径。默认为ernie-3.0-tiny-medium-v2-zh
  • output_dir: 模型参数、训练日志和静态图导出的保存目录。
  • device: 使用的设备,默认为gpu
  • num_train_epochs: 训练轮次,使用早停法时可以选择100。
  • early_stopping: 是否使用早停法,也即一定轮次后评估指标不再增长则停止训练。
  • early_stopping_patience: 在设定的早停训练轮次内,模型在开发集上表现不再上升,训练终止;默认为4。
  • learning_rate: 预训练语言模型参数基础学习率大小,将与learning rate scheduler产生的值相乘作为当前学习率。
  • max_length: 最大句子长度,超过该长度的文本将被截断,不足的以Pad补全。提示文本不会被截断。
  • per_device_train_batch_size: 每次训练每张卡上的样本数量。可根据实际GPU显存适当调小/调大此配置。
  • per_device_eval_batch_size: 每次评估每张卡上的样本数量。可根据实际GPU显存适当调小/调大此配置。
  • max_length: 最大句子长度,超过该长度的文本将被截断,不足的以Pad补全。提示文本不会被截断。
  • train_path: 训练集路径,默认为"./data/train.txt"。</
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丶张豪哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值