赞
踩
引言
回顾一下自己参与的智能客服系统项目,从技术调研到游戏领域的对话文本数据分析和任务细分定义,再到建模调优以及最后的运营优化等整体流程的学习,收获良多。一般的智能客服系统包括三大模块,具体系统结构图如下:
对话系统整体结构图
对于多轮任务型对话,首先需要理解用户主要说了啥,怎么说的以及对话的逻辑流程,并借助于对业务的理解以及对话文本的数据分析,抽象出对用户发言的语义理解定义,也即是语义理解模块。本篇主要是讲述意图识别的技术知识。在我们的业务场景中,意图细分成了2层的层级意图结构,也即话题意图以及在每个话题下的用户行为意图,也可以理解为每种话题意图相当于一个Chatbot。所以,话题意图的识别效果对后续流程影响较大。
话题意图识别属于文本分类任务,在我们的游戏安全场景中,定义了7种话题类别,包括安全模式、被盗、失误、封号、信用、举报,以及常用性发言。对于常用的文本分类任务,我们抽象出了一个通用的处理流程,从文本预处理,到寻找经典话术,也即是能覆盖到大部分用户发言的话术;然后基于经典话术人工打标,并根据文本相似性的方法来自动化扩展标签数据集,构成训练集合。这一构建监督训练数据集的方法,较适用于缺乏人力,又想更好地覆盖原始数据的分布的情况。最后,基于各种特征抽取器构建模型并调优。其具体流程结构如下图,其中虚线部分是从数据和模型两个层面不断优化分类效果,其中图中红色的2、3点是从数据层面来修正部分样本的标签以及获取更多的标签样本,红色的 1点是从模型结构来优化性能。
常见文本处理任务通用流程图
上图中的抽取经典句子模块的目的是使得经典发言集合能够覆盖更多的用户发言集合,做到以经典话术代表绝大部分的语义。主要做法是基于主题模型、基于句子向量的无监督聚类、基于文本向量相似性构建的图数据并结合PageRank和图连通分量等方法的集成,能够从上百万的用户发言中共同找出少量的代表性发言,其数量在几千到1万多。
上图中的标签样本的自动化扩展模块主要是通过文本向量的相似性技术来做扩展,主要是基于编辑距离、基于关键词权重的加权词向量、Seq2Seq-AutoEncoder和BERT的句子向量相似性并结合阈值的方式来扩展标签样本。然后通过过滤操作弃掉一些badcase,主要是基于否定词和关键词(主要是针对短句,相似对中差集中含有一些表达话题语义的关键词)做过滤,最后按照每条种子样本自动化标记的情况分层抽样一部分自动标记的数据,通过人工简单审核,视情况修正。对于没有标记上的发言样本,可以重复抽取经典发言然后再自动化标签扩展的步骤来不断迭代得到更加大量和多样化表达的标签语料集合。
上图中的编码器和特定任务部分,就是基于特定任务构建学习模型,对于神经网络来讲,是各种可以抽取文本语义表示的神经网络编码器。下面将从样本处理、模型构建、模型效果优化等方面详细介绍下话题意图分类模块。首先,本话题意图原始数据是基于游戏中一段对话的场景来打标签的,训练集样本的标签准确度不高,因此需要对样本做标签修正的预处理来提纯样本标签。
话题意图分类模块构建
数据预处理:通过基于关键词和短语结构的正则表达式、自动化标签扩展模块这2种方法,清理不纯样本和修正错误样本标签最终得到7 种topic类别(一般、安全模式、被盗、失误、封号、信用、举报)的数据, 约92w左右。
通过新词发现模块把游戏名、装备名、地区名等名词加入到Jieba词表中;然后做带词性的切词,同时把句子切词后含有的游戏专有名词和游戏地区名替换为GameName、AreaName等通配符。这个Trick是为了减弱无关词对分类的影响,因为这些专有名词会在被盗、封号等类别中经常出现,影响分类效果。
基于全量数据使用Word2vec算法来预训练词向量、词性向量。
输入词编号和词性编号,加载预训练好的Embedding向量参数,训练基于两层CNN+Highway结构的文本分类模型,保存验证集合中准确率最好的模型。
模型多标签分类预测时,取预测概率值最高的类别,但当所有类别的预测概率都小于0.3时,判定为common。经测试,此策略比单独取预测概率最高的类别返回,效果更好。因为话题模型是一个入口模型,决定着后续任务将交给哪一个类别的Chatbot处理,其中common类别是不触发具体的任务型Chatbot;所以采用宁可放过也不愿意错判的策略。
(注:各个topic单独设计基于正则表达式的前置过滤规则,可配置过滤badcase,便于安全运营,待积累一段时间的错判语料后,再更新线上的话题分类模型)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。