句子互動 | Chatbot 入坑漫談

做者:李雲軍

圈動無界創始人CEO。資深互聯網從業者,歷任方正、金山安全產品總監、高級技術總監。擁有2個智能排版算法專利。公司曾獲英諾天使千萬級投資。公司主打團隊協做產品Teamin,結合天然語言處理及人工智能,爲新型社交協做人羣提供更智能的助理服務。算法


淺談人機對話

寫在前面

寫這篇blog,目的是但願幫助初步接觸人機對話的同窗能夠對這一塊的工做有個相對完整的瞭解 並針對人機對話能夠作和比較難作的地方作了一些討論,以便你們能夠在作這方面產品的時候知道如何劃分人機對話的能力邊界。安全


引子

在開始以前,想請你們先思考個問題:網絡

在和人溝通的時候,你們常常會擔憂並會說的一句話是什麼?app

嗯,不要想太複雜,實際上是這兩句:機器學習

說話的人:聽明白個人意思了麼?tcp

聽的人:你說的是什麼意思?學習

這也很好理解,溝通的目的就是爲了傳遞思想,若是哇啦哇啦說半天,對方尚未明白,那是多沮喪的一件事情。測試

如今咱們來換個角度看這個事情,若是把人當作一臺機器,那麼機器和機器之間用什麼東西來溝通呢? 技術男們立刻會說,確定是走協議啊,就好像tcpip那樣,要傳遞什麼數據,都基於協議來就好啦。 嗯,頗有道理的樣子,那麼,是否是能夠這麼認爲,語言其實也是一種協議,是人們爲了能夠幫助傳遞本身心裏的想法而定義的一些規則, 你們都按照這個規則來作,那麼互相之間表達一些思想就沒問題啦。字體

嗯嗯,中文是一種協議,英文是另一種協議,想一想世界上這麼多國家,好像人類之間用的協議也蠻多的哦。 站在這個角度,人機對話的核心就應該是讓機器理解這些協議啦。網站


實現對話的基本方法

繼續往下以前,咱們先來看看兩個例子:

我要去公園

今天北京天氣怎麼樣

當咱們聽到這兩句話的時候,腦殼裏就會浮現出這些信息: 我要去公園,嗯嗯,應該是想出去玩了,並且是室外,有花有草的地方。 今天北京的天氣怎麼樣,想知道今天北京的天氣,冷仍是熱,晴天仍是下雨。

其實這個過程,就是大腦在下意識處理話語的意圖的過程,每當一我的說一句話出來,咱們聽到了之後第一反應就是,他想表達什麼。 而後在表達的這些信息中,最關鍵的信息是什麼。

若是要特別標明出來,大概是這樣的:

我要去公園

今天北京天氣怎麼樣

加粗的字體部分就是關鍵信息,能夠幫助咱們更準確理解說話的人想表達的意思。

其實,機器實現對話的過程也是基本相似這樣的:

首先,判斷你想表達的意圖是什麼

其次,找到其中的關鍵信息

根據意圖和關鍵信息,生成帶條件的命令去執行

咱們用個完整的具體再分析一下看看: 請提醒我明天上午10點去開會 這句話的分析結果以下:

核心目的:幫我設置一個提醒

關鍵信息:明天上午10點 去開會

翻譯成代碼邏輯: 建立一條去開會的任務,任務的截止時間明天上午10點,而且會在那個時候提醒我

是否是很簡單,:)

那麼,怎麼可以讓機器理解一我的說話的意圖,而且把關鍵的信息識別出來呢? 聽起來好想好難的樣子,徹底無從下手啊,用神經網絡去訓練麼?對於我這樣的算法渣,這徹底是Mission Impossible。。。

很happy的是,今時已不一樣於往日,大廠們都在爭先恐後地「作慈善」(「圈地」),這些都不要咱們本身來作啦,現成的平臺,免費的接口,讓人睡覺都能笑醒啊。 好吧,我知道大家也很着急,那就趕忙來看看這些大廠的平臺到底作的怎麼樣吧。 電影「Her」中的場景再現,是否是不遠了,嘿嘿。。。


常見平臺的實現方法

因爲篇幅的緣由,我們主要對比百度的Unit和微軟的Luis兩個平臺, 例句一樣是這個:請提醒我明天上午10點去開會

先來看看百度的:

百度Unit 按照百度官方的推薦方法,要識別這句話的意圖,而且挑出關鍵信息, 最基本的,須要作這幾點事情:

1.先定義意圖

2.定義一系列的詞槽

3.將詞槽和意圖進行關聯

4.在乎圖下面,定義一套或者多套模版,模版由前面關聯好的詞槽組成

5.訓練

6.測試結果

嗯嗯,好專業的樣子,那咱們就開始把!

首先,建立一個意圖

CREATE_TASK

接下來,定義幾個詞槽,後面關鍵信息的挑取,就靠這些詞槽了,因此要好好思考一下怎麼定義

[Op.Remind] :提醒、通知

[UserName] :通用人名、代詞的詞槽

[DateTime] :通用時間詞槽

而後,爲意圖添加一個模版 |意圖|模版內容|模版片斷順序|必須匹配| |:-:|:-:|:-:|:-:| |CREATE_TASK|[Op.Remind]|1|是| ||[UserName]|2|否| ||[DateTime]|2|是|

在這套模版裏面,[Op.Remind]和[DateTime]是必需要有的, 也就是說當一句話中這兩個詞槽都能匹配到的時候,就會認爲這句話想表達一個CREATE_TASK的意圖了,是否是挺簡單?

使用Unit的這套方法,優勢明顯,缺點一樣很多:

優勢

1.在對話樣本數極少的時候,規則能夠快速達到還不錯的效果

2.基於規則,能夠比較明確知道匹配的邊界

3.詞槽的不一樣值加上模版,有必定的靈活度,較好理解

缺點

1.模版沒有覆蓋到的,基本就不行

2.對模版、詞槽的配置能力有必定的要求

3.話術的學習泛化能力有點慘

接下來看看微軟的,這個昔日的王者,在語義理解上能作到一個什麼樣的高度:

微軟Luis 微軟的作法相對比較簡單,他不推薦使用模版來作,而是直接將對話的話術給他,他本身訓練,就能夠了。 基本的步驟是這樣的:

1.定義意圖(intent)

2.定義實體(entities)

3.準備一些針對意圖的話術

4.訓練

5.測試結果

嗯,立刻開始: 第一步,話術的收集整理(能夠認爲是機器學習的訓練集數據)

一、5分鐘之後提醒我去3樓開會

二、添加一條下午3點的任務,預約會議室,並準備好紙筆

三、和小明說一下下週三下午開全體大會

……

接下來,定義實體 - 用來提取關鍵信息

[DateTime] :系統默認實體

[UserName] :系統默認實體[Op.Remind] :提醒、通知

[Op.Add] :添加、增長、建立、……

[Name.Task] :任務、提醒、事項、安排、……

而後訓練,測試,結果應該相似下面這樣:

請提醒我明天上午10點去開會

intent:CREATE_TASK

entites:

[Op.Remind] :提醒

[Datetime] :明天上午10點

[UserName] :我

是否是感受luis簡單了不少?反正我在用的過程當中感受輕鬆愜意,:) 固然,優勢不少,也有一些須要注意的問題點:

優勢

1.幾句簡單典型的話術,便可實現必定程度的泛化能力

2.對配置的要求低

3.訓練是一個愉悅的過程

缺點

1.訓練集的數據質量很重要,訓練結果會有必定的不肯定性

2.爲了保證每次調整後的效果,測試集的總體測試很重要

3.實體基於正則的方式匹配出來,偏差略大

