討論|多標籤意圖分類如何實現?

點擊上方關注,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,以更好地理解意圖分類。

討論|多標籤意圖分類如何實現?


分享到:


相關文章: