使用 NMF 进行投诉分类
使用 NMF 进行投诉分类
使用非负矩阵分解的主题建模
在这里,我们将在这种技术的帮助下使用 NMF(非负矩阵分解),这是一种主题建模方法,我们将检测每张票中出现的模式和重复出现的单词。然后可以使用它来了解每个类别集群的重要特征。通过分离集群,我们将能够识别客户投诉的主题。
什么是 NMF(非负矩阵分解)?
非负矩阵分解是一种统计方法,可以帮助我们减少输入语料库或语料库的维度。在内部,它使用因子分析方法对连贯性较低的单词给予相对较少的权重。非负矩阵分解 (NMF) 是一种无监督技术,因此没有对模型进行训练的主题标签。它的工作方式是,NMF 将高维向量分解(或分解)为低维表示。这些低维向量是非负的,这也意味着它们的系数是非负的。
在这里,我们有客户投诉,这些投诉本质上是非结构化的。因此,传统上,公司需要将评估和分配给相关部门的每张工单的任务分配给多个支持员工。随着公司的发展和拥有庞大的客户群,这变得乏味。
我们需要建立一个能够根据产品/服务对客户投诉进行分类的模型。通过这样做,您可以将这些工单分为相关类别,因此有助于快速解决问题。
导入json
将 numpy 导入为 np
将熊猫导入为 pd
导入 re,nltk,spacy,字符串
nlp = spacy.load("en_core_web_sm")
将 seaborn 导入为 sns
将 matplotlib.pyplot 导入为 plt
%matplotlib 内联
从 plotly.offline 导入情节
导入 plotly.graph_objects
将 plotly.express 导入为 px
从文本块导入文本块
从 sklearn.feature_extraction.text 导入 CountVectorizer、TfidfVectorizer
从 pprint 导入 pprint
导入 en_core_web_sm
从 sklearn.decomposition 导入 NMF
导入警告
警告.filterwarnings(“忽略”)
from gensim.corpora.dictionary 导入字典
从 gensim.models.nmf 导入 Nmf
从 gensim.models.coherencemodel 导入 CoherenceModel
从操作员导入 itemgetter
从子流程导入 check_output
从 wordcloud 导入 WordCloud,停止词
进口泡菜
从 sklearn.feature_extraction.text 导入 CountVectorizer
从 sklearn.feature_extraction.text 导入 TfidfTransformer
从 sklearn.naive_bayes 导入 MultinomialNB
从 sklearn.linear_model 导入 LogisticRegression
从 sklearn.tree 导入 DecisionTreeClassifier
从 sklearn.ensemble 导入 RandomForestClassifier 从 sklearn.model_selection 导入 train_test_split
从 sklearn.metrics 导入混淆矩阵
从 sklearn.metrics 导入 f1_score
从 sklearn.metrics 导入分类报告 文件=打开('投诉-2021-05-14_08_16.json')
数据 = json.load(文件)
投诉数据 = pd.json_normalize(数据) ## 用 nan 替换“Complaints_what_happned”中的空白单元格 投诉数据 [投诉数据 ['投诉发生的事情'] == ''] = np.nan
## 删除投诉列为 nan 的所有行 投诉数据 = 投诉数据.dropna(子集 = ['complaint_what_happened']) pd.options.mode.chained_assignment = 无 投诉数据['complaint_what_happened'] = 投诉数据['complaint_what_happened'].astype(str) def clean_text(文本): '''
1. 使文本小写
2.删除方括号中的文字
3.删除标点符号。
4. 删除数字。 ''' text = text.lower()
text = re.sub(r'\[.*?\]','', text)
text = re.sub(r'[%s]'%re.escape(string.punctuation),'',text)
text = re.sub(r'\w*\d\w*','',text)
返回(文本) 投诉数据清洁 = pd.DataFrame(投诉数据 ['投诉发生的事情'].apply(lambda x:clean_text(x)))
2. 清洁数据集的探索性数据分析
- 根据“投诉”字符长度可视化数据。
- 使用词云在处理文本后的所有文章中按频率查找前 40 个词
- 处理文本后,在所有投诉中按频率查找排名靠前的一元、二元和三元。
3.词云
Word Cloud
一元模型:-
N-grams 也被称为 n 个单词的序列。基于单词序列的计数来确定概率的语言模型可以称为N-gram语言模型。根据字数,N-gram 可以是:
- Unigram:只有 1 个单词的序列
- Bigram:2个单词的序列
- Trigram:三个单词的序列
在自然语言处理中,n-gram 是由 n 个单词组成的序列。例如,“统计”是一元组(n = 1),“机器学习”是一个二元组(n = 2),“自然语言处理”是一个三元组(n = 3)。对于较长的 n-gram,人们只是用它们的长度来识别它们,比如 4-gram、5-gram 等等。在项目的这一部分,我们将只关注基于 unigrams 的语言模型,即单个单词。
Unigram of Complaints
Bigram of Complaints
有关更多详细信息和完整代码,请查看我的代码 github 轮廓。
参考:
- https://www.analyticsvidhya.com/blog/2021/06/part-15-step-by-step-guide-to-master-nlp-topic-modelling-using-nmf/
- https://www.geeksforgeeks.org/non-negative-matrix-factorization/
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明