天天看點

機器之魂:聊天機器人是怎麼工作的機器之魂:聊天機器人是怎麼工作的

<b>本文講的是機器之魂:聊天機器人是怎麼工作的,</b>

<b></b>

自早期的工業時代以來,人類就被能自主操作的裝置迷住了。因為,它們代表了科技的“人化”。

而在今天,各種軟體也在逐漸變得人性化。其中變化最明顯的當屬“聊天機器人”。

但是這些“機械”是如何運作的呢?首先,讓我們回溯過去,探尋一種原始,但相似的技術。

早期自動化的樣例 —— 機械音樂盒。

一組經過調音的金屬齒排列成梳狀結構,置于一個有針的圓柱邊上。每根針都以一個特定的時間對應着一個音符。

當機械轉動時,它便會在預定好的時間通過單個或者多個針的撥動來産生樂曲。如果要播放不同的歌,你得換不同的圓柱桶(假設不同的樂曲對應的特定音符是一樣的)。

除了發出音符之外,圓筒的轉動還可以附加一些其它的動作,例如移動小雕像等。不管怎樣,這個音樂盒的基本機械結構是不會變的。

輸入的文本将經過一種名為“分類器”的函數處理,這種分類器會将一個輸入的句子和一種“意圖”(聊天的目的)聯系起來,然後針對這種“意圖”産生回應。

<a href="https://link.juejin.im/?target=http%3A%2F%2Flauragelston.ghost.io%2Fspeakeasy%2F" target="_blank">一個聊天機器人的例子</a>

你可以将分類器看成是将一段資料(一句話)分入幾個分類中的一種(即某種意圖)的一種方式。輸入一句話“how are you?”,将被分類成一種意圖,然後将其與一種回應(例如“I’m good”或者更好的“I am well”)聯系起來。

我們在基礎科學中早學習了分類:黑猩猩屬于“哺乳動物”類,藍鳥屬于“鳥”類,地球屬于“行星”等等。

一般來說,文本分類有 3 種不同的方法。可以将它們看做是為了一些特定目的制造的軟體機械,就如同音樂盒的圓筒一樣。

模式比對

算法

神經網絡

無論你使用哪種分類器,最終的結果一定是給出一個回應。音樂盒可以利用一些機械機構的聯系來完成一些額外的“動作”,聊天機器人也如此。回應中可以使用一些額外的資訊(例如天氣、體育比賽比分、網絡搜尋等等),但是這些資訊并不是聊天機器人的組成部分,它們僅僅是一些額外的代碼。也可以根據句子中的某些特定“詞性”來産生回應(例如某個專有名詞)。此外,符合意圖的回應也可以使用邏輯條件來判斷對話的“狀态”,以提供一些不同的回應,這也可以通過随機選擇實作(好讓對話更加“自然”)。

早期的聊天機器人通過模式比對來進行文本分類以及産生回應。這種方法常常被稱為“暴力法”,因為系統的作者需要為某個回應較長的描述所有模式。

下面是一個簡單的模式比對定義:

然後機器經過處理會回答:

它之是以知道别人問的是哪個實體學家,隻是靠着與他或者她名字相關聯的模式比對。同樣的,它靠着創作者預設的模式可以對任何意圖進行回應。在給予它成千上萬種模式之後,你終将能看到一個“類人”的聊天機器人出現。

暴力窮舉法做自動機讓人望而卻步:對于每個輸入都得有可用的模式來比對其回應。人們由“老鼠洞”得到靈感,建立了模式的層級結構。

我們可以使用算法這種方法來減少分類器以便對機器進行管理,或者也可以說我們為它建立一個方程。這種方法是計算機科學家們稱為“簡化”的方法:問題需要縮減,那麼解決問題的方法就是将其簡化。

下面是一個簡單的訓練集:

讓我們來對幾個簡單的輸入句子進行分類:

請注意,“What’s it like outside”在分類時找到了另一個分類的單詞,但是正确的分類給了單詞較高的分值。通過算法公式,我們可以為句子計算比對每個分類對應的詞頻,是以不需要去标明所有的模式。

這種分類器通過标定分類分值(計算詞頻)的方法給出最比對語句的分類,但是它仍然有局限性。分值與機率不同,它僅僅能告訴我們句子的意圖最有可能是哪個分類,而不能告訴我們它的所有比對分類的可能性。是以,很難去給出一個門檻值來判定是接受這個得分結果還是不接受這個結果。這種類型的算法給出的最高分僅僅能作為判斷相關性的基礎,它本質上作為分類器的效果還是比較差的。此外,這個算法不能接受 is not 類型的句子,因為它僅僅計算了 it 可能是什麼。也就是說這種方法不适合做為包含 not 的否定句的分類。

人工神經網絡發明于 20 世紀 40 年代,它通過疊代計算訓練資料得到連接配接的權重值(“突觸”),然後用于對輸入資料進行分類。通過一次次使用訓練資料計算改變權重值以使得神經網絡的輸出得到更高的“準确率”(低錯誤率)。

上圖為一種神經網絡結構,其中包括神經元(圓)和突觸(線)

其實除了當今的軟體可以用更快的處理器、更大的記憶體外,這些結構并沒有出現什麼新奇的東西。當做數十萬次的矩陣乘法(神經網絡中的基本數學運算)的時候,運作記憶體和計算速度成為了關鍵問題。

在前面的方法裡,每個分類都會給定一些例句。接着,根據詞幹進行分句,将所有單詞作為神經網絡的輸入。然後周遊資料,進行成千上萬次疊代計算,每次疊代都通過改變突觸權重來得到更高的準确率。接着反過來通過對訓練集輸出值和神經網絡計算結果的對比,對各層重新進行計算權重(反向傳播)。這個“權重”可以類比成神經突觸想記住某個東西的“力度”,你能記住某個東西是因為你曾多次見過它,在每次見到它的時候這個“權重”都會輕微地上升。

有時,在權重調整到某個程度後反而會使得結果逐漸變差,這種情況稱為“過拟合”,在出現過拟合的情況下繼續進行訓練,反而會适得其反。

訓練好的神經網絡模型的代碼量其實很小,不過它需要一個很大的潛在權重矩陣。舉個相對較小的樣例,它的訓練句子包括了 150 個單詞、30 種分類,這可能産生一個 150x30 大小的矩陣;你可以想象一下,為了降低錯誤率,這麼大的一個矩陣需要反複的進行 10 萬次矩陣乘法。這也是為什麼說需要高性能處理器的原因。

就像前面的模式比對和算法比對一樣,神經網絡也有各種各樣的變體,有一些變體會十分複雜。不過它的基本原理是相同的,做的主要工作也都是進行分類。

機械音樂盒并不了解樂理,同樣的,聊天機器人并不了解語言。

總結:聊天機器人就像機械音樂盒一樣:它就是一個根據模式來進行輸出的機器,隻不過它不用圓筒和針,而是使用軟體代碼和數學原理。

<b>原文釋出時間為:2017年8月14日</b>

<b>本文來自雲栖社群合作夥伴掘金,了解相關資訊可以關注掘金網站。</b>

繼續閱讀