# CustomerServiceDialogueSystem
**Repository Path**: aoboxia/customer-service-dialogue-system
## Basic Information
- **Project Name**: CustomerServiceDialogueSystem
- **Description**: 中移动基于真实对话日志的对话建模子任务项目文档及代码
- **Primary Language**: Python
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2023-03-31
- **Last Updated**: 2023-08-29
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 中移动项目结题报告
项目编号:
项目名称:基于真实对话日志的对话建模子任务
项目负责人:
承担单位:北京邮电大学
起止时间:2022年3月至2023年3月
验收时间:2023年4月
## 目录
[1. 项目的计划执行情况](#项目的计划执行情况)
[2. 项目的研究内容](#项目的研究内容)
[3. 项目的研究方法](#项目的研究方法)
[3.1 文本预处理](#文本预处理)
[3.1.1 文本筛选](#文本筛选)
[3.1.2 文本人工标注](#文本人工标注)
[3.2 对话建模与实验结果](#对话建模与实验结果)
[3.2.1 领域识别](#领域识别)
[3.2.2 意图识别](#意图识别)
[3.2.3 槽位提取](#槽位提取)
[3.2.4 情感分析](#情感分析)
[4 项目的主要研究成果](#项目的主要研究成果)
[5 项目的其他研究成果](#项目的其他研究成果)
# 项目的计划执行情况
本子项目的计划安排如下:
| 时间 | 任务内容 | 完成情况 |
|-----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------|
| 2022/3 | 1)制定2022年年度计划 2)调研有关对话建模方面的相关技术方法 | 完成 |
| 2022/4 | 1) 对调研内容进行讨论和归纳总结; 2)对甲方数据进行梳理和初步分析。 | 完成 |
| 2022/5 | 1)确定对话结构的相关问题; 2)明确对话建模的研究框架和技术路线。 | 完成 |
| 2022/6 | 通过实验,探索对话意图发现的初步实现方案。 | 完成 |
| 2022/7 | 1)根据讨论出的实现方法以及大致框架稳步推进; 2)最新论文分享及技术讨论; 3)确定第一版数据标注文档,小批量标注数据进行试验; 4)基于公开数据集复现多个论文中的意图挖掘和槽位挖掘的实验。 | 完成 |
| 2022/8、9 | 1)最新论文分享及技术讨论; 2)完成对数据标注说明文档的进一步完善,完成大约500段对话数据的人工标注; 3)构建不同的对话领域分类、意图识别和槽位信息提取的模型,并基于人工标注数据进行模型训练及对比实验。 | 完成 |
| 2022/10 | 1)最新论文分享及技术讨论; 2)完善领域分类、意图识别和槽位信息提取等各部分所构建的不同模型,并基于人工已标注的数据集对模型进行训练,获得对比实验结果。 | 完成 |
| 2022/11 | 1)最新论文分享及技术讨论; 2)完成领域分类、意图识别和槽位信息提取等各部分所构建的不同模型的对比实验,并在此基础上调整模型,优化参数。 | 完成 |
| 2022/12 | 完成专利申请的技术交底书并提交给甲方。 | 完成 |
| 2023/1、2 | 进一步通过实验调整模型,优化参数,完成结题文档初稿撰写。 | 完成 |
按照上述的计划安排已完成相关的任务。
# 项目的研究内容
随着人工智能技术的不断发展和广泛应用,智能客服方兴未艾。智能客服是指在人工智能、大数据和云计算等技术赋能下,通过客服机器人协助人工进行会话、质检和业务处理等,从而释放人力成本、提高响应效率的客户服务形式。
目前国内对智能客服的探索在降本增效上取得一定成效。然而,受制于不成熟的底层技术,智能客服仍存在较大的突破空间。本任务旨在通过对中国移动客服的真实的人人对话日志所转录的文本语料进行对话建模,通过对真实的对话领域、意图、槽位和槽值等不同层次和粒度的分析,从多角度探索和挖掘真实客服对话的特点,以期获得对智能客服具有借鉴价值和指导意义的对话模型。
本任务的研究内容主要分包括四个部分:基于真实对话日志的对话领域识别、意图识别、槽位提取和情感分析。
(1)领域识别主要研究如何提炼出一通人人对话所涉及到的业务领域及其类型,即给定一通对话,确定该通对话主要涉及到哪些领域(如流量、套餐、宽带等)以及打电话的客户的诉求类型(如咨询、办理、投诉等)。
(2)意图识别主要研究如何获得一通对话中隐含的客户意图。通过对对话内容的分析和归纳,获得客户的真实意图。
(3)槽位提取是对话意图识别的下游任务,可抽取出对话中的有效信息,例如“我想订购一个三十八元的套餐”,中“订购”、“三十八元”、“套餐”等即是可以识别出的槽位的槽值信息。
(4)情感分析主要分为个方面,一方面是客户情感识别,主要识别客户潜在的情感倾向(正面、负面和中性);另一方面是客服安抚行为识别,主要识别是否有安抚客户的行为。
由上述四个部分组成的整体任务构成如图 2.1所示。

图 2.1 整体任务的组成
对话的领域识别、意图识别和槽位提取示例如图 2.2所示。

图 2.2 对话的领域识别、意图识别和槽位提取示例
# 项目的研究方法
由于真实客服对话转录后的文本质量不佳,因此整个项目分为两个阶段:第一阶段对原始转录文本进行预处理,去除噪声后进行人工标注,获得样本集;第二阶段利用自然语言理解和深度学习的相关模型进行领域识别、意图识别、槽位提取和情感分析的建模,利用加工处理后的对话文本进行模型的训练后加以验证。
## 文本预处理
### 文本筛选
初始对话文本是分别来自浙江、北京、广东和江苏的各500通对话,共计2000通对话。受到设备、方言以及转录算法等多方面因素的影响,真实客服对话语音转录后的对话文本存在较多的错误,存在不少噪声,直接影响后续对话建模的质量。因此,需要进行文本的筛选,筛选出语义较为流畅的对话文本进行下一步的人工标注,为后续的模型训练提供高质量的样本数据。
对话文本中的错误示例如图 3.1所示。

