1. 程式人生 > >用機器學習打造聊天機器人(六) 原理篇

用機器學習打造聊天機器人(六) 原理篇

本文是用機器學習打造聊天機器人系列的第六篇,主要介紹程式碼中用到的相關演算法的原理。瞭解演算法原理,可以讓我們知道程式背後都做了些什麼,為什麼有時候會出現錯誤以及什麼場景下選擇哪種演算法會更合適。

  • word2vec
    我們使用的詞向量模型就是基於word2vec訓練的,word2vec 是 Google 在 2013 年推出的一個 NLP 工具,它的特點 是將所有的詞向量化,這樣詞與詞之間就可以定量的去度量他們之間 的關係,挖掘詞之間的聯絡。

    word2vec 基於分散式表徵(Dristributed Representation)的 思想,相比於 One hot 可以用更低維數的向量表示詞彙。 有一個有趣的研究表明,用詞向量表示我們的詞時,我們可以發 現:King - Man + Woman = Queen。
    word2vec 實現了 CBOW 和 Skip-Gram 兩個神經網路 模型,SkyAAE 在訓練詞向量的時候就是使用的 CBOW 模型。

    CBOW(Continuous Bag-of-Words,連續詞袋)的核心思想是可 以用一個詞的周圍的詞來預測這個詞。該模型的訓練輸入是某一個特 徵詞的上下文相關的詞對應的詞向量,而輸出就是這特定的一個詞的 詞向量。 比如這段話:“...an efficient method for 【learning】 high quality distributed vector...”,我們要預測 learning,則 可以選取上下文大小為 4,也就是我們需要輸出的詞向量,上下文對 應的詞有 8 個,前後各 4 個,這 8 個詞是我們模型的輸入。由於 CBOW 使用的是詞袋模型,因此這 8 個詞都是平等的,也就是不考慮他們和 我們關注的詞之間的距離大小,只要在我們上下文之內即可。與 CBOW 相對應的是 Skip-Gram 模型,核心思想是可以用當前詞去預測該詞的 周圍的詞。
    可以看出,當word2vec模型訓練好了之後,詞的向量表徵也就確定了,以後再次使用的時候,輸入一個詞,模型就給你那個確定的向量。所以我們表示一個句子的時候,需要先分詞,然後分別取出詞的向量,然後通過一些方式將這些向量融合在一起來表示整個句子,比如累加後除以分詞列表的長度。
  • 餘弦相似度
    我們在語義匹配階段使用的演算法就是餘弦相似度。餘弦相似度是指通過測量兩個向量的夾角的餘弦值來度量它們 之間的相似性。我們知道,0 度角的餘弦值是 1,而其他任何角度的 餘弦值都不大於 1;並且其最小值是-1,但是餘弦相似度通常用於 正空間,因此給出的值為 0 到 1 之間。兩個向量有相同的指向時, 餘弦相似度的值為 1;兩個向量夾角為 90°時,餘弦相似度的值為 0,所以兩個向量之間的角度的餘弦值可以確定兩個向量是否大致指 向相同的方向。具體公式如下:
  • 樸素貝葉斯
    我們在意圖分類階段使用了多項式樸素貝葉斯演算法來將輸入的問題分到對應的意圖類別下,讓我們先來看看什麼式樸素貝葉斯。樸素貝葉斯演算法是基於貝葉斯定理與特徵條件獨立假設的分類 方法。 貝葉斯公式推導過程:

    c
    隨機事件的其中一種情況,比如電影領域問答中的意圖分類可能包括:閒聊,評分,上映時間,演員等,把使用者問問題看成是隨機事件,則使用者問評分的問題就是隨機事件的其中一種情況。
    x
    泛指與隨機事件相關的因素,這裡做為概率的條件。
    P(c|x)
    條件 x 下,c 出現的概率。比如 P(“評分”|“功夫這部電影評分怎麼樣?”)就是表示問題“功夫這部電影評分怎麼樣?”的意圖是“評分”的概率。
    P(x|c)
    知出現 c 情況的條件下,條件 x 出現的概率,後驗概率,可以根據歷史資料計算得出。
    P(c)
    不考慮相關因素,c 出現的概率。
    P(x)
    不考慮相關因素,x 出現的概率。
    由推導過程可以得到
    P(c|x) = P(c)P(x|c)/P(x)
    假設我們有電影領域問題和所屬意圖分類的資料集,那麼P(c(i))=c(i)出現的次數/所有情況出現的總次數,(例如:c(i)可能是‘評分’意圖或者‘上映時間’意圖);
    根據特徵條件獨立假設的樸素思想可以得出如下式子:
    p(x|c) = Πp(xi|c) (1<=i<=d),d 為屬性的個數
    至此得到樸素貝葉斯的具體公式:(這裡的 c 就是 c(i))

    利用該公式進行分類的思想就是計算所有的 p(c(i)|x),然後取值(概率)最大的 c(i)做為所屬分類。用公式表達如下:

    h 是基於樸素貝葉斯演算法訓練出來的 hypothesis(假設),它的值就是貝葉斯分類器對於給定的 x 因素下,最可能出現的情況c。y 是 c 的取值集合。這裡去掉了 P(x)是因為它和 c 的概率沒有關係,不影響取最大的 c。
    樸素貝葉斯直觀上理解,就是和樣本屬性以及樣本類別的出現頻率有關,利用已有的樣本屬性和樣本類別計算出的各個概率,來代入新的樣本的算式中算出屬於各類別的概率,取出概率最大的做為新樣本的類別。
    所以為了計算準確,要滿足如下幾個條件:
    • 各類別下的訓練樣本數量儘可能均衡
    • 各訓練樣本的屬性取值要覆蓋所有可能的屬性的值
    • 引入拉普拉斯修正進行平滑處理。
  • 多項式樸素貝葉斯
    再選擇樸素貝葉斯分類的時候,我們使用了one-hot的思想來構建句向量,其中的值都是0或1的離散型特徵,所以使用多項式模型來計算 p(xi|c)會更合適(對於連續性的值,選用高斯模型更合適):

    Dc 表示訓練集 D 中第 c 類樣本組成的集合,外加兩條豎線 表示集合的元素數量;
    Dc,xi 表示 Dc 中第 i 個特徵上取值為 xi 的樣本組成的集 合。
    為避免出現某一維特徵的值 xi 沒在訓練樣本中與 c 類別同時出 現過,導致後驗概率為 0 的情況,會做一些平滑處理:

    K表示總的類別數;
    Ni表示第 i 個特徵可能的取值的數量。
  • 萊文斯坦距離
    chatterbot的預設語義匹配演算法採用的就是萊文斯坦距離,該演算法又稱Levenshtein距離,是編輯距離的一種。指兩個字串之間,由一個轉成另一個所需的最少編輯操作次數。允許的編輯操作包括將一個字元替換成另一個字元,插入一個字元,刪除一個字元。例如將kitten轉成sitting:
    kitten(k→s)sitten (e→i)sittin  (→g)sitting
    該演算法的邏輯清晰簡潔,但做為聊天機器人的語義匹配演算法還是太簡單了,所以我們並沒有選擇使用,具體原因在《手把手教你打造聊天機器人(三) 設計篇》中已經詳細介紹,這裡不再贅述。

本文是"手把手教你打造聊天機器人"系列的最後一篇,介紹了我們打造的聊天機器人的相關演算法原理,下一篇會對本系列做一個總結。

ok,本篇就這麼多內容啦~,感謝閱讀O(∩_∩)O。

相關推薦

機器學習打造聊天機器人() 原理

本文是用機器學習打造聊天機器人系列的第六篇,主要介紹程式碼中用到的相關演算法的原理。瞭解演算法原理,可以讓我們知道程式背後都做了些什麼,為什麼有時候會出現錯誤以及什麼場景下選擇哪種演算法會更合適。 word2vec 我們使用的詞向量模型就是基於word2vec訓練的,word2vec 是 Google

機器學習打造聊天機器人(三) 設計

本文是用機器學習打造聊天機器人系列的第三篇,通過閱讀本文你將對聊天機器人的實現有一個大致的思路。 我們的聊天機器人將具備什麼樣的特性? 使用者可以使用人類自然語言的方式來表達自己的意圖。 可以依據使用者的反饋進行線上增量學習,使用的越久,能回答得問題越多。 採用非侵入式設計,通過幾個簡單的API就可以接

spark機器學習筆記:(Spark Python構建迴歸模型

博主簡介:風雪夜歸子(英文名:Allen),機器學習演算法攻城獅,喜愛鑽研Meachine Learning的黑科技,對Deep Learning和Artificial Intelligence充滿興趣,經常關注Kaggle資料探勘競賽平臺,對資料、Machi

機器學習小實戰() XGBoost基本原理

一、xgboost原理 1. 實踐證明,tree boosting(樹提升)可以有效地用於分類和迴歸任務中,提升方法是一種非常有效的機器學習方法,xgboost是提升的強化版本。 2. 和決策樹相關,集成了多個弱學習器。 3. 提升演算法,相當於一棵樹一棵樹地加,每加一

機器學習中梯度下降法原理其解決線性迴歸問題的C語言實現

本文講梯度下降(Gradient Descent)前先看看利用梯度下降法進行監督學習(例如分類、迴歸等)的一般步驟: 1, 定義損失函式(Loss Function) 2, 資訊流forward propagation,直到輸出端 3, 誤差訊號back propagation。採用“鏈式法則”,求損失函式關

《Python機器學習》筆記(

後者 mean 子空間 otl 計算模型 lencod pytho 兩個 show 模型評估與參數調優實戰基於流水線的工作流一個方便使用的工具:scikit-learn中的Pipline類。它使得我們可以擬合出包含任意多個處理步驟的模型,並將模型用於新數據的預測。加載威斯康

我的機器學習之旅():決策樹

family 分配 根據 drop chrom labels arch ntp -o 決策樹概念: 分類決策樹模型是一種描述對實例進行分類的樹形結構。決策樹由結點和有向邊組成。結點有兩種類型:內部節點和葉節點,內部節點表示一個特征或屬性,葉節點表示一個類。 分類的時候,從根

NLP實踐 TensorFlow打造聊天機器人

模型 android 界面 一個 get 組件 開發規範 收集 課程 第1章 課程導學 對課程章節、知識點、課程安排、適用人群、前提條件以及學習完成後達到的程度進行了介紹,讓同學們對本課程有基本的認識。 第2章 基礎知識 介紹tensorflow的基礎知識和原理,介紹t

一文讀懂機器學習大殺器XGBoost原理

結構 近似算法 機器 form con gin fff .cn tran http://blog.itpub.net/31542119/viewspace-2199549/ XGBoost是boosting算法的其中一種。Boosting算法的思想是將許多弱分類器集成在

機器學習定位雲服務器故障

str tps 避免 www eve devel details 社區 異常 歡迎大家前往騰訊雲+社區,獲取更多騰訊海量技術實踐幹貨哦~ 本文由roganhuang發表於雲+社區專欄 導語 隨著騰訊雲業務的擴大,母機數量越來越多。為減少人力並實現母機故障的自動化定位,本

機器學習筆記(十):TensorFlow實戰八(經典卷積神經網路:GoogLeNet)

1 - 引言 GoogLeNet, 在2014年ILSVRC挑戰賽獲得冠軍,將Top5 的錯誤率降低到6.67%. 一個22層的深度網路 論文地址:http://arxiv.org/pdf/1409.4842v1.pdf 題目為:Going deeper with convolu

機器學習實踐(十)—sklearn之模型儲存和載入

一、sklearn - 模型的儲存和載入 - API from sklearn.externals import joblib 儲存 joblib.dump(rf, ‘test.pkl’) 載入 estimator

機器學習實戰》第章----支援向量機

支援向量機 SVM(Support Vector Machine)實際上是應用於二分類的一個分類器,其基本模型定義為特徵空間上的間隔最大的線性分類器,其學習策略便是間隔最大化,最終可轉化為一個凸二次規劃問題的求解。這裡不對整個過程進行推導,因為看了很多部落格,有幾篇大佬的部落格寫的非

機器學習定位雲伺服器故障

歡迎大家前往騰訊雲+社群,獲取更多騰訊海量技術實踐乾貨哦~ 導語 隨著騰訊雲業務的擴大,母機數量越來越多。為減少人力並實現母機故障的自動化定位,本文嘗試利用機器學習演算法,通過對歷史故障母機的日誌資料學習,訓練模型實現自動化分析定位母機故障原因。 背景 對於每一單母機故障我們都需要定位出背後真實的故障原因,

也談機器學習索引替代B-Tree

機器學習Range Index正如上文中提到的,我們可以設計一個模型,根據關鍵值預測出現位置。對於常見的範圍查詢,所有的資料都是排好序的,能想到一個簡單的模型就是預測給定關鍵字的累計分佈函式(cumulative distribution function): p=F(key)*N,這裡的p就是預測位置,F(

機器學習筆記(十):大規模機器學習

目錄 1)Learning with large datasets 2)Stochastic gradient descent 3)Mini-batch gradient descent 4)Stochastic gradient descent convergence 1)

為什麼某個問題可以機器學習方法來解決?

不知道大家有沒有想過,基於歷史資料去預測未知資料的問題,為什麼我們就知道這種問題可以用機器學習來解決? 偶爾看到了《統計學習方法概論》裡的一個小節,小節的內容我認為可以解答這個問題。總而言之就是,這是一種假設,即假設他可以用機器學習方法來解決,同時假設學習模型是存在的。該小

KDD 2018 | Airbnb機器學習實現房屋動態定價(不看你就out啦!)

在KDD 2018上,Airbnb的研究人員們發表了一篇名為Customized Regression Model for Airbnb Dynamic Pricing的論文。這篇文章描述了Airbnb使用的動態定價模型,以下是論智對文章的大致介紹。 價格優化的目的是幫助房東制定最優價格。傳統

最新NLP 實踐 TensorFlow 打造聊天機器人

9-1 基本流程介紹 9-2 基本引數儲存,引數驗證(1) 9-3 基本引數儲存,引數驗證(2) 9-4 基本引數儲存,引數驗證(3) 9-5 基本引數儲存,引數驗證(4) 9-6 構建模型(1) 9-7 構建模型(2) 9-8 構建一個單獨的RNN cell 9-9 構建單獨

機器學習筆記之八—— knn-最簡單的機器學習演算法以及KD樹原理

上一節結束了線性迴歸、邏輯迴歸,今天一節來介紹機器學習中最簡單的演算法:    K近鄰(KNN,全稱K-nearst Neighbor)       概述:判斷一個樣本的label只需要判斷該樣本週圍其他樣本的label。簡言之,朋