全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 数据分析与数据挖掘
768 0
2020-12-16
支持呼叫中心中的NLP应用程序
本文是我上一篇有关在支持环境中使用机器学习的文章的延续。我分享了有关如何使用简单的python代码如何丰富我们自己的组织或客户组织中的呼叫中心/支持部门活动的观点。在那篇文章中,我分享了关于使用ML可以为当前环境带来哪些变化以及如何为当前环境带来变化的见解,以便为解决客户呼叫提供更好的服务时间,并避免同一客户的多个用户重复提出相同的故障单。略有变化,因此增加了工单积压计数。
Python词典用于创建非常有用的历史支持解析日志,这对于经常参与消防模式并确保SLA不违反且升级不会流向S1 / L2(Level1,Level2)人员非常方便。下一级。您可以在这里参考我以前的博客。
通常可以看到,由于不同的工程师在24×7的呼叫中心工作,他们可能不知道解决方案已经存在或将要采取,因此支持人员花费大量时间来解决过去发生的故障单。需要一些时间从诸如Jira / Seibel等工具中提取相同内容。另外,如果我们可以自动进行票证优先级划分,那么这将减少当前为票证创建优先级的停机时间,并改善整个流程。
在此博客中,我将分享更多有关如何在组织的支持活动中使用NLP的想法,这将有助于支持人员,并改善总体流程,使可见的变化比以前发生的变化明显。该博客分为3个部分/主题,如下所示:
第一部分:
故障单的性质/  重要性:在任何受支持的环境中,了解我们从生产环境中获得的故障单及其原因非常重要。在这里,我分享了一些简单但非常有效的分析报告,这些报告可以从python中的简单命令中获取。
第2节:
支持票的优先级。通常,优先级设置为P1,P2,P3,P4呼叫,其中P1,P2需要立即解决,因为这会影响业务运营。P3,P4是需要在指定时间内修复的软件错误,尽管它们不会影响操作,因此支持人员有一些时间,例如,典型的P3呼叫需要2-3天,而P4呼叫需要1周。在本节中,我分享了如何使用ML自动处理过去历史语料库中任何支持单的优先级,以及如何将15-30分钟(如果使用了Jira等工具)的时间缩短到2-3分钟(在工程师可以开始故障单分析之前,使用ML将其自动化)。
第3节:
从语料库中识别出相似的票证:是否从多个客户那里获得了相同的票证,并且略有不同?这很有可能,因为多个客户正在使用我们的产品。在本节中,我将告诉您如何从历史语料库中检查最相似的故障单,如果较早的故障单已经存在解决方案,并且无需重复分析,这将有助于提供快速的解决时间。即使票证不是相同但非常相似,工程师也可以随时掌握如何进行分析的想法,并在那里节省一些时间。因此,现在让我们进入主题。
主题1:很少有用但简单的分析/统计报告
nlp呼叫中心
上面的图表可以用简单的python命令生成,但是非常有用。它按优先级描述了当前的支持积压工作(仅从P3的所有P3集中)。下一个
nlp呼叫中心
这将告诉每个人谁都被分配了问题,并且每个工程师都有未解决的问题计数。同样,可以提取更多图表(Issue_Resolution_category:{软件错误:(99),用户错误:20,性能:15,不可重现:4……。},软件问题:{Java Servlet:(55),环境( 11),对数增长:(3)…..}等。
主题2:票证自动优先排序
数据集快照
数据列
输出-
索引([[摘要],“问题密钥”,“问题ID”,“问题类型”,“状态”,
       “项目密钥”,“项目名称”,“项目类型”,“项目负责人”,
       “项目说明”,“说明”,“优先级”,
       ...
       ''Comment1','Comment2','Comment3'],dtype ='object',长度= 341)
我将在本文中使用的列目前仅是“摘要”,“描述”和“优先级”列。首先让我们检查“摘要”和“描述”的分布。
从上面可以看出,大多数摘要的长度为4-8个字,描述长度为50-65个字。
我有过去历史数据的票证。使用此方法,我们将在给定票证的情况下解决预测优先级的多类分类问题。在本文中,该特定博客的重点更多地放在应用程序上,而不是实际概念本身。但是,我将重点介绍所有关键领域并探讨其周围的概念。我将展示TfidfVectorizer但对于部署的版本,我们需要使模型更加坚固,并尝试不同的预先训练的车型,如W2Vec或手套也
数据形状
输出量
(1000,341)
df = data [['Summary','Description','Priority']]
输出量
数据框中的样本行
概要描述优先
OWD.xyzsoftware.com –Paul,您好:\ n \ nOWD.xyzsoftware.com,今天简要介绍了一下。这些服务都在运行,因此Magios并未提醒我们。当用户登录时,输入凭据后,用户将被循环回到登录屏幕,而不会出现错误。我通过重新启动服务解决了该问题。在OWD,我们已经有几个星期没有这个问题了。\ n \ n \ n \您能看到吗…中
KS生产报告问题您可以检查AWS监控系统是否有任何错误以及Kate spade Production服务器吗?从东部标准时间晚上7点开始报告性能问题。我们看不到支持方面的任何问题。这只是一个完整的检查,并向凯特黑桃报告。支持人员认为问题出在Kate Spade的网络上。\ n \ n获取[Outl…中
为模型创建X,y:
一旦完成所有预处理步骤(即,估算缺失值(如果有)并使用NLTK或Spacy清除数据),我们将另外创建2列作为Summary clean和description clean。现在,在中创建一个新列数据框作为“门票”将是以下摘要和说明的合并
df ['Ticket'] = df ['clean_Summary'] +''+ df ['clean Description']
标签编码目标(在这种情况下,“优先级”列值)
le = LabelEncoder()
df ['Priority'] = le.fit_transform(df ['Priority']。values)
以下是使用TfidfVectorizer的ML模型的代码段
…。
从sklearn.preprocessing导入LabelEncoder
从sklearn.feature_extraction.text导入CountVectorizer,TfidfVectorizer
tf = TfidfVectorizer(min_df = 5,max_df = 0.9)#删除不太频繁或过于频繁的字词
tf.fit(df ['Ticket']。values)
td_vec = tf.transform(df ['Ticket']。values)
…。
目标= np.array(df.Priority)
从sklearn.model_selection导入train_test_split
X_train,X_val,y_train,y_val = train_test_split(td_vec,target,test_size = 0.25,random_state = 42,shuffle = True)
(((750,1064),(250,1064))
…..
最后是模型
从sklearn导入naive_bayes
从sklearn.linear_model导入LogisticRegression
从sklearn.metrics导入precision_score
#朴素贝叶斯模型
模型= naive_bayes.MultinomialNB()
model.fit(X_train,y_train)
nbp = model.predict(X_val)
precision_score(y_val,nbp)
0.556
模型= LogisticRegression()
model.fit(X_train,y_train)
nbp = model.predict(X_val)
precision_score(y_val,nbp)
0.58
现在,如何进一步提高准确性得分?我们可以尝试很多技术。我将重点介绍本文中的第一个。
文字数据扩充
创建一个新的权重特征。(高优先级问题比中优先级问题具有更大的权重)
向上采样以平衡目标类别
文字资料扩充
在这里,我们只是随机地随机整理每个句子中的标记以创建一个新的标记。请记住,上下文可能会发生变化,因此我们需要为创建的新记录找到一些最佳值。由于在我的情况下,平均票证描述长度在50-65个令牌之间,因此我在每个原始签发语料库中创建了5个新签发。(1000-> 5000)。下面的代码段-
#简单的文字扩充
从nltk导入word_tokenize
nltk.download('punkt')
随机导入
def扩充(句子,tvalue,n):
    new_sentences = []
    目标= []
    单词= word_tokenize(句子)
    对于我在范围(n)中:
        random.shuffle(单词)
        new_sentences.append(''.join(words))
        target.append(tvalue)
    new_sentences = list(set(new_sentences))
    返回new_sentences,目标
文本数据扩充后的模型精度提高如下
#朴素贝叶斯模型
0.81
#Logistic回归模型
0.93
pred = model.predict(X_val)
掠夺
数组([0,3,0,...,3,0,0])
le.inverse_transform(pred)
array(['Critical','Medium','Critical',...,'Medium','Critical',
       [关键]],dtype = object)
最后,我们可以尝试更多模型,例如随机森林,XGBoost,LightGBM等,并将结果与??其他模型进行比较。
现在到本博客的最后一部分
主题3:从票证语料中找出最相同的问题
这有助于在开始对任何故障单进行根本原因分析之前预先知道是否报告了任何类似的故障单,如果是,则为该故障单提供的解决方案是什么。请考虑以下两个票证说明。
'未验证系统中输入的最后Challan号',
'未验证系统中输入的最后滚动号'
以上两者看起来非常相似,并且两者的最可能分辨率非常相似。
让我们看看如何使用NLP来检测这些类型的相似性。
我将用gensim Doc2Vec进行演示,它基本上是W2Vec的扩展,但是在这里我们可以对段落进行向量化,而不是矢量化标记。但是我将使用它来进行句子比较。首先,我们需要创建一个过去的票证语料库(请参阅我以前的博客文章“使用简单的Python命令现代化支持日志”)。下面的代码段
Ticket = pd.read_csv(filepath',encoding ='ISO-8859-1')
islst = ticketlist ['Issue']。to_list()      #票证旧语料清单
def _MSS(most_like):               #函数用于输出最相似的来自
    标签
的语料库的票证,[('MOST',0)]中的索引:print(u'%s%s:%s \ n'%(label,most_similar [index] [1],data [int(most_like [index] [0])])))标记数据= [针对枚举(islst)中的_d的[TaggedDocument(words = word_tokenize(_d.lower()),tags = [str(i)]))                  
max_epochs = 2000     #超参数。我们可以进行实验,直到获得最佳输出
vec_size = 100             #嵌入大小
alpha = 0.025            #lr –初始学习率
模型= Doc2Vec(size = vec_size,alpha = alpha,min_alpha = 0.00025,min_count = 1,dm = 1)   #分布式内存”(PV-DM)而不是分布式词袋(PV-DBOW)
模型。build_vocab(tagged_data)
用于范围(max_epochs)中的时期:   #训练模型
    print('iteration {0}'。format(epoch) )
    model.train(tagged_data,
                total_examples = model.corpus_count,
                epochs = model.iter)
    #降低学习率
    模型.alpha-= 0.00001
    #固定学习率,无衰减
模型    .min_alpha = model.alpha
模型。Save(“ d2v.model”)
model = Doc2Vec.load(“ d2v.model”)
test_data = word_tokenize('系统中的最后Challan编号不正确'.lower())#使用新票证编号v1测试模型= model.infer_vector(TEST_DATA)_MSS(similar_doc)##   终于从语料库打印最相似的句子概率得分沿MOST 0.32075077295303345:在系统送入最后滚动号没有被验证的
几道验证TEST_DATA = word_tokenize('营业税领域捕获PAN / GIR应该是16位数字..lower())     
MOST 0.6367178559303284:在“税收收集”的销售税计划中,该字段用于捕获PAN / GIR no / Reg的详细信息。没有?其他人只能输入14位数字。而空间需要增加到16位数字。
test_data = word_tokenize('如果交易维护中的``收到订阅''列而不是SB A / c编号,则应为可操作的A / C编号。''。lower())
MOST 0.7423350214958191:在DA主维护中,系统允许我们将DA%age定义为小于100%。如果DA百分比年龄大于100,则出现消息:DA百分比应小于100。提供了按适用比率定义DA百分比年龄(可能大于100)的规定。
从历史记录中识别出最相似的故障单后,支持人员可以轻松地从解决方案日志字典中获得为该故障单提供的解决方案。
题库
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群