如何智能化改造工单系统分发

3,204 阅读4分钟

前言

现有一个传统的工单系统,该系统并非自建。工单系统每天会产生大量工单,需要较多人力专门做派发的相关工作,以将工单派发给对应处理人员。为提升工作效率节约人力成本,同时也解放员工重复劳动,考虑对其进行智能改造。

两方面

由于并非自建系统,所以要做智能化改造就涉及两个方面:系统自动化和系统智能化。

系统自动化

系统自动化,自动化能解放双手,作为智能化的辅助手段。因为原工单系统上人机交互是通过浏览器的,所以系统的自动化其实主要就是实现自动操作,模拟人工操作各项功能。

有两个方案:浏览器插件和自动化测试工具。考虑到浏览器插件方式到后面智能化与模型调用时比较麻烦,可优先考虑使用自动化测试工具。比如selenium。

TIM图片20190416162441

系统智能化

系统智能化,能赋予决策能力,相当于大脑,决策完后再由系统自动化实施操作。就单单工单系统智能分发功能来说,主要就是根据工单历史派发记录,多维度特征统计,学习一个模型能决策工单派发给某个员工比较合理。

需要做的是收集历史工单数据以及关联的派发给哪位员工(包括员工的属性),样本数据量要有保证,而且抽样时工单时间能包含一年的数据,这样能更好保证样本分布与真实数据分布一直。

同时为了更好建模,可以收集一线工作人员派单的常见规则。

TIM图片20190416162024

方案分析

因为实际分配时跟员工的属性并没有很强的关系,主要是需要跟进工单标题及内容来分发的,所以如果只是单纯地使用员工属性作为特征并使用神经网络作为模型的话效果很差。

而如果直接对工单标题内容分词并做词向量处理,然后再作为神经网络的特征通用效果也很差,这个原因很明显,维度灾难,常见单词随便达万或十万级别。

以上方案行不通,其实还有一个很经典的处理方式,那就是计算文本之间的相似性。通过相似性的值来做决策,标题相似性加内容相似性。

统计词频

根据历史工单,我们要先统计词频。注意这里没必要用逆文档频率,而且每个员工其实是有自己的词云的,统计员工各自的词频才更符合实际情况。对于一个词,不同的员工的词频是不一样的,词频很高的说明平时正好就是做这类单词相关的工作。此外,标题和内容的词频也应该分开统计,所以词频其实是有三个维度:员工、问题、内容。

TIM图片20190416160010

相似性计算

有了词频接下来的工作就好做了,词频直接映射到向量。有了向量,那么通过向量空间模型及余弦相似性便可计算文本之间的相似性。也就是说,对于一个新工单,我计算标题和历史工单标题的相似性,并且计算内容和历史工单内容的相似性,将两者合并,相似性最大的便是要找的工单。当然,实际情况可以设置一个阈值,超过阈值才认为匹配成功。

from numpy import dot
from numpy.linalg import norm
if norm(vec1) * norm(vec2) != 0:
    sim = float(dot(vec1, vec2) / (norm(vec1) * norm(vec2)))
else:
    sim = 0

TIM图片20190416163215

性能问题

如果想要上生产系统,现在还有个性能问题,直接计算所有历史工单的相似性性能相当低下。为了符合在生产环境响应要求,引入全文搜索引擎。通过搜索引擎可以减少大量无关的计算,并且能很好控制总体响应。

主要思路是将工单标题和内容进行index,匹配时先通过搜索引擎将相关内容标题search出来,接着再计算相似性。注意一般不要直接使用全文搜索引擎计算相似性,太粗糙,没有正对性。而且方便使用word2vec或bert等模型算法,当然如果能写一个引擎的话则可以把所有工作都下沉到搜索引擎来做。

TIM图片20190416164221

-------------推荐阅读------------

我的开源项目汇总(机器&深度学习、NLP、网络IO、AIML、mysql协议、chatbot)

为什么写《Tomcat内核设计剖析》

2018汇总数据结构算法篇

2018汇总机器学习篇

2018汇总Java深度篇

2018汇总自然语言处理篇

2018汇总深度学习篇

2018汇总JDK源码篇

2018汇总Java并发核心篇

2018汇总读书篇


跟我交流,向我提问:

欢迎关注: