码迷,mamicode.com
首页 > 其他好文 > 详细

实例详解:用机器学习实现IT服务票单的分配

时间:2020-12-24 12:40:55      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:类型   网络模型   预测   扩大   不用   文件上传   编译   表示   安全   

技术图片

用认知计算处理现实生活中的业务是一件很有意义的事情,比如在IT服务管理领域。机器学习对处理现实案例中的分类与分配问题将会比人工更为有效,比如以下几种场景:

  1. 在服务台,几乎三至四成的事故票单没有被发送至相应的团队,这些票单一直毫无目的地漫游着。等相应团队收到票单,事故已经蔓延到高层管理人员处,引起许多麻烦。

  2. 假设用户使用打印机遇到问题。用户联络服务台,服务台分发票单给IT支持团队,然后他们通过更新用户系统里的配置系统,以解决票单所提事故。如果类型问题重复出现,就可以使用这一部分数据,并利用非结构化数据分析其潜在问题。这样就可以分析问题趋势并减少事故票单。

  3. 可以回应与处理用户票单的虚拟机器助手。

基于时间和资源上的限制,本文将以第一个案例为例进行分析。

所使用的工具和技术:

· ServiceNow Instance (一个IT服务管理平台)

· AWS Lambda功能

· EC2 Instance

· Python

· 人工神经网络模型

· 开源获取的五万余票单样品

技术图片

过程概观

过程的整体工作流程可以分成几个部分。下图显示高级的概观。

技术图片

数据集:

从ServiceNow平台直接抽取数据集,并尝试使用ML技术将其分类和贴上标签。只保留票单的描述和种类,然后利用解析学将事故分为五大类。

使用模型的方式将事故五大类分类后,以便给票单贴上标签。

用例综述:

在典型的IT环境下,多数关键问题是以票单形式进行追踪和处理的。IT的基础设施是一组在网络联在一起的成分。所以,当其中一个成分失效,其他成分也会受到影响。有时甚至需要几天时间才能知道哪里出错。所以通知组件拥有者是非常必要的。

人们必须迅速采取适当措施以阻止同类事件再次发生。

这些事故通常是用户拨打服务热线或者服务台报告,他们是IT服务的前线。不幸的是,并不是所有人都熟悉每个成分,因此票单才会被错误转送。如何让票单迅速转送至正确的团队呢?可以使用自然语言处理解决这个问题。

IT服务管理产生40多GB的数据,为我们提供了足够的数据训练与安装模型。

模型安装完毕后,可以为业务部门节省数十亿美金,这些部门曾因这个问题未能达成多个服务级别的协议。

依据云计算的IT服务管理:

云计算的发明,创造了机器学习算法和IT服务管理继承的可能性。

技术图片

技术图片

在本次用例中使用ServiceNow,这是一个基于云计算的IT服务管理应用程序。我们也利用API网关获取了AWS Lambda功能里的机械学习模型。

ServiceNow与AWS的集成:

网络服务使应用程序能够通过网络与其他软件应用程序连接,从而实现提供者(服务器)和客户(消费者)之间的信息交换。

网络服务消费者(客户)向网络服务提供者(服务器)请求信息。网络服务提供者处理该要求后回复了状况代码和响应体。当收到响应体后,网络服务消费者将从响应体提取信息并使用该数据。

ServiceNow可从第三方提供者或者另一个ServiceNow instance获取网络服务。

技术图片
在本例中,利用Rest网络服务让API网关引发端点url,并使用发行票单时运行的JavaScript获取了该url。

发行票单时,JavaScript会被引发,导致事故描述被发送至安装在AWS的模型。随后,模型将执行机器学习运算并将预测类型和可能性发回。

技术图片

使用主题模型分类

· 在不确定主题内容的情况下,可预先确定主题数量。

· 每个文档都可分为不同主题。

· 而每个主题都可分为不同字类。

我们使用了 NLTK’s Wordnet 来查找字义、同义词、反义词等。此外也使用了 WordNetLemmatizer 查出单词词根。

然后,逐行读取数据集,将每一行为 LDA (隐含狄利克雷分布)备好,再把它们存进列表。

技术图片

使用Gensim进行LDA

首先从数据编写一个词典,并将其转换至词袋模型语料库,再储存词典和语料库以备将来使用。

技术图片

然后使用LDA尝试寻找五个主题:

技术图片

技术图片

技术图片

pyLDAvis

pyLDAvis 旨在帮助用户诠释主题模型里的主题,主题模型是被放入文本数据语料库里的。该软件包从其中一个LDA主题模型中提取信息,以实现网络交互式可视化。

技术图片

将五个主题可视化

技术图片

技术图片

技术图片

从主题模型这里,得到了一个结论。那就是整个数据集分为以下五类:

· 网络

· 用户维护

· 数据库

· 应用程式介面

· 安全

之后,依此给数据集贴了标记,并制作了一个数据集,以此在上面进行监督式学习。

技术图片

RNN分类

端到端文本分类管道由以下组件组成:

  1. 训练文本:这是监督式学习模型学习和预测所需类型的输入文本。

  2. 特征向量:该向量包含描述所输入数据特征的信息。

  3. 标签:这些是模型预测的预定义类型。

  4. ML Algo: 模型通过这个算法处理文本分类【比如使用CNN(卷积神经网络), RNN(递归神经网络), HAN(多层注意力模型)】。

  5. 预测模型:该模型受历史数据集训练,而这些历史数据集可以执行标签预测。

技术图片

技术图片

使用RNN进行事件分类

递归神经网络(RNN)是一种人工神经网络,各节点间可连接成一按序树状图。由此可以显示一个时间序列上的动态时间行为。

使用来自外部输入的知识可以提高RNN的准确度,它集成了关于各种字义和语义的信息。这些信息是在非常大的数据库中训练和提炼的,目前使用的是训练前嵌入的GloVe.

RNN是一系列的神经网络块。它们像铁链一样相互连接,每一块节点都在向下一个节点传递信息。

AA是一大块神经网络,它读取了输入文 xtxt 和输出值 htht。通过循环信息得以一节一节传递消息。

技术图片
LSTM网络

长短期记忆网络,通常简称 LSTMs ,是一种特殊的 RNN ,具有长期学习的能力。它们由 Hochreiter 和 Schmidhuber 于1997年提出, 许多研究者进行了一系列的工作对其改进并使之发扬光大。1 LSTM在处理各类问题上效果都非常好,现今被广泛使用。

LSTMs 在设计上是为了避免长期依赖的问题。长时间记住信息是默认行为,而不是努力学习的结果。

所有 RNN 都具有一串重复的神经网络模块。在标准的 RNN 中,这些重复的模块结构简单,比如只有一个 tanh 层。

技术图片
标准 RNN 的重复模块仅包含一个单层。

LSTM 也有类似的链状结构,但是其重复模块的结构却不同。他们不只拥有一层神经网络,而是有四层,它们以一种非常特殊的方式相互作用。

技术图片
LSTM 的重复模块包含四个互相作用的神经网络层。

不用太担心其中的细节。之后将逐步探讨 LSTM 图里的每一部分。现在,先介绍一下将要使用的符号。

技术图片

上图中,每条线表示一个完整的向量,从一个节点的输出传递到其他节点的输入。粉红圆圈表示点态运算,比如向量加法;而黄色格子则是已学习的神经网络层。如果两条线交汇,那代表着向量的连接;而相反的如果它们分叉,则表示其内容已被复制然后被送至其他位置。

技术图片

LSTM 的核心思想

LSTM 的关键是元胞状态一一如下图横穿整个图表顶部的水平线。

元胞状态有点像是传送带。它直接闯过整个链,过程中线性交互很少出现。上面承载的信息可以很容易地随着这个过程流过而不受影响。

技术图片

LSTM 可以对对元胞状态移除或添加信息,这能力由一种叫 “门” 的结构小心管理。

“门” 是一种选择性让信息通过的方式。它们由一个 sigmoid 神经网络层和一个点态相乘操作组成。

技术图片

Sigmoid 层输出0~1间的值,表示多少成分可否通过。0值表示 “不允许通过” ,而1值表示 “让所有信息通过”。

一个 LSTM 有三个“门”,以保护和控制元胞状态。

技术图片

LSTM逐步详解

LSTM 的第一步是决定将要中元胞状态从扔掉哪些信息,由一个叫做 “遗忘门层” 的sigmoid层来做此决定。它观察 ht-1ht-1 和 xtxt,然后针对元胞状态 Ct-1Ct-1 的每个数字输出00~11之间的值。11表示 “完全保留信息” ,00 表示 “完全丢弃信息” 。

回到语言模型的例子,该语言模型根据之前的单词预测下一个单词。在这样的问题中,元胞状态可能包含当前主语的性别,因此需要选择正确的代词。当遇到一个新的主语时,就需要忘掉旧主语的性别。

技术图片

下一步决定将哪些新信息储存到元胞状态中。这里有两部分。第一,有一个称为“输入门层”的 Sigmoid 层决定我们要更新哪些数值。接下来,一个 tanh 层创造了一个新的候选值向量,C tC~t,并加进状态里。下一步,需要将以上两个数值结合,用于更新状态。