图 3.1 错误文本示例
#### 筛选方法
文本筛选使用基于百度飞桨发布的一款语言模型zh_giga.no_cna_cmn.prune01244.klm作为基模型,并辅以一款开源的文本纠错工具——PyCorrector进行检错。
文本检错主要包括四个维度,即:
- 字音困惑集:语音转录文字错误一般原字与错字之间有字音相似,加入字音困惑集,如“抖音-斗音”,在出现“斗音”时增大检错过滤阈值;
- 词频:用先前提供的北京、江苏、广东和浙江数据整理统计词频,一般来说,词识别正确次数总会比识别错误次数要多,利用该原理来检错;
- 困惑度:困惑度用来度量一个预测句子的好坏程度,可以用来记录句子的通顺程度,句子困惑度越低,句子越通顺,通常错误也越少;
- RNN模型:训练RNN模型,RNN模型的输出即为每个字出错的概率,预测时取RNN在各个字下的得分,得分小于阈值的字认为是错字。
文本筛选模型通过以上四个维度综合衡量一段对话中的错字个数。词出现在困惑词表中、出现词频低的词、出现困惑度高的句子,均会提高RNN的模型阈值。最后,通过RNN模型计算的总错字个数,计算总错字个数/总字数,得到平均出错概率,阈值大于x的认定为不合格文本。文本筛选的流程如图 3.2所示。

图 3.2 文本筛选的流程
#### 模型参数
文本检错的具体参数设置如表 3.1所示:
表 3.1 数据筛选模型参数
| 参数 | 参数值 |
|-----------|--------|
| threshold | 0.95 |
| n | 2 |
| a1 | 0.9 |
| a2 | 0.9 |
| a3 | 0.9 |
| x | 0.2 |
其中,threshold为阈值,通过平均绝对离差计算错别字个数,阈值越小,得到疑似错别字越多。在平均值上下n倍标准差之间属于正常值,大于n倍标准差属于错误值。通过RNN获得概率,计算单字的平均绝对离差和平均值标准差,若离差大于threshold或是与平均值的标准差大于n倍则认为该单字是错字,反之认为是正确字。a1为字音困惑集惩罚值,a2为词频低惩罚值,a3为困惑度惩罚值,若惩罚字音困惑集则令阈值threshold和倍数n乘以相应倍数,如公式3.1和公式3.2所示:
,词频低惩罚值和困惑度惩罚值亦然。
计算总错别字个数/总字数得到平均出错概率,x是阈值平均出错概率大于阈值的文本认定为是不合格文本,不能通过筛选。
#### 筛选结果
根据前述方法,初步筛选出500通对话文本作为第一批实验数据,部分筛选结果如图 3.3所示:
### 文本人工标注
前述的四个任务均需要一定的标注文本作为样本,故对筛选出的原始对话文本进行人工标注。原始文本数据以一通对话为基本单元,利用JSON格式进行标注和存储,人工标注后的文本示例如图 3.4所示。
图 3.4 人工标注的文本示例
其中各个标签的类型以及含义如下所示:
1. **dialogue_idx**
- 类型:字符串
- description:对话唯一标识符
2. **domain**
- type:列表
- description:对话包含的领域内容列表(一段对话可能存在多个领域)
- 字段:
- **name**
- type:字符串
- description:领域名
- **type**
- type:列表
- description:问题类型,可多选
3. **province**
- type: 字符串
- description: 省份
4. **dialogue**
- 类型:列表
- description:列表中包含所有的用户对话数据
- 字段:
- **speaker**
- type:字符串
- description:用户类型
- **act**
- type:字符串
- description:对话的行为或者意图
- **soothing_behavior**\`
- type:bool值
- description:客服对用户是否有安抚行为
- 选项:
1. true
2. false
- **sentiment**
- type:字符串
- description:用户情感状态
- 选项:
1. positive
2. negative
3. neutral
- **info**
- type:列表
- description:该话语中的附带的实体/槽值信息
1. **domain**
- type:字符串
- description:该槽值所属的领域
2. **prop**
- type:字符串
- description:槽位
3. **value**
- type:字符串
- description:槽值
4. **pos**
- type:列表
- description:所在文本中的下标,[3,3,8]表示槽值编号为3,下标范围为3-8
#### 领域标签
领域识别需要将一通对话文本按照其所涉及的业务领域和类型进行划分,采用对话级别的标注。意图识别的标签分为二级,第一级按照业务领域进行划分;第二级按照客户诉求划分。业务领域的标签如表 3.2所示:
表 3.2 业务领域标签
| **序号** | **领域类型** | **含义** |
|----------|--------------|----------------------------------------------------------------------------|
| 1 | 账单 | 包含手机话费,账单,资费信息等; |
| 2 | 流量 | 流量查询订购,对流量使用存疑等; |
| 3 | 套餐 | 套餐的更换,套餐明细,费用咨询等; |
| 4 | 卡号 | 手机卡相关,手机信号问题等; |
| 5 | 业务 | 会员,彩铃等增值业务; |
| 6 | 宽带 | 宽带故障以及迁移等; |
| 7 | 机顶盒 | 电视机顶盒使用咨询或故障; |
| 8 | 工单 | 一些业务、故障问题或已经向客服登记过的问题进度咨询; |
| 9 | 活动 | 例如空中课堂,合约手机等线上线下推出的一些活动(非流量,套餐等优惠信息); |
| 10 | 其他 | 一些未出现的问题统一标注为其他。 |
客户诉求的标签如表 3.3所示。
表 3.3 客户诉求标签
| **序号** | **客户诉求类型** | **含义** |
|----------|------------------|------------------------------------------------|
| 1 | 咨询 | 包含手机业务、套餐、流量; |
| 2 | 订购 | 订购业务、套餐、流量等; |
| 3 | 修改 | 对已经订购的业务、套餐、流量进行修改; |
| 4 | 取消 | 取消已订购的手机业务、套餐、宽带或销卡等; |
| 5 | 报修 | 宽带、机顶盒等设备或卡号故障问题; |
| 6 | 投诉 | 投诉客服、工作人员、业务等; |
| 7 | 其他 | 一些未出现的问题统一标注为其他。 |
#### 意图标签
意图识别需要识别出一通对话中每一句子的意图,采用句子级别标注。意图识别的标签共分为三级,第一级按照意图主体分为3类:客户意图、客服意图和共有意图;第二级为意图行为,共8类;第三级为具体意图,共15类。意图识别的多级标签分类表如表 3.4所示。
表 3.4 意图识别的多级标签分类表
| 一级标签 | 二级标签 | 三级标签(意图) | 标注标签 |
|----------|---------------------------------------------------|----------------------------------|-----------------|
| 客户意图 | inquire(询问意图,为了从客服处获取信息) | 客户咨询客服账户、业务等相关信息 | inquire_service |
| | | 客户寻求处理措施 | inquire_measure |
| | inform(通知意图,为了给客服提供信息) | 客户提供故障信息 | inform_fault |
| | | 客户提供个人信息 | inform_user |
| | request(有明确目的的行为,对业务产生变动的要求) | 客户要求注销 | request_close |
| | | 客户要求改变当前业务 | request_change |
| | | 客户要求取消业务 | request_cancel |
| | | 客户要求线下服务 | request_offline |
| 客服意图 | inquire(询问意图,为了获取客户信息) | 客服对故障相关情况询问 | inquire_fault |
| | | 客服询问客户信息 | inquire_user |
| | inform(通知意图,为了给客户提供信息) | 客服提供给客户账户业务等相关信息 | inform_service |
| | | 客服提供处理措施 | inform_measure |
| | 客服请求等待 | | hold_on |
| 共有意图 | 重复确认 | | confirm |
| | 其他 | | other |
其中:
1. inquire_service
**意图说明:** 客户咨询客服账户、业务等相关信息
**相关业务:** 账单,话费,流量,套餐,业务需求描述
**详细描述:** 客户所有和账单,话费,流量,套餐,业务,优惠相关的询问,客户想要办理的业务的大略表述,比如需要多少个g流量和多少的通话时间等
2. inquire_measure
**意图说明:** 客户寻求处理措施
**相关业务:** 询问解决措施,要求解决方案,询问处理进度
**详细描述:** 询问应该怎么做,对客服提出的处理措施有疑问,要求客服进行某种处理,询问处理措施进度等标为此类
3. inform_fault
**意图说明:** 客户提供故障信息
**相关业务:** 提供故障信息,询问故障原因,已尝试的解决故障操作
**详细描述:** 客户描述的故障的信息,描述故障出现时间,为什么出现了这种故障的现象,为此做了什么相关的处理故障的操作
4. inform_user
**意图说明:** 客户提供个人信息
**相关业务:** 客户个人信息,客户已办理业务信息,个人其他情况信息,办理意愿描述
**详细描述:** 客户提供的自身的信息,包括身份证号,地址,姓名,联系电话,或者自述已经不在某地或者目前在某地,以及自己在线下或者其他地方做的业务有关的操作也归为此类
5. request_close
**意图说明:** 客户要求注销
**相关业务:** 注销账户
**详细描述:** 客户明确要求注销账户的相关语句
6. request_change
**意图说明:** 客户要求改变当前业务
**相关业务:** 修改套餐,新增业务 \\
**详细描述:** 客户明确要求改变套餐,新增业务等相关语句
7. request_cancel
**意图说明:** 客户要求取消业务
**相关业务:** 取消某一业务
**详细描述:** 客户明确要求取消某一业务的相关语句
8. request_offline
**意图说明:** 客户要求线下服务
**相关业务:** 报装宽带,宽带移机,拆除宽带
**详细描述:** 客户所有要求的线下相关的业务,需要客服安排安装维修人员上门
9. inquire_fault
**意图说明:** 客服对故障相关情况询问
**相关业务:** 询问故障表现,故障初步排查,其他人是否有故障
**详细描述:** 客服询问故障的表现,其他人是否有类似故障,故障出现时间等语句,包括询问客户做了什么与此故障相关的操作都属于此类
10. inquire_user
**意图说明:** 客服询问客户信息
**相关业务:** 客户个人信息,客户已办理业务信息,客户其他非当前通话的信息,客户办理意愿
**详细描述:** 询问客户的相关信息,包括个人身份信息,地址信息,已经办理的业务信息,在当前通话之前出现的其他信息。若是要求客户在手机上输入的而不是语音说出的则不标注此类
11. inform_service
**意图说明:** 客服提供给客户账户、业务等相关信息
**相关业务:** 账单,话费,流量,套餐,业务内容 客服提供账户的各种信息,包括套餐费用,账单费用,流量使用情
**详细描述:** 况,办理时间,业务持续时间,优惠信息,推荐办理的业务信息等
12. inform_measure
**意图说明:** 客服提供处理措施
**相关业务:** 上报,登记,线下营业厅解决,告知应该如何做,提供处理进度,完成业务更改
**详细描述:** 客服做出的解决问题的措施及解决过程中辅助措施成功实施的语句,通知处理的进度,告知需要线下营业厅解决,无法解决需要上报,告知客户需要如何进行操作等
13. hold_on
**意图说明:** 客服请求等待
**相关业务:**无
**详细描述:** 客服说等一等,请您稍等等话语,如果是客服去查询客户的相关信息的等待或者客服去执行处理措施的等待,归为此类标签;若是给您登记一下请稍等,涉及到measure相关的就优先标记inform_measure。hold_on 可以帮助识别等待期间大量的无意义噪音语句为other
14. confirm
**意图说明:** 重复确认
**相关业务:**无
**详细描述:** 对一些信息的确认或者简短的提问,与上一句有极大的关联,通常会重复上一句信息
15. other
**意图说明:** 其他
**相关业务:**无
**详细描述:** 不属于以上类别的所有其他句子
#### 槽位标签
槽位提取需要对语句中包含的槽位的槽值进行标注,采用字符级的序列标注BIO标注方式。BIO标注的示例如表 3.5所示。
表 3.5 槽位的BIO标注示例
| 现 | 在 | 我 | 的 | 套 | 餐 | 是 | 一 | 百 | 四 | 十 | 几 |
|----|----|----|----|----|----|----|------------|------------|------------|------------|------------|
| o | o | o | o | o | o | o | b-业务费用 | i-业务费用 | i-业务费用 | i-业务费用 | i-业务费用 |
目前已标注的文本中,共包含33类槽位值标签(包括代表非槽位值的空标签),36类标签如表 3.6所示:
表 3.6 槽位的标签
| 槽位 | 标签 | 槽位 | 标签 | 槽位 | 标签 |
|----------|------|--------------|------|--------------------|------|
| NA | 0 | **用户要求** | 1 | **用户需求** | 2 |
| 用户姓名 | 3 | **用户地址** | 4 | **业务类型** | 5 |
| 办理日期 | 6 | **办理渠道** | 7 | **用户状态** | 8 |
| 业务费用 | 9 | **计费方式** | 10 | **流量总量** | 11 |
| 业务规则 | 12 | **处理周期** | 13 | **网络类型** | 14 |
| 流量余额 | 15 | **到期日期** | 16 | **套餐外流量计费** | 17 |
| 业务时长 | 18 | **持有套餐** | 19 | **流量范围** | 20 |
| 宽带类型 | 21 | **故障原因** | 22 | **欠费金额** | 23 |
| 通信质量 | 24 | **剩余话费** | 25 | **套餐代指** | 26 |
| 通话时长 | 27 | **账户余额** | 28 | **网络质量** | 29 |
| 流量封顶 | 30 | **隶属业务** | 31 | **国内被叫** | 32 |
| 扣费日期 | 33 | **国内主叫** | 34 | **套餐外通话计费** | 35 |
对于如下的例句“*八元的这个飞享套餐它包含的是五十兆的省内流量三十分钟的省内主叫_连续送一年一年以后就不送了_然后这个套餐里您在国内打电话都是一毛九接听是全国免费的。*”,则槽位和槽值的标注结果如表 3.7所示:
表 3.7 槽位和槽值标注示例
| 槽位 | 槽值 |
|----------|----------------------------|
| 业务费用 | 八元 |
| 套餐名称 | 飞享套餐 |
| 流量总量 | 五十兆 |
| 流量范围 | 省内 |
| 通话时长 | 三十分钟 |
| 通话范围 | 省内 |
| 国内主叫 | 一毛九 |
| 国内被叫 | 免费 |
| 业务规则 | 连续送一年一年以后就不送了 |
#### 情感标签
情感分析需要判别用户情感倾向和客服安抚倾向,采用句子级标注。其中按照对话主体分为客服语句和客户语句。对客户文本按照positive(正面)、negative(负面)和neutral(中性)进行标注;对客服文本初始按照:true(安抚行为)和false(非安抚行为)进行标注,后来由于标注样本数严重失衡,故按照appease(安抚语句)、business(业务语句)和other(其他)进行标注。初始标注示例如图 3.5所示。
图 3.5 情感标注示例
其中六种标签的解释说明如表 3.8所示。
表 3.8 情感标签解释
| 对话主体 | 标签 | 解释 |
|----------|----------|------------------------------------------------------------------|
| 客户 | positive | 正面情绪,例如“谢谢”等 |
| | negative | 负面情绪,质问、激动等 |
| | neutral | 除上述两种外的其他所有 |
| 客服 | appease | 安抚话语,客服语句中带有明显安抚词汇,例如:“您别急”、“我理解”等 |
| | business | 业务话语,客服使用业务话术回答客户问题以安抚客户的话语 |
| | other | 除上述两种外的其他所有 |
## 对话建模与实验结果
### 领域识别
#### 文本分析
经过对2000通对话文本的人工标注,其领域分布如
表 3.9和图 3.6所示,平均每通对话具有2.4个标签,对话平均长度在1000个字符左右。
表 3.9 领域分布表
| 数据标签 | 账单 | 流量 | 套餐 | 卡号 | 业务 | 宽带 | 机顶盒 | 工单 | 活动 | 其他 |
|----------|------|------|------|------|------|------|--------|------|------|------|
| 业务数据 | 173 | 673 | 795 | 465 | 196 | 475 | 33 | 996 | 280 | 105 |
图 3.6 领域分布图
其中,领域大都集中在“套餐”、“流量”、“工单”,在“账单”、“业务”领域则较少,尤其是“机顶盒”标签很少,存在文本分布不平衡的问题。
对话数据因不同人工标注的准则可能会产生差异,比如不同的人对同一通对话在业务、活动、套餐的理解上有所不同。
#### 模型构建
使用Paddle + ERNIE 3.0预训练模型加微调的方法作为领域识别多标签分类方案。具体实现如下:
首先文本经过输入层嵌入后,通过模型的6层多头自注意力模块,每层多头注意力模块都能捕获不同的语义特征,以最后一层捕获的特征效果最佳。将最后一层的模型隐藏状态输出作为富含句法语义特征的文本表示:
其中,𝑛为文本长度,𝑏为ERNIE隐藏层的隐藏单元数量768。此外还需要获取特殊符号向量:
以表示句子的全局上下文的语义信息。
对于输入的对话文本,使用预训练模型ERNIE的分词器(tokenizer)对对话进行embedding操作。转化之后每个字符转换为字典ID并且标签已经转为One-Hot形式编码。之后设置对话文本的最大长度为1024,对于超过最大长度的文本进行截断,长度不足的句子则进行补0操作。
最后将模型学习到的CLS经过全连接层和Sigmoid处理得到文本在每个意图分析类别标签的概率,若标签预测概率大于0.5,则设置预测结果为此标签。
模型结构如图 3.7所示。
图 3.7 领域识别模型架构示意图
该模型训练的参数如表 3.10所示:
表 3.10 领域识别模型训练参数
| 参数 | 参数值 |
|----------------|-------------------|
| max_seq_length | 1024 |
| epochs | 20 |
| Batch_size | 16 |
| learning_rate | 3e-5 |
| optimizer | AdamW |
| lose | BCEWithLogitsLoss |
使用本任务的模型结构分别在CrossWOZ和CAIL2018—SMALL进行实验,因以上两数据集较大,按照8:1:1的比例划分训练集、验证集、测试集。
1、CrossWOZ数据集。CrossWOZ包含 6K 个对话,102K 个句子,涉及 5 个领域(景点、酒店、餐馆、地铁、出租)。平均每个对话涉及 3.2 个领域,远超之前的多领域对话数据集,增添了对话管理的难度。保存模型的结构不变,对超参进行修改,batch_size = 32,max_length = 230。最终模型的Macro F1 Score = 94.05%。
2、CAIL2018—SMALL数据集中罪名预测任务数据来自“中国裁判文书网”公开的刑事法律文书,包括19.6万份文书样例,其中每份数据由法律文书中的案情描述和事实部分组成,包括每个案件被告人被判的罪名,数据集共包含202项罪名,被告人罪名通常涉及一项至多项。保存模型的结构不变,对超参进行修改,batch_size = 64,max_length = 180。最终模型的Macro F1 Score = 89.25%。
#### 实验结果
使用标注的2000条对话数据,按照7:2:1的比例划分训练集、测试集、验证集。固定400条测试集。实验结果如表 3.11所示。
表 3.11 领域识别实验总结果
| precision | recall | Micro F1 Score |
|-----------|--------|----------------|
| 86.42% | 85.34% | 85.88% |
由上文数据统计可知,对话数据中存在稀疏数据。因此使用TrustAI进行稀疏数据筛选,利用基于特征相似度的实例级证据分析方法抽取在验证集中缺乏训练证据的数据,进行数据增强,数据增强类型使用“substitute”。最后将增强之后的500条数据加入到训练集中重新训练。最终模型的Micro F1 Score为87.49%。实验结果如表 3.12所示,各标签具体结果如表 3.13所示。
表 3.12 领域识别数据增强结果
| precision | recall | Micro F1 Score |
|-----------|--------|----------------|
| 86.38% | 88.64% | 87.49% |
表 3.13 领域识别各类标签具体结果
| 标签 | precision | recall | F1 Score |
|--------|-----------|--------|----------|
| 账单 | 78.43% | 78.43% | 78.43% |
| 流量 | 84.94% | 94.24% | 90.68% |
| 套餐 | 90.45% | 96.99% | 93.60% |
| 卡号 | 88.89% | 89.72% | 89.30% |
| 业务 | 72.34% | 66.67% | 69.39% |
| 宽带 | 91.25% | 92.43% | 91.82% |
| 机顶盒 | 100.00% | 57.14% | 72.73% |
| 工单 | 87.24% | 90.00% | 88.60% |
| 活动 | 80.95% | 76.12% | 78.46% |
| 其他 | 90.00% | 52.94% | 66.67% |
在将name类划分为十类之后进行name\#\#type的划分,数据集为500条人工标注数据,按照7:2:1的比例划分训练集、验证集、测试集,共有58个标签。之后进行name\#\#type的层次分类,经稀疏数据增强,最终模型总的Micro F1 Score为50.25%。卡号\#\#取消,宽带\#\#保修两标签的训练数据仅为120条左右时,模型等F1 Score分别为88.89%,83.33%。具体详细结果如表 3.14所示:
表 3.14 层次分类各类标签结果
| 标签 | 训练集标签数目 | F1 Score |
|--------------|----------------|----------|
| 卡号\#\#取消 | 159 | 88.89% |
| 宽带\#\#报修 | 114 | 83.33% |
| 宽带\#\#咨询 | 36 | 66.67% |
| 套餐\#\#取消 | 39 | 62.50% |
| 宽带\#\#取消 | 57 | 61.54% |
| 套餐\#\#咨询 | 168 | 61.90% |
| 用户\#\#咨询 | 75 | 57.14% |
由于所给数据与标注数据的数目太少与标签较多,模型在训练集无法得到有效的训练,测试集也会经常出现训练过的数据在测试集无与之相对应的测试数据等问题。但通过上表的结果可知,模型的推理效果良好。随着训练数据的增多推理效果也会逐渐变好,标签的F1 Score基本是与训练集标签数目成正相关的。
经数据增强、脏数据重标注之后模型的总Micro F1 Score已到达87.49%,查看具体标签的每项指标可以发现除稀疏标签外,其余标签的F1 Score也均已达到85%以上,效果较好的标签有套餐 (93.60%)、宽带 (91.82%)、流量 (90.68%)。
通过在CrossWOZ数据集与CAIL2018—SMALL数据集上的测试,模型在验证集上的Micro F1 Score分别为94.05%,89.25%,均大于85%。推断随着标注数据的增加以及标注质量的提升,模型的准确率会进一步上升。对于层次分类。由于所给数据与标注数据的数目太少与标签较多且严重不平衡,模型无法得到有效的学习。根据已知的预测结果可以推断,随着训练数据的增加以及数据集的扩充,模型的效果会进一步提升,但对于多标签分类,层次分类需要更多、更大的数据集。
查看具体预测错误标签有以下结论:
(1)在对话最后才出现标签不易识别,多为工单标签。对话数据最长的长度为6532,大于1024(max_length)将后面数据截断,就无法识别这一部分的标签。
(2)关于机顶盒标签,该标签在训练集上训练不足,测试集标签数目更少会导致每次测试的结果方差较大。
(3)因预测阈值的原因,概率大于0.5的标签将会被预测成功。因为其他标签的学习问题,有的其他问题模型没有学习到,有极少预测结果无标签,无标签的文本标签多为其他。
(4)错误率较高的标签为:活动、业务,这两个标签更多时候与语义相关,且会受到标注差异的影响,要达到跟其他标签同等准确率需要更多的数据来训练或者使用更深的网络进行训练。
### 意图识别
#### 文本分析
经过文本筛选和人工标注,总计有650通对话作为初始数据。其中,80%数据做训练数据,共520段对话;20%做验证数据,共130段对话。各标签出现数量柱状图如图 3.8所示:
图 3.8 意图识别标注数据的标签数量分布
#### 模型构建
为了达到最佳效果,共采用了三种模型进行意图识别任务。
##### 模型1
第一种模型采用BERT+PCA+K-Means聚类的方法,按照需求将所有的对话构建dataset结构,使用dataloader依次读取并输入进BERT模型之中,Bert输出结果的CLS信息包含了整句话的信息,使用PCA方法将768维的张量降维到2维,以方便可视化输出。再采用K_means聚类方法,将所有的二维点在二维模型上进行分组聚合,最后采用pyplot可视化聚类结果。模型结构如图 3.9所示,模型参数如表 3.15所示。
图 3.9 意图识别模型1架构示意图
表 3.15 意图识别模型1训练参数
| 重复轮数 | 每轮迭代次数上限 | 停止迭代的聚类中心点间distance阈值 | 中心点个数 |
|----------|------------------|------------------------------------|------------|
| 20 | 10000 | 1e-8 | 14 |
##### 模型2
第二种模型采用了BERT+BiLSTM+MLP+CRF的结构,按照需求将所有的对话构建dataset结构,使用dataloader依次读取并输入进BERT模型之中,使用Bert的输出的CLS的768维信息输入进BiLSTM之中,经过了本层之后,可以获得包含了语句前后位置联系和所有语句语义信息的输出,再次经过MLP进行信息的抽象和提取,使张量在不同维度之间做充分的交叉,让模型能够抓取到更多的非线性特征和组合特征的信息,再将输出作为CRF层的输入,CRF层最常用在命名实体识别中,可以对不同实体类型之间的出现顺序做约束。在本实验中,不同意图之间的同样存在实体之间的类似的约束关系,CRF层计算可能的意图标注序列,并取得分最高的序列作为最终结果。鉴于数据的不足,采取半监督方式,将训练好的模型预测的一批无标签数据作为整个模型的输入再次对模型进行训练。
模型结构如图 3.10所示,模型参数如表 3.16所示。
图 3.10 意图识别模型2架构示意图
表 3.16 意图识别模型2训练参数
| 标注数据epoch | 预测数据epoch | 优化器 | batch size | 学习率 | 语句最大长度 |
|---------------|---------------|--------------|-------------|-------------|--------------|
| 20 | 1 | SGD | 1 | 0.001 | 64 |
| weight decay | drop out | BiLSTM隐层数 | hidden size | MLP激活函数 | |
| 1e-4 | 0.2 | 2 | 80 | LeakyReLU | |
##### 模型3
第三种模型相比第二种,不再将预测的无标注数据当成训练数据,其余部分同模型2相同。模型的模型结构如图 3.11所示,模型参数如表 3.17所示。
图 3.11 意图识别模型3架构示意图
表 3.17 意图识别模型3训练参数
| 标注数据epoch | 语句最大长度 | 优化器 | batch size | 学习率 |
|---------------|--------------|--------------|-------------|-------------|
| 20 | 64 | SGD | 1 | 0.001 |
| weight decay | drop out | BiLSTM隐层数 | hidden size | MLP激活函数 |
| 1e-4 | 0.2 | 2 | 80 | LeakyReLU |
#### 实验结果
模型1聚类结果如图 3.12和图 3.13所示。

图 3.12 意图识别模型1聚类中心点示意图

图 3.13 意图识别模型1聚类结果图
由于训练数据的标签分布不均匀,other类占比太重,而BERT+PCA+K-Means的模型结构很难学习到对话的真正意图。从聚类后的结果来看,无法根据聚类结果发现不同簇之间的明显意图差别。
模型2和模型3在各标签上的对比结果如表 3.18所示。
表 3.18 意图识别模型2和模型3结果对比
| **标签** | **模型2** | **模型3** | | | | |
|-----------------|------------|---------------|--------|------------|---------------|--------|
| | **recall** | **precision** | **F1** | **recall** | **precision** | **F1** |
| confirm | 0.5393 | 0.4067 | 0.4637 | 0.5393 | 0.4067 | 0.4637 |
| hold_on | 0.9091 | 0.9375 | 0.9230 | 0.9219 | 0.9218 | 0.9219 |
| inform_fault | 0.7352 | 0.5681 | 0.6410 | 0.7222 | 0.5909 | 0.6500 |
| inform_measure | 0.8131 | 0.8222 | 0.8176 | 0.8145 | 0.8416 | 0.8279 |
| inform_service | 0.7310 | 0.7260 | 0.7285 | 0.7702 | 0.7808 | 0.7755 |
| inform_user | 0.6623 | 0.6023 | 0.6309 | 0.6540 | 0.6102 | 0.6314 |
| inquire_fault | 0.7222 | 0.5416 | 0.6190 | 0.8125 | 0.5416 | 0.4897 |
| inquire_measure | 0.5177 | 0.6219 | 0.5650 | 0.5556 | 0.6402 | 0.6500 |
| inquire_service | 0.6655 | 0.7269 | 0.6949 | 0.7000 | 0.7490 | 0.5950 |
| inquire_user | 0.6113 | 0.6649 | 0.6370 | 0.6390 | 0.6752 | 0.7237 |
| other | 0.9064 | 0.9002 | 0.9033 | 0.9038 | 0.9012 | 0.9025 |
| request_cancel | 0.5714 | 0.6667 | 0.6153 | 0.5714 | 0.6667 | 0.6153 |
| request_change | 0.6250 | 0.5357 | 0.5769 | 0.6521 | 0.5357 | 0.5882 |
| request_close | 0.5556 | 0.3333 | 0.4166 | 0.6250 | 0.3333 | 0.4347 |
| Accuracy | 0.7557 | 0.7683 | | | | |
##### 结果分析
(1)目前最大的问题还是有标签数据量的不足。由于语音转文字的识别准确率比较低,所以存在大量的非优质数据,同时标注的成本太高。
(2)可以使用文本增强方法,对标注好的数据里面的含较多信息的语句进行增强,创造新的对话。
(3)在不断调整超参数的过程中,结果有所提高,还可以继续进行超参数的调整,看看能否得到更好的结果。
(4)存在大量的标签不平衡情况。Request类的标签数量相对去inquire类的标签数量过少,在实际运行之中发现,标签的数量不平衡对较少比例的标签的准确率等指标有比较大的影响。应继续标记数据,有选择性的标注,需要达到的目的是,使得各个标签之间实现数量的平衡。实验结果表明,数据标签数量的均衡性很大的影响识别的准确率。
### 槽位提取
#### 文本分析
经过筛选和标注,槽位提取任务初次使用对话数据共500通,按照4:1的比例将其分割为训练集和测试集,最终训练集400通,测试集100通。具体文本训练集和测试集的统计情况如表 3.19所示:
表 3.19 槽位提取的训练集和测试集的划分
| 数据集 | 对话通数 | 句子数 | 含有标记实体的句子数 |
|--------|----------|--------|----------------------|
| 训练集 | 400 | 12617 | 2033 |
| 测试集 | 100 | 2299 | 537 |
针对训练集和测试集,对其中所包含的槽位数量进行统计,统计结果如表 3.20和表 3.21所示:
表 3.20 文本训练集的统计结果
| 槽位 | 数量 | 槽位 | 数量 | 槽位 | 数量 |
|----------------|------|--------------|------|--------------------|------|
| 业务费用 | 535 | **用户要求** | 363 | **办理渠道** | 250 |
| 流量总量 | 203 | **业务规则** | 190 | **业务类型** | 171 |
| 处理周期 | 157 | **计费方式** | 154 | **用户状态** | 110 |
| 用户地址 | 99 | **到期日期** | 99 | **隶属业务** | 86 |
| 用户需求 | 75 | **套餐代指** | 67 | **持有套餐** | 65 |
| 业务时长 | 55 | **通话时长** | 47 | **办理日期** | 46 |
| 流量范围 | 29 | **宽带类型** | 28 | **网络类型** | 25 |
| 套餐外流量计费 | 19 | **用户姓名** | 18 | **网络质量** | 16 |
| 通信质量 | 15 | **剩余话费** | 14 | **流量余额** | 13 |
| 欠费金额 | 13 | **国内主叫** | 10 | **故障原因** | 9 |
| 账户余额 | 4 | **扣费日期** | 4 | **套餐外通话计费** | 2 |
| 流量封顶 | 1 | **国内被叫** | 1 | **NA** | 1 |
表 3.21 文本测试集的统计结果
| 槽位 | 数量 | 槽位 | 数量 | 槽位 | 数量 |
|----------------|------|--------------|------|--------------|------|
| 用户要求 | 112 | **业务费用** | 98 | **业务类型** | 92 |
| 办理渠道 | 69 | **处理周期** | 62 | **流量总量** | 58 |
| 用户状态 | 52 | **用户需求** | 51 | **业务规则** | 38 |
| 网络质量 | 34 | **计费方式** | 30 | **到期日期** | 23 |
| 业务时长 | 16 | **持有套餐** | 15 | **办理日期** | 15 |
| 故障原因 | 14 | **通话时长** | 6 | **用户姓名** | 5 |
| 网络类型 | 4 | **欠费金额** | 4 | **用户地址** | 3 |
| 流量范围 | 2 | **隶属业务** | 1 | **通信质量** | 1 |
| 账户余额 | 1 | **流量余额** | 1 | **扣费日期** | 1 |
| 套餐外流量计费 | 1 | **剩余话费** | 1 | **NA** | 1 |
#### 模型构建
##### Baseline模型
槽位提取作为序列标注任务的一种,我们使用BERT-LSTM模型作为我们的baseline模型,首先使用bert-encoder作为编码器,得到文本的编码向量,然后传入LSTM层当中建模文本的时序信息,提取文本特征,最终将得到的token序列进入CRF层进行解码,计算最优的标注序列。模型总体流程图如图 3.14所示:
图 3.14 Baseline模型流程图
槽位抽取具体模型结构如图 3.15所示:
,则一通对话经过模型训练后生成n个对应标签值。用户情感分析模型将“用户”语句分为“正面”、“负面”和“中性”三种情感标签,对应的标签值分别为[-1,0,1],在一通对话中的数量为;客服安抚分析模型将“客服”语句分为“安抚语句”、“业务语句”和“其他”三种安抚标签,对应的标签值为[2,1,0],在一通对话中的数量为。各标签数量和应为n,如公式4.3所示:
针对6种不同标签,设置权重和偏执值,使用公式4.4:
计算出该通对话的总情绪值。
针对n个文本,设置动态权重和偏置值,按照文本生成的标签值序列,使用公式4.5计算最终情绪值:
将和按照tanh映射到[-1,1]的区间,如公式4.6和公式4.7所示:
评价结果对应关系如表 3.28所示。
表 3.28 情感分析评价结果与值对照表
| 评价值 | 0 | 1 | 2 | 3 | 4 |
|----------|------|------|------|------|------|
| 评价结果 | 很差 | 较差 | 正常 | 较好 | 很好 |
#### 实验结果
情感分析模型最好准确率是87%,各标签预测结果如表 3.29所示:
表 3.29 客户情感分析实验结果
| | | precision | recall | f1-score | support |
|-------------|--------------|-----------|--------|----------|---------|
| 第一次 实验 | **neutral** | 0.91 | 0.77 | 0.83 | 234 |
| | **positive** | 0.98 | 0.97 | 0.98 | 117 |
| | **negative** | 0.81 | 0.93 | 0.86 | 227 |
| 第二次 实验 | **neutral** | 0.90 | 0.79 | 0.84 | 436 |
| | **positive** | 0.98 | 0.98 | 0.98 | 221 |
| | **negative** | 0.82 | 0.91 | 0.86 | 343 |
| avg of best | 0.90 | 0.89 | 0.89 | | |
安抚行为模型最好准确率是82%,各标签预测结果如表 3.30所示:
表 3.30 客服安抚行为实验结果
| | | precision | recall | f1-score | support |
|-------------|----------------|-----------|--------|----------|---------|
| 第一次 实验 | **smooth** | 0.76 | 0.69 | 0.72 | 66 |
| | **non smooth** | 0.72 | 0.71 | 0.71 | 66 |
| 第二次 实验 | **smooth** | 0.84 | 0.79 | 0.81 | 86 |
| | **non smooth** | 0.79 | 0.84 | 0.81 | 84 |
| avg of best | 0.82 | 0.80 | 0.81 | | |
情感分析与其他模型对比结果如表 3.31所示:
表 3.31 情感分析任务不同模型横向对比结果
| | neutral | positive | negative | average |
|----------------|---------|----------|----------|---------|
| Albert+textCNN | 0.86 | 0.90 | 0.83 | 0.86 |
| RoBERTa | 0.68 | 0.70 | 0.65 | 0.68 |
| BERT+TextCNN | 0.87 | 0.90 | 0.85 | 0.87 |
BERT+TextCNN的模型能够很好的识别出对话文本上客户的情感倾向和客服的安抚倾向,最后对整通对话数据的倾向进行数值化表达,也在一定程度上反映了整段对话中客服的服务质量。但是由于语料本身存在一定语法拼写错误和主观的口语化表达,导致模型的性能很难继续提升,未来或可考虑进一步提升语料的质量以取得更好的效果。
# 项目的主要研究成果
基于领域识别、意图识别、槽位提取和情感分析,提交了一项国内技术发明专利《一种基于移动客服对话的结构化摘要生成方法》技术交底书,通过甲方内部评审。
提出针对一通真实客服对话进行多要素的识别和提取,并最终生成对话的结构化摘要的一种方法。具体过程如下:
(1)针对整段人工客服对话进行领域识别,判定对话所属将对话划分到具体的某个领域以及问题类型。
(2)针对对话中的每个句子进行意图识别,判定客户来电意图,结合所在领域及其类型,生成用户的来电诉求。
(3)结合每个句子的对话意图,提取出句子中的有用的语义信息值,填充到结构化表单项当中。
(4)分析对话中的客户情感状态并结合客服的安抚行为生成服务质量指标。
(5)生成对话的结构化摘要,如表 4.1所示。
表 4.1 对话的结构化摘要输出示例
| **对话标题** | **宽带业务咨询** | | | | |
|--------------|------------------|------------|--------------------|--------------------|------------------|
| **用户诉求** | 宽带费用查询 | 宽带移机 | | | |
| **对话信息** | 宽带类型 | 宽带费用 | 附加业务 | 用户状态 | 用户地址 |
| | 100M宽带 | 每个月40块 | 每个月赠送30块话费 | 原来的手机号不用了 | 北京市海淀区xxxx |
| **服务质量** | 良好 | | | | |
# 项目的其他研究成果
论文《语音转录后文本的中文拼写纠错模型》,被北大核心期刊《电子测量技术》录用待发表。
该论文主要提出了一种基于MacBERT的文本先检错后纠错模型,对语音转录后文本进行校正。检错阶段使用MacBERT-BiLSTM-CRF模型检查文本是否有错及出错位置。纠错阶段从置信度和字音相似度两个维度出发,划定“置信度-字音相似度”曲线判断候选字是否进行纠错。候选字的置信度使用MacBERT语言模型计算,并提出一种基于拼音码的字音相似度计算方法。在语音公开数据集Thchs-30上通过调用百度语音识别API进行实验,相比现有方法,在检错阶段和纠错阶段的精确率、召回率、F1值都得到了提高,其中纠错阶段精确率达到83.32%,提高了转录文本的正确性。