现有一个传统的工单系统,该系统并不是自建。工单系统天天会产生大量工单,须要较多人力专门作派发的相关工做,以将工单派发给对应处理人员。为提高工做效率节约人力成本,同时也解放员工重复劳动,考虑对其进行智能改造。mysql
因为并不是自建系统,因此要作智能化改造就涉及两个方面:系统自动化和系统智能化。算法
系统自动化,自动化能解放双手,做为智能化的辅助手段。由于原工单系统上人机交互是经过浏览器的,因此系统的自动化其实主要就是实现自动操做,模拟人工操做各项功能。sql
有两个方案:浏览器插件和自动化测试工具。考虑到浏览器插件方式到后面智能化与模型调用时比较麻烦,可优先考虑使用自动化测试工具。好比selenium。浏览器
系统智能化,能赋予决策能力,至关于大脑,决策完后再由系统自动化实施操做。就单单工单系统智能分发功能来讲,主要就是根据工单历史派发记录,多维度特征统计,学习一个模型能决策工单派发给某个员工比较合理。bash
须要作的是收集历史工单数据以及关联的派发给哪位员工(包括员工的属性),样本数据量要有保证,并且抽样时工单时间能包含一年的数据,这样能更好保证样本分布与真实数据分布一直。网络
同时为了更好建模,能够收集一线工做人员派单的常见规则。数据结构
由于实际分配时跟员工的属性并无很强的关系,主要是须要跟进工单标题及内容来分发的,因此若是只是单纯地使用员工属性做为特征并使用神经网络做为模型的话效果不好。并发
而若是直接对工单标题内容分词并作词向量处理,而后再做为神经网络的特征通用效果也不好,这个缘由很明显,维度灾难,常见单词随便达万或十万级别。机器学习
以上方案行不通,其实还有一个很经典的处理方式,那就是计算文本之间的类似性。经过类似性的值来作决策,标题类似性加内容类似性。工具
根据历史工单,咱们要先统计词频。注意这里不必用逆文档频率,并且每一个员工实际上是有本身的词云的,统计员工各自的词频才更符合实际状况。对于一个词,不一样的员工的词频是不同的,词频很高的说明平时正好就是作这类单词相关的工做。此外,标题和内容的词频也应该分开统计,因此词频实际上是有三个维度:员工、问题、内容。
有了词频接下来的工做就好作了,词频直接映射到向量。有了向量,那么经过向量空间模型及余弦类似性即可计算文本之间的类似性。也就是说,对于一个新工单,我计算标题和历史工单标题的类似性,而且计算内容和历史工单内容的类似性,将二者合并,类似性最大的即是要找的工单。固然,实际状况能够设置一个阈值,超过阈值才认为匹配成功。
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
复制代码
若是想要上生产系统,如今还有个性能问题,直接计算全部历史工单的类似性性能至关低下。为了符合在生产环境响应要求,引入全文搜索引擎。经过搜索引擎能够减小大量无关的计算,而且能很好控制整体响应。
主要思路是将工单标题和内容进行index,匹配时先经过搜索引擎将相关内容标题search出来,接着再计算类似性。注意通常不要直接使用全文搜索引擎计算类似性,太粗糙,没有正对性。并且方便使用word2vec或bert等模型算法,固然若是能写一个引擎的话则能够把全部工做都下沉到搜索引擎来作。
-------------推荐阅读------------
个人开源项目汇总(机器&深度学习、NLP、网络IO、AIML、mysql协议、chatbot)
跟我交流,向我提问:
欢迎关注: