一、总体分析

客服工单分类业务属于文本分类问题,根据每个工单所属的类别数量,可以进一步归为文本单标签多分类问题。以下简单做一下技术分析。

1、算法/模型和特征

按照近几年的技术发展趋势,文本分类算法分为传统机器学习和深度学习两大类。通常来说,很多文本分类属于线性可分的,因此采用一些线性分类算法或者不需要过多地进行特征交叉组合,也可以表现出比较好的性能,这也是后面我们优先尝试线性支持向量机和fasttext这类浅层模型的原因之一。

  • 传统机器学习

传统机器学习中典型的分类算法如逻辑回归、支持向量机、最大熵等都可以应用于文本分类问题。在特征上,常见的特征包括tf/idf特征、n-gram文本特征,以及通过主题模型LDA等提取出来的主题、词的权重特征,还有近几年比较流行的词向量特征等。

  • 深度学习

得益于硬件的发展和大规模数据的可获取性,深度学习最近这些年发展很快,取得了很多突破性的成就。不过目前来说,深度学习应用于具备原始特征的数据,例如图像、音频领域,获取的成就最大。对于人类后天发展出来的具备逻辑关系的数据,典型的如NLP领域,成就相对较弱,但也有很多应用。对于文本分类问题,经常被用的深度学习技术从高的层次来说,包括CNN、RNN等,从细节技术来说包括textcnn、双向RNN,及其N多组合变种,如LSTM、结合Attention机制等。

    个人观点,深度学习这类通过大量组合计算来逼近最优结果的方法,这类“暴力”解决方案 好比托勒密基于地心说模型用几十个小圆套大圆的方法来计算行星运动轨迹(我们现在知道地心说是错误的,正确的模型是开普勒以日心说为基础的椭圆模型,形式简单的多),虽然取得令人惊叹的准确率,但终究不是AI的最终解决方案。深度学习后续的基础研究感觉也进入了停滞状态,没有进一步的突破,进入瓶颈期了。这只是个人观点,未必正确,不过即便如此,深度学习最近几年的应用成果也足以使它成为机器学习发展史上的一座高峰。因此后面的案例里不管有没有用,总要试试深度学习的效果:) 

2、技术选择

         由于工单数据规模小,例如意见数据,总共13493条,类别61类,并且类别不平衡严重;而投诉数据,记录数只有几千条,类别数反而更多。在这种规模的数据下,深度学习未必能取得更优的效果,同时也受限于时间等因素,我们目前只快速尝试了几种方式,模型包括线性svm、最大熵等,选择的特征包括tf/idf特征、n-gram特征 、词向量/句向量等;而在深度学习方向,尝试了浅层网络fasttext、textcnn、bi-lstm等网络结构;在基础特征的选择上,我们也尝试了字和词两种方式的区别。

3、评估

   选择合适的评估指标很重要,由于是不平衡多分类问题,这里采用微平均(micro-average)和宏平均(macro-average)作为评估指标。

    采用随机抽取的80%作为训练和开发集,20%作为测试集。

二、验证结果

        与我们的初步分析差不多,性能上(precision、recall、f1值等)传统机器学习和浅层网络fasttext表现差不多。由于时间匆忙,没有对textcnn、bi-lstm的网络结构、参数甚至损失函数等进行优化,在本次测试中,textcnn、bi-lstm等表现不如线性svm和fasttext(总体precision和recall相差3-4个百分数)。有趣的是,使用tfidf作为特征时,分别使用字和词作为基本统计单位时,总体的成绩差不多,这有点出乎意料。而应用fasttext的时候,采用字作为统计单位时(使用2或3 gram的特征),相比采用词,成绩稍微好一些(相差0.2左右的百分数),由于相差不大,可以认为是样本抽样的差异性导致的,因此不做进一步分析。

      需要说明的时,这里的成绩分析是基于总体precision和recall,具体到每个类别,各个模型表现并不相同。 

      我们两个模型的最好的总体结果(微平均)分别如下:

模型precisionrecallF1
意见分类0.890.900.89
投诉分类0.740.740.74

注:为什么不把宏平均 也列出来呢?由于有一些类别的数据很少(10几条,20几条的样子),因此准确率很低,整体拉底了宏平均的值。具体到意见分类,宏平均大概是0.54左右(精确值我忘记了)。下面会列出每个类别的评估值,平均一下就可以得出宏平均了。

下面以意见分类业务作为示例,做详细说明。

由于数据需要保密,这里对结果做了过滤处理

1、数据分析

  • 总记录数:13493

  • 总共类别数量: 61

  • 每个类别对应的数量如下:

[('xxx', 8469), ('xxxxxxx', 389), ('xxxxxxxxxxxxxxx', 381), (xxxxxxxxx', 339),  ..........................................('XXXX等', 17), ('计量装置配置存疑', 13), ('XXXXXXXXXX', 13),('XXXX', 2)..........................

如下图:

图片

 2、测试集评估结果

    

  •    混淆矩阵

图片

  • 各个类别的评估指标

                                                precision    recall  f1-score   support

                     XXXXX       0.84      0.80      0.82        45

                      XXXX       0.97      0.99      0.98      1708

                  XXXX       0.68      0.75      0.71        20

                     XXXX       0.62      0.60      0.61        25

                  XXXX       1.00      0.88      0.93        24

                  XXXX       0.93      0.98      0.96        56

                       XXXX       0.68      0.70      0.69        37

             XXXX     0.69      0.88      0.77        33

              。。。。。。。。。。。。。。。。

            。。。。。。。。。。。。。。。。。

            xxxxx       1.00      1.00      1.00         1

                        avg / total       0.89      0.90      0.89      2699

3、特征权重

深度学习的特征不好理解,这里取支持向量机的模型特征作为示例,每个类别按重要程度排序,取前5个特征:

# 'XXXXXXXXXXX':

  . Top unigrams:

       . 合一

       . 联合

       . 三单

       . 缴费单

       . 三合一

  . Top bigrams:

       . 三单 合一

       . 合一 电费

       . 账单 三单

       . 合一 账单

       . 联合 缴费单

# 'XXXXXX':

  . Top unigrams:

       . 免费

       . 收费

       . 三相

       . 增容

       . 政策

  . Top bigrams:

       . 派单 业扩

       . 任何 费用

       . 收取 费用

       . 收取 任何

       . 收费 正常

 

三、后续工作

以上是初步验证结果,可以作为baseline成绩。后续计划从以下方面进行优化:

1、数据

        目前训练数据偏小,深度学习的应用效果不明显,计划对文本数据进行增强(augment)。在图像领域,经常对图片采取拉伸、缩小、偏移等操作以扩大数据集,对于文本,我们也采用类似的思想。这里选择对文本进行随机shuffle和随机采样(按百分比采样)两种方式对文本进行扩容。

        由于时间关系,暂时只在fasttext上试验了扩容数据,结果如预期,提升并不明显。预计在cnn、rnn等深度网络里应该会起更大的作用。
    此外,由于类别不平衡,也需要进一步对不平衡数据做处理,以优化算法的性能。
 

2、算法

现在算法工程师不会深度学习基本上就是落伍了,因此不管有没有用,再进一步采用更多、更强的模型(如引入attention机制),并对参数等进行优化,以期望能有进一步提升。

有点小遗憾的是没有好的GPU,都是CPU计算。要知道即使是用我的早该淘汰的Geforce 940mx,计算起来也比I5 HQ的CPU快上1-2倍。不过一用GPU跑,我的笔记本就别想干别的活了。

3、引入外部数据

前面的验证都是基于数据集数据,包括idf和词向量都是用训练集统计和训练出来的,由于数据规模太小,因此尝试引入外部数据统计和训练出来的idf和词向量。

4、特征

  初步验证采用的特征比较粗糙,计划进一步对特征进行精细化处理,如提高分词的准确率、完善停用词、进一步优化特征选择、过滤、组合等

5、模型集成

通过比对不同模型的分类结果,可以发现差异性较大,如对于同一个分类结果,fasttext和线性svm差别较多,因此多模型集成应该可以收到一定的效果。