讨论|多标签意图分类如何实现?

点击上方关注,All in AI中国

讨论|多标签意图分类如何实现?

有很多应用程序需要文本分类或者是我们所说的意图分类。如今,所有的东西都需要分类,比如内容、产品通常是按类别标注的。

然而,互联网上绝大多数的文本分类文章和教程都是二进制文本分类,比如垃圾邮件过滤(垃圾邮件和有用邮件)、情感分析(正面和负面)。然而,我们现实世界中的问题要比这复杂得多。而这也将是我要在这个文章中讨论的,即将文本按多个类别分类。

问题陈述:

我为我的GSoC项目(Owasp SKF-Chatbot)开发了这个分类器。问题是安全保卫知识框架有一个针对不同漏洞的知识库。它提供了不同漏洞的描述、解决方案和代码示例。因此,我需要对用户(在安全保卫知识框架)的查询进行分类,不管他是在寻找描述、解决方案还是代码示例。

我用Python(https://www.python.org/)和Jupyter笔记本(http://jupyter.org/)开发了我们的系统,机器学习组件则依赖于Scikit-Learn(http://scikit-learn.org/stable/)。

准备数据集

对于任何与分类或机器学习相关的问题,我们需要做的第一件事就是确保数据的格式正确。因此,首先我将解释我如何为意图分类准备数据集。

讨论|多标签意图分类如何实现?

查看data.json请点击:https://github.com/Priya997/SKF-Chatbot/blob/master/Basic_Approach/Scripts_to_prepare_dataset/data.json 。我将准备CSV格式的数据集,因为可以降低训练模型的难度。

讨论|多标签意图分类如何实现?

文本分类是一种问答系统。需要生成问题,因此我提取了一个列表中的所有标题。

讨论|多标签意图分类如何实现?

因此,这些问题需要根据描述、解决方案和代码进行分类。所以,我分别列了三张清单来存储问题。

讨论|多标签意图分类如何实现?

讨论|多标签意图分类如何实现?

所以,现在数据已经准备好了。查看完整的数据请点击:https://github.com/Priya997/SKF-Chatbot/blob/master/Basic_Approach/Scripts_to_prepare_dataset/intent_data.csv。

为了更好地理解如何准备数据集,你也可以查看这个Jupyter笔记本的示例(https://github.com/Priya997/SKF-Chatbot/blob/master/Basic_Approach/notebook/intent_data_prepare.ipynb)。

现在,我们已经准备好了数据。是时候使用它了。让我们看看我们如何进行意图分类。

让我们引进一些库吧。

讨论|多标签意图分类如何实现?

首先,我们将从CSV文件中提取数据并将其存储在数据帧中。

讨论|多标签意图分类如何实现?

在这个步骤中,我们将准备数据以将其提供给算法。首先,我们从"Y"开始。

讨论|多标签意图分类如何实现?

然后"pd.notnull"用于检查问题列中的数据是否为null,如果为null则整个行将被删除。

这一步对于获取高质量的干净数据非常重要。因为,如果我们有好的数据,我们就会有好的结果。

我们将创建一个新的列"category_id",它将为类提供一个数字。像描述的一样,它可能是0,解决方案1和代码2。

删除副本后,我们将得到这样的结果。

讨论|多标签意图分类如何实现?

你可以在下面图检查data_prep的代码片段。

讨论|多标签意图分类如何实现?

我使用了多项式朴素贝叶斯算法进行预测,因为我发现它易于实现,而且具有很高的准确率。

OneVsRest策略可用于多标签学习,其中使用分类器可以预测多个标签,朴素贝叶斯支持多类分类。但我们处于多标签场景,因此,我们将朴素贝叶斯包装在OneVsRestClassifier中。

OneVsRest多标签策略

多标签算法在多个标签上都接受一个二进制掩码。每个预测的结果将是一个由0和1组成的数组,类标签应用于每行输入示例。

为了更好地理解以下代码片段和多项分布的朴素贝叶斯模型,请点击:http://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.MultinomialNB.html 。

一个简短的概述是:我将数据分为测试数据和训练数据,然后将这些数据输入模型。

讨论|多标签意图分类如何实现?

我还尝试过其他算法或模型,如线性SVC(Linear SVC)、逻辑回归和随机森林。你可以点击这里:https://github.com/Priya997/SKF-Chatbot/blob/master/Notebooks/implementing%20multiclass.ipynb。

这是我们最后的预测。

讨论|多标签意图分类如何实现?

最后,我们输入问题并将其传递给预测函数,期待奇迹的发生。

讨论|多标签意图分类如何实现?

讨论|多标签意图分类如何实现?

很漂亮,很准确,不是吗?

你可以点击:https://github.com/Priya997/SKF-Chatbot/blob/master/Basic_Approach/notebook/Intent_classifier.ipynb,以更好地理解意图分类。

讨论|多标签意图分类如何实现?


分享到:


相關文章: