摘要:天然語言理解是人工智能的核心難題之一,也是目前智能語音交互和人機對話的核心難題。以前寫過一篇文章天然語言理解,介紹了當時NLU的系統方案,感興趣的能夠再翻一番,裏面介紹過的一些內容再也不贅述。本文詳細討論了天然語言理解的難點,並進一步針對天然語言理解的兩個核心問題,詳細介紹了規則方法和深度學習的應用。
天然語言理解是人工智能的核心難題之一,也是目前智能語音交互和人機對話的核心難題。維基百科有以下描述[1]:算法
Natural language understanding (NLU) is a subtopic of natural language
processing in artificial intelligence that deals with machine reading
comprehension. NLU is considered an AI-hard problem.
對於AI-hard的解釋以下:網絡
In the field of artificial intelligence, the most difficult problems
are informally known as AI-complete or AI-hard, implying that the
difficulty of these computational problems is equivalent to that of
solving the central artificial intelligence problem—making computers
as intelligent as people, or strong AI.
簡言之,何時天然語言能被機器很好的理解了,strong AI也就實現了~~機器學習
以前寫過一篇文章天然語言理解,介紹了當時NLU的系統實現方案,感興趣的能夠再翻一番,裏面介紹過的一些內容再也不贅述。那篇文章寫於2015年末,過去一年多,技術進展很是快,咱們的算法也進行了大量升級,核心模塊所有升級到深度學習方案。本文主要結合NUI平臺中天然語言理解的具體實現,詳細的、系統的介紹意圖分類和屬性抽取兩個核心算法。以下圖所示,第一個框中是意圖分類,第二個框中是屬性抽取。ide
對於整個NUI平臺的介紹能夠參考孫健/千訣寫的從「鏈接」到「交互」—阿里巴巴智能對話交互實踐及思考。學習
爲何天然語言理解很難?本質緣由是語言自己的複雜性。天然語言尤爲是智能語音交互中的天然語言,有以下的5個難點:ui
一方面,天然語言不徹底是有規律的,有必定規律,也有不少例外;另外一方面,天然語言是能夠組合的,字到詞,詞到短語,短語到從句、句子,句子到篇章,這種組合性使得語言能夠表達複雜的意思。以上兩方面共同致使了語言的多樣性,即同一個意思能夠有多種不一樣的表達方式,好比:人工智能
在缺乏語境約束的狀況下,語言有很大的歧義性,好比:spa
(1)火車票?orm
(2)飛機票?視頻
(3)音樂?
(4)仍是查找景點?
語言在輸入的過程當中,尤爲是經過語音識別轉錄過來的文本,會存在多字、少字、錯字、噪音等等問題,好比:
(1)大王叫我來新山
(2)大王叫讓我來巡山
(3)大王叫我巡山
(4)熊大熊二(指熊出沒)
(5)我要看那個恩花千骨
(6)全家只有大王叫我去巡山咯
語言是對世界的符號化描述,語言自然鏈接着世界知識,好比:
(1)除了表示水果,還能夠表示餐廳名
(2)除了表示時間,還能夠表示酒店名
(3)除了表示總參謀部,還能夠表示餐廳名
(4)仍是一首歌名
(5)這也是一首歌名
上下文的概念包括不少內容,好比:
U:買張火車票
A:請問你要去哪裏?
U:寧夏
這裏的寧夏是指地理上的寧夏自治區
U:來首歌聽
A:請問你想聽什麼歌?
U:寧夏
這裏的寧夏是指歌曲寧夏
意圖分類是一種文本分類。主要的方法有:
(1)CFG
(2)JSGF
(3)……
(1)SVM
(2)ME
(3)……
(1)CNN
(2)RNN/LSTM
(3)……
這裏重點介紹基於CFG的方法[2],該方法最先出現於CMU Phoenix System中,如下是一個飛機票領域的示例:
按照上面的文法,對於「從北京去杭州的飛機票」,能夠展成以下的樹:
咱們在初版的系統中,採用的基於SVM的方法,在特徵工程上作了不少工做。第二版中切換到深度學習模型後,效果有很大提高,此處略過,直接介紹深度學習方法。
深度學習有兩種典型的網絡結構:
基於這兩種基本的網絡結構,又能夠衍生出多種變形。咱們實驗瞭如下幾種典型的網絡結構:
從實驗結果來看,簡單的CNN的效果最好,其網絡結構以下:
單純的CNN分類效果沒法超越複雜特徵工程的SVM分類器,尤爲是在像音樂、視頻等大量依賴世界知識的領域中。好比怎麼把以下的世界知識融入到網絡中去:
這背後更大的背景是,深度學習在取得巨大成功後,慢慢開始顯露出瓶頸,好比如何表示知識、存儲知識,如何推理等。其中一個探索方向就是試圖把聯結主義和符號主義進行融合。純粹的基於聯結主義的神經網絡的輸入是distributed representation,把基於符號主義的symbolic representation融合到網絡中,能夠大大提升效果,好比:
屬性抽取問題能夠抽象爲一個序列標註問題,以下例:
(1)Lexicon-based
(2)CFG
(3)JSGF
(4)……
(1)HMM
(2)CRF
(3)……
(1)RNN/LSTM
(2)……
這裏主要介紹基於JSGF(JSpeech Grammar Format)的方法:
JSGF is a BNF-style, platform-independent, and vendor-independent textual representation of grammars for use in speech recognition.
其基本的符號及其含義以下:
好比對於以下的示例:
能夠展開成圖:
對於「幫我打開空調」,其在圖中的匹配路徑以下:
匹配到這條路徑後,能夠根據標籤,把「空調」抽取到device這個屬性槽上。
經典算法爲CRF,略過。
用於序列標註的深度學習模型主要有[7]:
也有一些多任務聯合訓練的模型,好比[8]、[9]。
在咱們的系統中,採用的是Bi-LSTM-CRF模型:
一樣的,在input上,將distributed representation和symbolic representation作了融合。
在實際的系統中,基於規則的方法和基於深度學習的方法並存。基於規則的方法主要用來快速解決問題,好比一些須要快速干預的BUG;基於深度學習的方法是系統的核心。