一兩年前因爲工做須要重點研究過天然語言處理與人機對話系統,本文將會列出的它們的知識點以及本身的思考。正則表達式
對於普通企業,人機對話目前主要的應用是任務型人機對話系統。無論是nlp亦或是chatbot,學術上和工程上都有不一樣的實現手段。學術界上人機對話系統的研究成果以及最新的研究趨勢在工程上應用的較少,而工程上又有本身的方式來實現人機對話。人機對話在實現過程當中會使用不少nlp技術,因此能夠說nlp是chatbot的基礎。算法
詞:語法、語義、語用。bash
短語(句子):語法、語義、語用。網絡
篇章:語法、語義、語用。數據結構
詞和短語的研究已經比較成熟了,主要的研究集中在2000年後。篇章的研究不成熟,主要研究是在2010年之後。框架
語法樹:機器學習
DG分佈式
CFG學習
PCFG測試
LPCFG
經常使用算法:
搜索S
動態規劃D
分類算法C
序列標註S
優化算法O
NLU:理解用戶輸入,將天然語言轉換成結構化表示。
DM:系統決策。
NLG:天然語言生成,將結構化表示轉換成天然語言。
因此根據主流框架分紅了三個主要模塊,分別爲NLU、DM和NLG。
天然語言理解包括三塊:
領域識別,主要就是判斷任務種類,好比會議室預約、火車票購買、訂餐等等類別。
意圖識別,識別用於意圖,好比用戶肯定、拒絕。
槽填充,抽取任務相關的重要信息,好比會議預約,槽就能夠定義爲開會地點、開會時間。
用戶輸入「我明天在公司開會」,通過天然語言理解處理(句子分類、序列標註)後結果爲,
Domain:會議室預約Intent:提供信息Slots:{Time:明天;Location:公司}複製代碼
天然語言理解研究現狀:
基於規則的方法,正則表達,比較耗人力、靈活性差、可移植性差。
基於統計的方法,單獨建模和聯合建模。單獨建模將領域識別、意圖識別、槽填充分開研究,分別使用支持向量機、卷積神經網絡、決策樹、條件隨機場、循環神經網絡實現,存在偏差累積。
研發步驟:
根據任務需求定義標籤。
準備數據,若是用基於規則的方法則要觀察數據規律,提取模板。若是使用基於統計方法則要標註數據,分爲訓練集、驗證集、測試集。通常數據量要幾十萬。
寫正則表達式或創建模型訓練模型。
完成NLU研發。
迭代優化。
對話管理模塊主要框架以下圖,
用戶輸入「五道口附近餐館」,通過 NLU 處理後獲得intent = ask,slots={位置:五道口}。
對話狀態跟蹤模塊輸出 slots={位置:五道口}。
Action候選爲餐館檢索和需求澄清。
Policy將候選Action排序。
Action執行根據Action排序執行action更新交互狀態
由NLG生產回覆,「還有其餘需求嗎?」
用戶繼續輸入。
關於天然語言生成模塊NLG,典型的概念到文本生成包含三部分,
內容選擇,從輸入中選擇合適的內容並決定輸出文本的結構。
句子規劃,決定個別句子的詞彙內容。
內容表達,渲染選定句子到輸出。
傳統作法涉及到:
機率上下文無關文法
n元語法
屬性檢測
閾值過濾
文本篩選
基於深度學習的方式:
RNN
LSTM
seq2seq
encoder-decoder
訓練樣本須要幾十萬條。
人機對話目前只有在很小的某個領域能作出效果,不大可能實現一個大範圍的通用的聊天機器人。
目前主流對話系統的主體框架都大同小異,主要仍是要能出效果。要作出效果就只有將領域限定得很小纔可行,能夠把業務領域限定的很小,只是某塊小業務。
涉及到用機器學習或深度學習的對話系統都須要大量的訓練樣本,沒有辦法跳過人力標註這步。
NLU、DM、NLG三個模塊在工程上的調用形式主要以庫的形式調用,若是以服務的形式調用會比較重,並且涉及到升級的話會比較麻煩,涉及到多項目組。
數據纔是最重要的,沒有數據步履維艱,並且數據要能不斷更新,與在線系統實現閉環。
目前工程上效果較好的的主要都仍是用傳統的基於規則,會在某些環節引入機器學習或深度學習,不會直接end-to-end作法。
人工智能也好深度學習也罷,其實迴歸到問題本質才能真正地利用人工智能,而不是一味吹捧什麼高大上的人工智能。
樣本標註方面,須要搞用戶便捷的標註系統,方便業務人員或標註人員使用。
本公衆號專一於人工智能、讀書與感想、聊聊數學、計算機科學、分佈式、機器學習、深度學習、天然語言處理、算法與數據結構、Java深度、Tomcat內核等。