閱讀557 返回首頁    go 技術社區[雲棲]


自然語言理解-從規則到深度學習

1. 引言

自然語言理解是人工智能的核心難題之一,也是目前智能語音交互和人機對話的核心難題。維基百科有如下描述[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平台中自然語言理解的具體實現,詳細的、係統的介紹意圖分類和屬性抽取兩個核心算法。如下圖所示,第一個框中是意圖分類,第二個框中是屬性抽取。

aaa.png

對於整個NUI平台的介紹可以參考孫健/千訣寫的從“連接”到“交互”—阿裏巴巴智能對話交互實踐及思考

2. 自然語言理解的難點

為什麼自然語言理解很難?本質原因是語言本身的複雜性。自然語言尤其是智能語音交互中的自然語言,有如下的5個難點:

1. 語言的多樣性

一方麵,自然語言不完全是有規律的,有一定規律,也有很多例外;另一方麵,自然語言是可以組合的,字到詞,詞到短語,短語到從句、句子,句子到篇章,這種組合性使得語言可以表達複雜的意思。以上兩方麵共同導致了語言的多樣性,即同一個意思可以有多種不同的表達方式,比如:

  • 我要聽大王叫我來巡山
  • 給我播大王叫我來巡山
  • 我想聽歌大王叫我來巡山
  • 放首大王叫我來巡山
  • 給唱一首大王叫我來巡山
  • 放音樂大王叫我來巡山
  • 放首歌大王叫我來巡山
  • 給大爺來首大王叫我來巡山
2. 語言的歧義性

在缺少語境約束的情況下,語言有很大的歧義性,比如:

  • 我要去拉薩
    • 火車票?
    • 飛機票?
    • 音樂?
    • 還是查找景點?
3. 語言的魯棒性

語言在輸入的過程中,尤其是通過語音識別轉錄過來的文本,會存在多字、少字、錯字、噪音等等問題,比如:

  • 錯字
    • 大王叫我來新山
  • 多字
    • 大王叫讓我來巡山
  • 少字
    • 大王叫我巡山
  • 別稱
    • 熊大熊二(指熊出沒)
  • 不連貫
    • 我要看那個恩花千骨
  • 噪音
    • 全家隻有大王叫我去巡山咯
4. 語言的知識依賴

語言是對世界的符號化描述,語言天然連接著世界知識,比如:

  • 大鴨梨
    • 除了表示水果,還可以表示餐廳名
  • 七天
    • 除了表示時間,還可以表示酒店名
  • 總參
    • 除了表示總參謀部,還可以表示餐廳名
  • 天氣預報
    • 還是一首歌名
  • 晚安
    • 這也是一首歌名
5. 語言的上下文

上下文的概念包括很多內容,比如:

  • 對話上下文
  • 設備上下文
  • 應用上下文
  • 用戶畫像
  • ...

U:買張火車票
A:請問你要去哪裏?
U:寧夏  

這裏的寧夏是指地理上的寧夏自治區

U:來首歌聽
A:請問你想聽什麼歌?
U:寧夏  

這裏的寧夏是指歌曲寧夏

3. 意圖分類的實現方法

意圖分類是一種文本分類。主要的方法有:

  • 基於規則(rule-based)

    • CFG
    • JSGF
    • ……
  • 傳統機器學習方法

    • SVM
    • ME
    • ……
  • 深度學習方法

    • CNN
    • RNN/LSTM
    • ……

3.1 基於規則的方法

這裏重點介紹基於CFG的方法[2],該方法最早出現於CMU Phoenix System中,以下是一個飛機票領域的示例:
cfg.png
按照上麵的文法,對於“從北京去杭州的飛機票”,可以展成如下的樹:
cfg2.png

3.2 基於傳統統計的方法

我們在第一版的係統中,采用的基於SVM的方法,在特征工程上做了很多工作。第二版中切換到深度學習模型後,效果有很大提升,此處略過,直接介紹深度學習方法。

3.3 基於深度學習的方法

深度學習有兩種典型的網絡結構:

  • CNN(卷積神經網絡)
  • RNN(循環神經網絡)

基於這兩種基本的網絡結構,又可以衍生出多種變形。我們實驗了以下幾種典型的網絡結構:

  • CNN [3]
  • LSTM [4]
  • RCNN [5]
  • C-LSTM [6]

從實驗結果來看,簡單的CNN的效果最好,其網絡結構如下:
cnn1.png

單純的CNN分類效果無法超越複雜特征工程的SVM分類器,尤其是在像音樂、視頻等大量依賴世界知識的領域中。比如怎麼把如下的世界知識融入到網絡中去:
cnn3.png

這背後更大的背景是,深度學習在取得巨大成功後,慢慢開始顯露出瓶頸,比如如何表示知識、存儲知識,如何推理等。其中一個探索方向就是試圖把聯結主義和符號主義進行融合。純粹的基於聯結主義的神經網絡的輸入是distributed representation,把基於符號主義的symbolic representation融合到網絡中,可以大大提高效果,比如:
cnn2.png

4. 屬性抽取的實現方法

屬性抽取問題可以抽象為一個序列標注問題,如下例:
slot1.png

  • 基於規則(rule-based)
    • Lexicon-based
    • CFG
    • JSGF
    • ……
  • 傳統機器學習方法
    • HMM
    • CRF
    • ……
  • 深度學習方法
    • RNN/LSTM
    • ……

4.1 基於規則的方法

這裏主要介紹基於JSGF(JSpeech Grammar Format)的方法:

JSGF is a BNF-style, platform-independent, and vendor-independent textual representation of grammars for use in speech recognition.

其基本的符號及其含義如下:

<>,非終結符
|,or
[], 可選項
(),分組
*,零個或多個
{}, 標簽

比如對於如下的示例:

public <controlDevice> = <startPolite> <command> <endPolite>;

<command> = <action> <object>;
<action> = (打開|關閉);
<object> = [這個|那個] (空調|加濕器|音箱){device};
<startPolite> = (請|幫 我) *;
<endPolite> = [啊|吧];

可以展開成圖:
jsgf2.png

對於“幫我打開空調”,其在圖中的匹配路徑如下:
jsgf3.png

匹配到這條路徑後,可以根據標簽,把“空調”抽取到device這個屬性槽上。

4.2 基於傳統統計的方法

經典算法為CRF,略過。

4.3 基於深度學習的方.

用於序列標注的深度學習模型主要有[7]:

  • RNN
  • LSTM
  • Bi-LSTM
  • Bi-LSTM-Viterbi
  • Bi-LSTM-CRF

也有一些多任務聯合訓練的模型,比如[8]、[9]。

在我們的係統中,采用的是Bi-LSTM-CRF模型:
NLU-4.01.jpg

同樣的,在input上,將distributed representation和symbolic representation做了融合。

5. 小結

在實際的係統中,基於規則的方法和基於深度學習的方法並存。基於規則的方法主要用來快速解決問題,比如一些需要快速幹預的BUG;基於深度學習的方法是係統的核心。

參考文獻

[1] https://en.wikipedia.org/wiki/Natural_language_understanding
[2] Ward & Issar, CMU Phoenix System, 1996
[3] Yoon Kim, Neural Networks for Sentence Classification, EMNLP, 2014
[4] Suman Ravuri and Andreas Stolcke, Recurrent Neural Network and LSTM Models for Lexical Utterance Classification, InterSpecch, 2015
[5] Siwei Lai, Liheng Xu, Kang Liu, Jun Zhao, Recurrent Convolutional Neural Networks for Text Classification, AAAI, 2015
[6] Chunting Zhou, Chonglin Sun, Zhiyuan Liu, Francis C.M. Lau, A C-LSTM Neural Network for Text Classification, arXiv, 2015
[7] Grégoire Mesnil, et. al, Using Recurrent Neural Networks for Slot Filling in Spoken Language Understanding, TASLP, 2015
[8] Xiaodong Zhang, HoufengWang, A Joint Model of Intent Determination and Slot Filling for Spoken Language Understanding, IJCAI, 2016
[9] Bing Liu, Ian Lane, Joint Online Spoken Language Understanding and Language Modeling with Recurrent Neural Networks, arxiv, 2016

最後更新:2017-08-13 22:36:32

  上一篇:go  MaxCompute數倉維護心得-五葉草
  下一篇:go  阿裏雲IoT發布智能生活開放平台 加速智能家庭產業鏈成熟