天天看點

Python聊天機器人實作代碼【NLTK】

聊天機器人(Chatbot)是一種人工智能軟體,利用它你可以通過網站、手機App或電話等途徑和使用者進行自然語言對話。聊天機器人可以在不同的行業中應用于不同的場景。NLTK是進行自然語言處理(NLP)的領先的Python開發包 — 另一個常用的NLP開發包是 Spacy — 在這個教程中,我們将使用NLTK開發庫建立一個簡單的聊天機器人。

1、導入開發包及資料

首先導入必要的開發包:

Python聊天機器人實作代碼【NLTK】

然後将資料集導入Pandas資料幀:

Python聊天機器人實作代碼【NLTK】

上面的資料包含1592個樣本,每個樣本為兩個字段,分别表示查詢及響應文本。可以看到資料集裡有空值,是因為樣本資料是分組的,每組的不同查詢文本都對應相同的相應文本。我們可以使用

ffill()

進行處理:

Python聊天機器人實作代碼【NLTK】

2、處理步驟

Python聊天機器人實作代碼【NLTK】

首先執行第一步,文本規範化處理。我們将所有的資料轉化為小寫,删除特殊符号,提取詞幹。這部分代碼我們使用函數

step1

進行封裝:

Python聊天機器人實作代碼【NLTK】

可以看到文本已經幹淨多了。分詞指的是将文本字元串切分為詞條:

Python聊天機器人實作代碼【NLTK】

pos_tag

函數傳回每個詞條在文本中的作用:

Python聊天機器人實作代碼【NLTK】

我們現在将建立一個函數來整合上面這些環節的代碼:

Python聊天機器人實作代碼【NLTK】

讓我們用這個函數處理資料集:

Python聊天機器人實作代碼【NLTK】

下一步是單詞嵌入表示,兩次詞義相近的詞,其嵌入表示的距離也相近。有兩種模型可以用于這個處理環節:詞袋模型和tf-idf模型。

3、詞袋模型

詞袋模型是描述文本中出現的單詞的一種表示方法。例如,假設我們的詞典中包含單詞{Playing, is, love},我們希望矢量化文本“Playing football is love”,那麼得到的矢量就是: (1, 0, 1, 1)。

Python聊天機器人實作代碼【NLTK】

上圖表格中的第一行,顯示了資料集的第一個樣本的BOW模型,隻有1和0。

停止詞指的是那些經常出現的單詞,是以這些單詞對于特定的文本來說意義就不大,我們可以把這些單詞從詞典中排除出去。下面是預定義的停止詞:

Python聊天機器人實作代碼【NLTK】

考慮下面的示例,我們嘗試擷取查詢對應的響應:

Python聊天機器人實作代碼【NLTK】

上面的代碼中,我們可以看到對于查詢‘Will you help me and tell me about yourself more’ ,我們進行文本規範化處理然後轉化為詞袋表示。下面我們将使用餘弦相似算法來找出相關的相應文本。

4、餘弦相似性

餘弦相似性是衡量兩個矢量相似性的一種名額。其計算方法是用兩個矢量的點積除以兩個矢量的模的乘積:

Cosine Similarity (a, b) = Dot product(a, b) / ||a|| * ||b||           

計算代碼如下:

Python聊天機器人實作代碼【NLTK】

可以看到194#樣本的相似性最高,讓我們輸出其查詢文本看看是否相關:

Python聊天機器人實作代碼【NLTK】

的确是相關的!

5、TF-IDF模型

tf指的是詞頻,表示單詞在目前文檔中出現的頻率,idf指的是逆文檔頻率,表示單詞在文檔集中出現的頻率倒數。這裡我們說的文檔表示一個樣本,文檔集表示所有的樣本。

Python聊天機器人實作代碼【NLTK】

上面是使用tf-idf處理得到的值。現在使用餘弦相似算法來找出相關的響應。

Python聊天機器人實作代碼【NLTK】

4#樣本的相似度最高,讓我們顯示出來看一下:

Python聊天機器人實作代碼【NLTK】

使用tf-idf我們得到一個不同的響應,不過看起來也很好!

現在讓我們組織一下代碼:

Python聊天機器人實作代碼【NLTK】

看看其他響應:

Python聊天機器人實作代碼【NLTK】

Coooooooooooool!

6、總結

我們也可以實作詞袋版本的對話。我們建立的模型沒有使用任何人工智能,但是效果還是不錯的。完整的代碼可以在

這裡

擷取。

原文連結:

NLTK聊天機器人實作原理及代碼下載下傳 - 彙智網

,轉載請标明出處