從頭設計乙個聊天機械人(進化史)

2022-01-11 16:14:31 字數 2087 閱讀 6299

啦啦啦,讓我們來設計乙個智障聊天機械人吧!

首先,在1960s,在第一次人工智慧浪潮,最早的聊天機械人是設計用於**臨床心理患者。這些患者因為心理缺乏安全感,會反覆的詢問醫生一些問題求得安慰,於是最早的智障玩意聊天機械人問世了,聊天機械人會反覆的回答病人的提問。

所以我們準備乙個excel表或者資料庫,來進行乙個小遊戲。

第一列是我們問的問題,第二列是答案。

當我們輸入第一列,電腦程式將查詢相符的第一列並把第二列的回答顯示出來,這就是最簡單的聊天機械人了。

在第一次人工智慧浪潮失敗後之後,計算機又有所發展,機器學習有所發展,文字相似度技術開始提出並取得發展。編輯距離,尤拉距離,余弦相似度,雜湊相似等確定兩個文字是否相似的演算法提出。

我們可以看出三個問題實際上差距非常小,實際上是乙個問題。如果乙個個的列舉出每個問題,那麼對於計算機儲存與檢索技術來說,代價極其高昂,語料的製作與程式反應速度是我們無法接受的。

想一想我們把「是誰偷吃我的蛋糕」,經過分詞工具分成「是 誰 偷 吃 我 的 蛋糕 」;「偷吃我的蛋糕是誰」,經過分詞工具分成「偷 吃 我 的 蛋糕 是 誰」;「誰偷吃我的蛋糕」經過分詞工具分成「誰 偷 吃 我 的 蛋糕」 。

我們可以看出它們三個的分詞後是由幾乎一樣的詞語構成,那麼我們可以看出他們的詞語的集合是相似甚至是一樣的。如果通過比較其中相同的詞語數量和句子中最大詞語數量,我們可以區分他們的相似度程度,那麼我們需要找個值來形容一下它們文字之間相似程度。

「是誰偷吃我的蛋糕」「偷吃我的蛋糕是誰」他們詞語集合是完全相似的,所以公式是

s/max(count(l1),count(l2)),l1是「是誰偷吃我的蛋糕」,l2是「偷吃我的蛋糕是誰」,count(l1)是取得l1句子的詞語集合的詞語數量,count(l2)是取得l2句子的詞語集合的詞語數量,max(count(l1),count(l2))是取兩個句子中詞語數量最大值,s是兩個詞語集合之間相同的詞語數量,s/max(count(l1),count(l2))可以取得乙個從0至1之間的數,稱之為置信度。我們一般使用1代表完全相似,0代表完全不相似。

所以計算得「是誰偷吃我的蛋糕」「偷吃我的蛋糕是誰」置信度為1,「是誰偷吃我的蛋糕」「誰偷吃我的蛋糕」置信度為6/7,所以相比之下,「是誰偷吃我的蛋糕」「偷吃我的蛋糕是誰」之間更為相似。

其他的編輯距離,余弦相似度等文字相似度演算法都是用某種方法確定文字之間的相似度。

如果測試者輸入類似於問題的文字,置信度又高於某個值(一般我們選用0.65,因為**分割點總是具有魔法力量),我們認為問題是相似的可以使用相似的問題來進行查詢回答。

但我們也可以發現問題關於具體的事情,不同的問題實際上是指向乙個事情,相似的問題指向不同的問題。這個一直是聊天機械人的難點,這在文章後面的章節會有談到。

事實上,文字相似度並沒有在剛提出並沒有在聊天機械人上大規模使用,因為文字相似度雖然有效解決了語料問題,但是會帶來記憶體和計算的壓力,在當時的計算機的計算和儲存能力來說是成本高昂的,意味著使用的代價計算機界無法承受。

另外對於英文來說,語法句式在書面方面比較固定,所以意味著不會有中文這樣迫切的相似問題的需求。

如果你使用資料庫,那麼在sql中可以使用differ,mysql中可以使用布林查詢,orcle中可以使用similar函式來進行簡單的文字相似度,也可以在自定義函式中完成文字相似度演算法的實現。不過我們一般在程式後台中完成文字相似度便於進行其他操作,而不是在資料庫中。

90年代隨著聊天機械人勒布納獎的設立,旨在獎勵最擅長模仿人類真實對話場景的機械人。聊天機械人的設計者們經過多年設計逐漸設計出來模板法來改進聊天機械人,建立了人工智慧標記性語言來對回答進行改進。這就是大名鼎鼎的alice機械人。我形容它是類似於諸葛連弩,加特林,電子管步話機等超時代的產物,人類的智慧型總是能突破常理。

新型的聊天機械人使用樹狀結構進行匹配。第乙個詞作為第乙個節點,之後使用指標連線到後面詞,每一條路徑是乙個完整的句子。所有的語料將形成乙個森林。

alice由數千名志願者以及計算機專家進行製作語料,擁有6萬條以上的模板,用於應對談話人的問題

以後有空寫這個系列,窮到吃土

開源 乙個基於智慧型問答的聊天機械人實現

智慧型問答應當是未來智慧型化發展中人機互動的主要方式,目前無論是在開源社群或者企業應用中,都有廣泛的應用。1 直接匹配模式 你好pattern 你好!template category 此種模式將會在命中 你好 之後直接返回 你好 2 隨機匹配模式 今天天氣真好pattern 是呀,天氣不錯。li ...

用機器學習打造聊天機械人 三 設計篇

本文是用機器學習打造聊天機械人系列的第三篇,通過閱讀本文你將對聊天機械人的實現有乙個大致的思路。我們的聊天機械人將具備什麼樣的特性?開源聊天機械人框架chatterbot簡介 本專案基於chatterbot0.8.7來開發,但不僅於此。讓我們先對chatterbot做乙個簡單的了解。什麼是chatt...

聊天機械人 AIML檔案 標籤解釋(一)

網上找了一堆資料,發現英文的寫的還比較詳細,中文的都是寥寥幾字,所以想自己整理下自己對於aiml文件的見解。aiml檔案其實和xml檔案是類似的,是聊天機械人回答問題的乙個模板,機械人根據文件中內容回答我們輸入的問題。和xml檔案一樣,aiml檔案開始也需要定義編碼方式,如下 常用的編碼方式有 en...