在语言模型的例子中,可以把新主语的性别加到元胞状态里,以取代正遗忘的旧主语性别。

技术图片

现在是更新旧元胞状态 Ct-tCt-t 到新元胞状态 CtCt 的时候了。根据上面的步骤执行即可。

将旧状态乘以 ftft,把之前决定遗忘的内容忘掉。然后再加上 it?C? tit?C~t。这个是新的候选值,按决定更新每个状态值的大小进行增减。

在这语言模型的例子,我们的做法如前面步骤,移除旧主语性别的信息,并添加新信息。

技术图片

最后,需要决定输出。该输出将基于元胞状态,但却是经过过滤的。首先,建立一个 sigmoid 层以决定元胞状态要输出的部分。然后,将元胞状态通过 tanhtanh 之后(将值扩大至-1-1和11之间),与 sigmoid 门的输出值相乘,这样就只会输出想输出的部分。

比如这个语言模型的例子中已出现了主语,因此可能需要输出与动词相关的信息。举个例子,通过确定输出主语是单数还是复数,以便于接下来可以输出正确形式的动词。

技术图片

技术图片

LSTM的变体

前面所形容的是很普通的 LSTM。并非所有的 LSTM都与上述所说的相同。似乎每一篇谈论 LSTM 的文章都使用的版本略有不同,其中微小的差异更值得注意。

Gers 和 Schmidhuber 曾于2000年提出一个流行的LSTM变体,即在原来的LSTM基础上加入了“窥视孔连接”。这表示我们让门层得以观察元胞状态。

技术图片

上图给所有的“门”加入了“窥视孔”,不过也有一些文章只加了一部分,并非所有。

另一种变体是使用对偶的遗忘门和输入门。不应该分开决定该忘记哪些信息、该添加哪些新信息;而应该同时作出以上的决定。操作时应在需要添加信息的地方忘记该处的旧信息。同理只会在忘记一些旧信息后往状态里添加新数值。

技术图片

另一种 LSTM 变化比较大,它叫做门控循环单元网络,简称 GRU,由Cho等人于2014年提出。GRU 将遗忘门和输入门合并成为单一的 “更新门” 。它也将元胞状态和隐状态合并,同时作出其他一些变化。该模型比标准的 LSTM 模型更加简化,现在也愈发受欢迎。

技术图片

技术图片

结构

一般模型

技术图片

技术图片

LSTM 模型

技术图片

技术图片

在对文本数据使用 Keras 前,必须先对文本进行预处理。此处可以使用 Keras 的词语切分器(Tokenizer)类型。这东西根据词频进行词语切分,然后将所保留的最大单词数做成 num_words 参数。

一旦在数据上安装好词语切分器后,可以使用它将问字符串转换为数字序列。这些数字代表着字典里每个单词的位置(可以将其视为映射)。

· 本项目尝试使用递归神经网络和Attention机制的 LSTM 编码器处理问题。

· 在操作前馈神经网络以分类前,通过 LSTM 编码器尝试将 RNN 最后输出的文本信息编码。

· 这与神经翻译机器和 Seq2Seq 学习模型很相似。

·使用 Keras 里的 LSTM 层来处理长期依赖的问题。

技术图片

模型评分和挑选

模型评分和挑选需根据一定的标准评价指标,包括:准确度、精密度、F1 评分,以下是定义:

技术图片

其中:

· TP 表示真阳性分类的数量。也就是说,带有实际标签A的记录被正确归类,或“被预测”为标签A。

· TN是真阴性分类的数量。也就是说, 实际上不带标签A的记录被正确归类为不属于标签A。

· FP 是假阳性分类的数量。例如,实际上带着标签A以外的记录被错误归类为属于A类型。

· FN 是假阴性分类的数量。例如,实际上导带有标签 A 的记录被错误归类为不属于A 类型。

技术图片
预测分类的“混淆矩阵”vs实际分类的“混淆矩阵”

如图所示,预测分类和实际分类合称为“混淆矩阵”。在这些定义背景下,各种评估指标提供了以下见解:

· 准确度:模型预测正确的总数所占的比例

· 精密度(也称阳性预测值):在特定类型里预测正确相对于所有预测所占的比例。

· 召回率(也称真阳性率、TPR、命中率或灵敏度):真阳性相对于实际阳性所占的比例。

· 假阳性率(也称虚警率):假阳性相对于实际阳性所占的比例(FPR)。

· F1:(较为稳固的)精密度和召回率间的调和平均数。

技术图片