使用這些平臺,是能夠解決全部的對話問題麼? 理想是豐滿的,現實是骨感的,遺憾的是,如今全部的對話平臺,都還不算處理的太好。

我找幾個典型的句式給你們看看:


幾個典型問題

模版式匹配的侷限 查詢小明建立的任務 若是用模版式匹配,就會發現:查詢任務、建立任務,均可以被匹配到,那麼這句話究竟是想查詢任務仍是建立任務呢? 固然,咱們人一眼就能看出來,機器嘛,咳咳。。。

分詞的錯誤 上周小明的文檔在哪裏 嗯,很無語是否是,他會認爲周小明是我的名,但其實我想表達的是,上週 小明 的文檔在哪裏?。。。

正則方式拿到實體的偏差 有沒有關鍵時刻這個文檔 好吧,偷偷滴告訴你,無論是詞槽,仍是實體,挑關進信息的方式都是正則,是否是讓你很沮喪 因此他告訴我,這裏面有個詞叫有關,會不會有點崩潰 我在這裏定義有關這個詞槽的目的是爲了可以提取前面的關鍵詞的,好比: 會員有關的文檔,會員兩個字就是我想要找的關鍵詞,若是有關這個詞槽匹配錯了,個人結果天然也就錯了

關鍵信息多且說法多樣 找下小明執行小張關注的任務 找下小明執行關注人是小張的任務 這兩句話,都是爲了獲得關鍵信息:小明-執行者,小張-關注者 但怎麼拿到呢?詞槽或者實體只能單純把這些信息挑出來,但小明仍是小張是執行者,怎麼判斷?根據文字的位置遠近?顯然不行對吧

來,給你們個題目,思考一下,這兩句話如何處理:

一、產品運營項目下小明執行的會員系統相關的任務,幫我找下

二、和小張說一下,明天下午3點提醒你們去3層會議室開會,提早5分鐘提醒他

嗯,這裏說到的仍是一些簡單的,作不太好的問題,其實,人機對話如今能作到的,還真的不多。 要真正作到像電影「Her」那樣的流暢對話,路漫漫其修遠兮。。。


人機對話的空間和侷限

我們看看這個問話 若是有人這麼說

今每天氣冷嗎?

若是是人的話,從裏面能夠看出好多的意圖來

是否能夠出門?

須要多穿衣服嗎?

是否是不能登山?

這些意圖多是並行存在的,對於機器,怎麼作呢?

再來看看這句 若是聽到一句這樣的話:

這個網站很重要,記得保存一下啊

可能直男會這麼作

把這個網站趕忙放入收藏夾

而後?就木有而後了。。。 但其實,稍微有點情商的人,必定會仔細分析裏面的含義

這是一個賣花的網站

最近是否是她生日了

她心情很差,求安慰?

表面上是讓你去收藏一個網站,但其實可能會有另外的意圖, 這個,機器又該怎麼處理呢?

隨便列舉一些人之間的對話特色:

1.用戶話術充滿多樣性和隨意性

2.正常交流中有大量多意圖對話

3.隱性對話信息機器沒法得到

4.機器的自主個性化回覆還不太好

你會發現,要處理好太複雜了,由於人有思想,會聯想,會推理 intent + entity,還不能很好解決這些問題。


寫在最後

人機對話註定是個細活兒 好吧,其實也沒有那麼悲觀,咱們把人機對話要解決的領域收窄一點, 好比只解決開關燈的問題,只回復天氣,這樣看起來是否是簡單不少?並且會發現很容易實現。 但因爲用戶的多樣性對話話術,不一樣的語言習慣的表達,即便是這麼窄的領域,要真正作的很好,也須要作大量的對話細節處理工做。 只有這樣纔可能讓機器看起來更像人。

如今機器學習的技術發展也的確是日新月異,可能不久的未來,「Her」的場景就能真實再現了吧,:)

相關文章
相關標籤/搜索