聊天機械人ELIZA

2021-04-01 23:59:44 字數 3021 閱讀 4765

(1)

在《自然語言理解》這本書的緒論中曾分析了聊天機械人eliza的設計機理,表明這是一種語言變換的技巧,而不是真正的「自然語言理解」。午間休息時檢索了一下,找到了乙個它的連線:

它並不如書中所舉的例子那樣的「聰明」;也許因為這是第乙個聊天機械人,以及它並沒有真正採取「自然語言理解」的技術有關。下面是筆者與它交流時的一些例子:

you: men are all alike.

eliza: what resemblance do you see?

you: most of them never bathed.

eliza: please go on. 

的確,eliza沒有智慧型,它僅使用了對話者自己的智慧型來使它所說的話變的有意義。也就是說,它其實並不知道談話對方的「意思」。這一痕跡,可以從上下文語言的細節中感覺的到。

(2)自然語言生成,有兩個比較關鍵的問題:

確定要說哪些內容。          =>即知道自己要表達的「意思」

用句子表達要說的內容。    =>即把自己的「意思」轉化為相應的「語言」

eliza並不知道自己要表達的「意思」,它所做的就是做乙個變換:

f(s-in)=s-out

由於s-out是在s-in的基礎上變換而來,且符合自然語言的語法要求,所以對話者一般潛意識中就把s-out的「意思」當作eliza的表達內容了:事實上內部的程式中根本沒有「語義」(semantic or meaning)的計算。所以,對於上面兩個問題的回答,eliza方案有意忽略了中間最重要的核心部分,而根據輸入與輸出採取了一些技巧性的手段。

圖靈測試沒有說「智慧型」是什麼,而是通過其行為來描述——由此eliza在上世紀60年代誕生也可以說成績斐然。然而學科要發展,終歸不能迴避這個問題。就如eliza,既然它不能進行語義計算,所以也就無法確切知道談話者的「意思」,也不能如人類一樣作出連續的、合理的反應,更不要說知道並表達自己的意思了。當它不知道如何變換的時候,經常說諸如「please go on.」之類的話也就不奇怪了。

(3)eliza雖然並沒有真正「理解」語言,但它的設計原理仍具有一定的啟發意義。本節就從其設計原理說一說,主要參考《自然語言理解》中的內容,談談在此基礎上的初步思考。

在內部機制上,以前曾說eliza是對輸入句子做了乙個變換,直接產生了輸出語句,並沒有進行「語義計算」。這個變換,主要是通過乙個關鍵字資料庫完成的,該資料庫的模式為:

(關鍵字,級別,匹配模式,輸出格式)

關鍵字就是英文的word,級別是乙個整數。匹配模式是乙個核心內容,它是英文句子的一種抽象,由部分英文搭配和變數組成,可表示一類英文句子的格式。例如:

模式:           ?x  are  you   ?y

可以匹配:    why are  you   looking at me ?

輸出格式:would you prefer it if i weren『t  ?y

「?」與字母相連表示乙個變數。例子中的句子與模式就可以匹配成功。匹配成功,則可以檢視輸出格式,如例子中,就可以用相應的變數值替換輸出格式中的變數,得到如下的輸出:

輸出句子:would you prefer it if i weren』t looking at you ? (注意:需要做調整,就是把me替換為you,使得會話角色一致)

這基本上就是eliza的工作機制。至此,你可以看到它是如何「利用對話者的智慧型來使它所說的話變的有意義」的。它的演算法大體上類似於:

//輸入:句子s-in;輸出:句子s-out

(1)在資料庫中查詢s-in的關鍵字,使得s-in與相應的匹配模式匹配。

(2)若存在多個關鍵字,則選擇級別最高的那個匹配模式。

使用該匹配模式對應的輸出格式產生s-out。

(3)若無匹配模式,則輸出過度內容(預設s-out)以引導對話繼續進行。

(4)詞語     級別     模式                 輸出

alike      10       ?x                    in what way?

what resemblance do you see?

are        3        ?x are you ?y    what would you prefer it if i weren't ?y

what     2        ?x                    why do you ask?

does that interest you?

從計算機的技術角度講,eliza使用的是模式以及關鍵字匹配和置換的方法,它本身並沒有形成一套的自然語言理解的理論、技術體系。

但是,我們說這不僅僅是個技巧,也有它的啟發意義,也有它的成功之處。畢竟,語言是思想的外殼;語義是語言的靈魂。雖然語義形式化有極度的困難;而直觀的說,對乙個有意義的輸入作出有意義的輸出也是比較困難的:但eliza初步做到了後者,通過乙個知識庫。

也就是說,「知識」需要一種表達方式,來供計算機使用,雖然使用的手段,也就是技術上的技巧很簡單,但是思考如何利用知識是乙個必然的探索。在eliza中,關鍵字,級別,模式與輸出的確定,就是它對知識庫的固化——這是它成功的地方。

但同時,也是它不足的地方。首先我們就這種知識表達形式來說,可以有乙個深入的方向,知識庫的內容,尤其是級別、模式與輸出的內容與關係,是否可以通過機器學習來得到?而不是事先設定?如果可以通過輸入,通過乙個封閉或開放的語料集合來進行學習,而不斷的改進知識庫的內容的話,eliza的效果將是大有提高的。其次,我們可以改進對知識庫的使用演算法,這種演算法不僅僅把「級別」當作唯一的、單調增的引數,而是有一種復合的機制,保證eliza能在談話中形成、表現自己的特點(性格特點?),那麼eliza也將是更加成功的。再次,我們說這種知識表達形式本身與缺陷:它沒有形式化甚至涉及語義。我們可以尋找更好的語義表述模式,使得對話形成如下的思路:

輸入       <=>      語義空間

<=>         輸出

以這種方式來模擬人類的智慧型,eliza將發生根本性的變化。

又及,她的眼睛很好看:),並獲得2023年度、2023年度以及2023年度的「loebner prize」比賽冠軍。這也是eliza的後輩機械人了。

聊天機械人

我你好!小愛同學 小愛你好,很高興認識你!charset utf 8 css document 休息一會 sleep 1 獲取 使用者傳送的 訊息 可選 後端 對於 使用者發過來的 時候 是否 使用 可選 根據 傳送 過來的 訊息 返回 不同的內容 messagelist array 床前明月光,有...

機械人聊天軟體c C 聊天機械人

例項簡介 c 聊天機械人 例項截圖 核心 3181078聊天機械人 原始碼必讀.pdf 聊天機械人 1.ico 聊天機械人 1.ico form1.designer.cs form1.cs form1.resx program.cs properties assemblyinfo.cs resour...

聊天機械人總結

本文參考 自己動手做聊天機械人 情感分析 解析 jieba分詞 logging日誌模組學習 logging模組學習 python的name和doc屬性 python兩個內建函式locals和globals join 和os.path.join 函式 python字串前面加u,r,b的含義 codec...