输出

一般 RNN 模型

技术图片

技术图片

带有 LSTM 层的 RNN

技术图片
技术图片

技术图片

技术图片

观察

一般无 LSTM 的 RNN 模型提供了高达66%的准确度,而当 RNN 使用 LSTM 网络层之后准确度可以提升至69%。

少量数据导致准确度只能停滞在70%,而就如图中所示,增加图上x轴的节点也毫无影响。

然而69%的分类准确度是足够的。因为我们打算在线培训它,并随着数据量的增长不断提高准确度。

技术图片

模型分配

在这一部分项目中,我们计划在Amazon AWS上运行这个模型,并将其与 Service Now 组合起来,以便模型可以在线上实时预测。为此,首先将模型放进 pickle 文件将其导出。此外,编写一个函数,这函数将连接到 S3 储存桶,并从那里获取和读取 pickle 文件并重新创建模型。

技术图片

工作流程如下:

  1. 在 ServiceNow 制造时间。

  2. AWS 接收到事件,然后AWS EC2 实例或服务开始运行。

  3. 从 S3 储存桶取 function.py 文件,它将从 Pickle 文件读取并重建模型。

  4. 它将从服务请求中提取特征,比如事件描述。

  5. 现在,代码将在 AWS Lambda 执行,它将提供事件所属类型。

  6. 在 AWS 制造一个 EC2实例。

  7. 首先,先创建一个 AWS 账户。可在一年内免费使用它的有限服务。

  8. 创建一个 EC2 实例并选择免费方案机器。或者如果账户里有积分,并且需要更强大的机器,也可以选择其他选项。

  9. 在 AWS 上为 Python 配置一个虚拟运行环境,完成后将所有配置文件压缩到一个文件中,并将 function.py 文件包括在内将把这个文件上传到 AWS S3 储存桶。

  10. 创建一个 S3 储存桶并上传 pickle 文件,其中包含模型的详细信息如模型名称、超参数和模型的权重。同时将含有 function.py 文件以及 python 虚拟环境的配置设置的 zip 文件上传。

技术图片

  1. 现在,最后设置 AWS Lambda。我们将在这里运行 python 脚本并进行预测。

AWS Lambda 是个计算服务,允许在无需提供或管理服务器的情况下运行代码。它可以自己处理这部分。而 AWS Lambda 最大的优势是只需要为所消耗的计算时间付费,代码不运行时不计费。可以使用 AWS Lambda 运行任何应用程序或后段服务运行代码,且无需任何管理工作。AWS Lambda 在高度可用的计算基础设施上运行代码,并执行计算资源的所有管理工作,包括服务器和操作系统的维护、容量分配、自动缩放、代码监视和记录。唯一需要做的就是用 AWS Lambda所支持的语言之一提供代码。

由于不熟悉,此项目暂时无法设置 AWS Lambda,需要翻阅其文档导致时间不足。因此需要计划延长项目至其他课程以完成它。

技术图片

ServiceNow 和 AWS 一体化

网络服务使应用程序能够通过网络与其他软件应用程序连接,从而实现提供者(服务器)和客户(消费者)之间的信息交换。

网络服务消费者(客户)向网络服务提供者(服务器)要求信息。网络服务提供者处理该要求后回复状况代码和响应体。当收到响应体后,网络服务消费者将从响应体提取信息并使用该数据。

ServiceNow可从第三方提供者或者另一个ServiceNow instance获取网络服务。

技术图片

在本例中,利用Rest网络服务让API网关启动端点url,并使用发行票单时运行的JavaScript获取了该url。

发行票单时,可以使用JavaScript,该程序可以将事件描述发送至我们安装在AWS的模型。随后,模型将执行机器学习运算并将预测类型和可能性发回。

技术图片

留言 点赞 发个朋友圈

我们一起分享AI学习与发展的干货

编译组:苏英豪、伍颖欣
相关链接:
https://towardsdatascience.com/it-support-ticket-classification-and-deployment-using-machine-learning-and-aws-lambda-8ef8b82643b6

如需转载,请后台留言,遵守转载规范

推荐文章阅读

ACL2018论文集50篇解读
EMNLP2017论文集28篇论文解读
2018年AI三大顶会中国学术成果全链接
ACL2017 论文集:34篇解读干货全在这里
10篇AAAI2017经典论文回顾

长按识别二维码可添加关注

读芯君爱你

技术图片

实例详解:用机器学习实现IT服务票单的分配

标签:类型   网络模型   预测   扩大   不用   文件上传   编译   表示   安全   

原文地址:https://blog.51cto.com/15057819/2567743

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!