NLTK的聊天機器人實現代碼

聊天機器人(Chatbot)是一種人工智能軟件,利用它你能夠經過網站、手機App或電話等途徑和用戶進行天然語言對話。聊天機器人能夠在不一樣的行業中應用於不一樣的場景。NLTK是進行天然語言處理(NLP)的領先的Python開發包 — 另外一個經常使用的NLP開發包是Spacy — 在這個教程中,咱們將使用NLTK開發庫建立一個簡單的聊天機器人。git

一、導入開發包及數據

首先導入必要的開發包:github

在這裏插入圖片描述

而後將數據集導入Pandas數據幀:算法

在這裏插入圖片描述

上面的數據包含1592個樣本,每一個樣本爲兩個字段,分別表示查詢及響應文本。能夠看到數據集裏有空值,是由於樣本數據是分組的,每組的不一樣查詢文本都對應相同的相應文本。咱們可使用ffill()進行處理:函數

在這裏插入圖片描述

二、處理步驟

在這裏插入圖片描述 首先執行第一步,文本規範化處理。咱們將全部的數據轉化爲小寫,刪除特殊符號,提取詞幹。這部分代碼咱們使用函數step1進行封裝:網站

在這裏插入圖片描述 能夠看到文本已經乾淨多了。分詞指的是將文本字符串切分爲詞條:人工智能

在這裏插入圖片描述

pos_tag函數返回每一個詞條在文本中的做用:spa

在這裏插入圖片描述

咱們如今將建立一個函數來整合上面這些環節的代碼:3d

在這裏插入圖片描述

讓咱們用這個函數處理數據集:code

在這裏插入圖片描述

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

三、詞袋模型

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

在這裏插入圖片描述

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

中止詞指的是那些常常出現的單詞,所以這些單詞對於特定的文原本說意義就不大,咱們能夠把這些單詞從詞典中排除出去。下面是預約義的中止詞:

在這裏插入圖片描述 考慮下面的示例,咱們嘗試獲取查詢對應的響應:

在這裏插入圖片描述

上面的代碼中,咱們能夠看到對於查詢‘Will you help me and tell me about yourself more’ ,咱們進行文本規範化處理而後轉化爲詞袋錶示。下面咱們將使用餘弦類似算法來找出相關的相應文本。

四、餘弦類似性

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

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

計算代碼以下:

在這裏插入圖片描述 能夠看到194#樣本的類似性最高,讓咱們輸出其查詢文本看看是否相關:

在這裏插入圖片描述 的確是相關的!

五、TF-IDF模型

tf指的是詞頻,表示單詞在當前文檔中出現的頻率,idf指的是逆文檔頻率,表示單詞在文檔集中出現的頻率倒數。這裏咱們說的文檔表示一個樣本,文檔集表示全部的樣本。

在這裏插入圖片描述

上面是使用tf-idf處理獲得的值。如今使用餘弦類似算法來找出相關的響應。

在這裏插入圖片描述

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

在這裏插入圖片描述

使用tf-idf咱們獲得一個不一樣的響應,不過看起來也很好!

如今讓咱們組織一下代碼:

在這裏插入圖片描述

看看其餘響應:

在這裏插入圖片描述

Coooooooooooool!

六、總結

咱們也能夠實現詞袋版本的對話。咱們建立的模型沒有使用任何人工智能,可是效果仍是不錯的。完整的代碼能夠在這裏獲取。


原文連接:NLTK聊天機器人實現原理及代碼下載 - 匯智網 ,轉載請標明出處

相關文章
相關標籤/搜索