Page 85 - 《软件学报》2021年第11期
P. 85

袁敏  等:面向数据特征的人机物融合服务分派方法                                                        3411


                 有用户提交的任务请求,本文的目标是,选择最适合执行该任务的业务员.通过引入业务员概要描述文件,并与
                 任务特征进行相似度计算,以推荐更适合执行相应任务的业务员.
                    文献[8]中通过获取对项目的描述来建立概要描述文件,本文则通过获取项目的历史纪录生成概要描述文
                 件.概要描述文件是对业务员执行过的历史任务的概述,表示了该业务员处理过哪些任务以及经常处理哪些任
                 务,是业务员业务能力的概述.在获取到服务分派原始数据后,根据历史订单生成每个业务员的概要描述文件.
                 通过对任务和概要描述文件进行相关性分析,可以判断任务和服务的匹配度.匹配度越高,说明该业务员提供的
                 服务越契合提出该任务的用户,更容易满足用户需求.
                    此外,本文通过分类来缩小任务可分配的人员范围.随着统计学习方法的迅速发展、互联网在线文本数量
                 的增长和机器学习学科的兴起,一套解决大规模分类问题的经典方法逐渐形成.这个阶段的主要工作是人工特
                 征工程加浅层分类模型,整个分类问题就拆分成了特征工程和分类器两部分.
                    •   特征工程主要有人工挑选和机器学习等方法.人工挑选包括数据预处理、特征量化和特征筛选这 3 步:
                        数据预处理需要根据现实情况进行,可能会涉及缺失值处理、标点符号、停用词和中文分词等等;特征
                        量化的主要思想是在特征空间中将不同特征作为坐标轴对文件进行向量化,将向量化后的文件作为
                        分类器的输入;而特征筛选就是选择适合作为坐标轴的特征,一般是区分度明显的特征,常用的有文档
                        频率、信息增益等.
                    •   分类器的原理有很多种,包含朴素贝叶斯              [34] 、SVM [35] 和 KNN [36] 等.随着 ELMo [37] ,BERT [38] 等模型的发
                        布,一般都采用大规模语料上进行无监督预训练的深层模型,通过在下游任务数据上进行微调,就可达
                        到很好的效果.
                    本文实验采用了百度的开源深度学习平台 PaddlePaddle 开发的预训练模型管理工具 PaddleHub,可以借助
                 预训练模型更便捷地开展迁移学习工作.这里选择百度发布的知识增强的预训练模型 ERNIE                              [39] ,相较于 BERT
                 学习原始语言信号,ERNIE 直接对先验语义知识单元进行建模,增强了模型语义表示能力.
                    如算法 2 所示,根据任务描述进行分类,在适合的范围内筛选,再计算该任务与分支内的所有业务员概要描
                 述文件的相似度,根据相似度排序,然后选择 k 位业务员作为备选,为下一步算法的输入.
                    算法 2.  内容匹配度排序算法.
                    输入:用户集合 U,业务员集合 V,任务描述 depict,分支表 branch.
                    输出:相似度最高的 k 位业务员集合.
                    1.   Begin
                    2.     For i←1 to V.length do
                    3.        profile i ←V[i]⋅depict;   //根据历史任务生成配置文件
                    4.     End for
                    5.     For i←1 to U.length do
                    6.        v i ←∅;  //备选集初始为空
                    7.        d←classfy(depict i );   //根据任务描述分类
                    8.        For j←1 to V.length do
                    9.            if branch j =d
                    10.             v i ←v i +V[j];   //该分支所有业务员加入备选集
                    11.              s ij ←similar(depict i ,profile j );  //相似度计算
                    12.          End if
                    13.       End for
                    14.       Sort(v i ,s i );  //按相似度降序排序
                    15.       v i ←Top(v i ,k);   //留下相似度最高的 k 位业务员
                    16.    End for
                    17.  End
   80   81   82   83   84   85   86   87   88   89   90