自然語言是人類知識的抽象濃縮表示,而自然語言理解是人工智慧研究領域中極具挑戰的一個分支。上次,《自然語言處理在 2017 年有哪些值得期待的發展?》中,我們已經講到,2016 年是深度學習大潮衝擊 NLP 的一年,透過去年一年的努力,深度學習在 NLP 領域已經站穩了腳跟。其中,對話互動系統已經成為一個重要的應用研究領域,2017 年的自然語言對話系統,將開創一個新的人機互動時代。透過深度學習和其他機器學習技術的模型組合,竹間智慧也已初步實現了自然語言對話中的意圖識別、上下文理解和多輪對話。本文將基於竹間智慧的一些經驗和探索,從分詞、詞性等基礎模組,到機器翻譯、知識問答等領域,列舉並分析一些深度學習在 NLP 領域的具體運用,希望對大家研究深度學習和 NLP 有所幫助。
事實上,從分詞、詞性、語法解析、資訊抽取等基礎模組,到自然語言生成、機器翻譯、對話管理、知識問答等高層的 NLP 領域,幾乎都可以應用以 CNN、RNN 為代表的深度學習模型,且確實能夠取得不錯的效果。深度學習模型有效降低了語言模型輸入特徵的維度,降低了輸入層的複雜性。另外,深度學習模型具有其他淺層模型不能比擬的靈活性。深度學習模型更復雜,能夠對資料進行更精準的建模,從而增強實驗效果。
深度學習模型可以將文字中的詞高效地表示為分散式連續向量(word2vec),將詞語、文字由詞空間對映到語義空間,這樣的語義表示可以捕獲重要的句法和語義資訊,一定程度上緩解了詞面不匹配、資料稀疏、語義鴻溝等問題。Word2vec 的應用可以使許多自然語言處理任務取得突出的表現。Word2vec 雖然可以透過神經網路訓練大規模的語料實現,但仍面臨著 out of vocabulary 的現實。Bahdanau 等人利用 LSTM 模型結合定義知識語料,解決傳統 word embedding 模型中的 out of vocabulary 問題。(框架流程見圖 1,具體見 https://arxiv.org/abs/1706.00286)
圖 1:利用 RNN 解決 Word2Vec 中 out of vocabulary 問題例項
中文不同於英文自然分詞,中文分詞是文字處理的一個基礎步驟,也是自然語言處理的基礎模組。分詞效能的好壞直接影響比如詞性、句法樹等其他模組的效能。利用深度學習實現的字嵌入+Bi-LSTM+CRF 中文分詞器,不需要構造額外手工特徵。使用人民日報的 80 萬語料訓練實現,按照字元正確率評估標準能達到 98% 的準確率。其本質上是一個序列標註模型,模型參考的論文是:http://www.aclweb.org/anthology/N16-1030,整個神經網路的主要框架如圖 2 所示。有感興趣的朋友可以去看看,具體實現已在 github 開源 https://github.com/koth/kcws。
圖 2:Word Embedding+Bi-LSTM+CRF 主要框架示意圖
語法解析可以獲得句子的語法結構,例如,哪些單片語合在一起(形成「短語」),哪些單詞是動詞的主題或物件。Syntactic Parsing 明確標出了詞與詞之間的短語結構,隱含了詞與詞之間的關係。而 Dependency Parser 則明確表示出了詞與詞之間的關係。利用神經網路模型解析句子的語法結構的實現可以參考 http://www.petrovi.de/data/acl15.pdf 以及史丹佛的 http://cs.stanford.edu/~danqi/papers/emnlp2014.pdf。除解析文字之外,Richard Socher 等人利用 CNN 模型實現瞭解析圖片的功能(Parsing Natural Scenes and Natural Language with Recursive Neural Networks)。
文字分類是各種場景在自然語言處理領域中經常使用到的技術,例如判斷文字內容的情感分類(即對文字表達的情感進行分析,如正面、負面的情感,開心、憤怒等情緒等)。深度學習在文字分類中的表現優於其他一些傳統線性模型,例如 https://arxiv.org/abs/1508.04112。Github 上的 https://github.com/harvardnlp/sent-conv-torch 是用於文字分類的 CNN,這個程式碼用 GPU 在 Torch 中實現了 Kim(2014)的句子卷積程式碼。它複製了現有資料庫中的結果,並允許在任意其它的文字資料庫上訓練模型。
資訊抽取,從句子中抽取特定的片段(比如命名實體識別、摘要總結等)。Abstractive Summarization 摘要總結 https://github.com/harvardnlp/NAMAS,該專案包含了來自論文 A Neural Attention Model for Abstractive Summarization(Alexander M. Rush, Sumit Chopra, Jason Weston. https://arxiv.org/pdf/1509.00685.pdf)的摘要抽象總結系統。該專案裡釋出的程式碼可以:提取摘要資料、訓練摘要神經網路模型、用 ROUGE 構建評估集、除錯提取的特徵等。
神經指代消解(Neural Coref Models),在論文 Learning Global Features for Coreference Resolution(Sam Wiseman, Alexander M. Rush, and Stuart M. Shieber, NAACL 2015)和 Learning Anaphoricity and Antecedent Ranking Features for Coreference Resolution(Sam Wiseman, Alexander M. Rush, Stuart M. Shieber, and Jason Weston. ACL 2015)中有所描述。Github 中開源的指代消解專案有 https://github.com/swiseman/nn_coref。
自然語言生成,能夠根據一些關鍵資訊及其在機器內部的表達形式,經過一個規劃過程,來自動生成一段高質量的自然語言文字。目前關於自然語言生成有一些比較有趣的研究,比如 https://github.com/karpathy/char-rnn 是一個基於 RNN 的文字生成器,可以自動生成莎士比亞的劇本或者 shell 程式碼;https://link.zhihu.com/?target=https%3A//github.com/phunterlau/wangfeng-rnn 基於 char-rnn 的汪峰歌詞生成器等。
知識問答,可以用深度學習模型,從語料中學習獲得一些問題的答案,比如 https://github.com/facebook/MemNN,是 memmnn 的一個官方實現,可以從諸如「小明在操場;小王在辦公室;小明撿起了足球;小王走進了廚房」的語境中,獲得問題「小王在去廚房前在哪裡?」這樣涉及推理和理解的問題;例如史丹佛的 http://cs.stanford.edu/~danqi/papers/nips2013.pdf 利用深度學習實現的知識問答系統。
神經機器翻譯(NMT)在翻譯中提供了統計方式之外的另一種方式,同時也更加簡便。Github 上基於 Sequence-to-Sequence Learning with Attentional Neural Networks 的開源專案: http://github.com/harvardnlp/seq2seq-attn,以及基於上述專案和 http://www.people.fas.harvard.edu/~yoonkim/data/emnlp_2016.pdf 的安卓系統中的神經機器翻譯。該專案考慮了將知識提煉(knowledge distillation)方式加入機器神經翻譯中,以解決其體量問題,這種方式已在其他領域中被證明能夠成功減小神經模型的尺寸。
在 Github 上還有一些有趣的關於深度學習與自然語言處理的專案。比如:Google Brain 團隊的一組研究人員釋出了一個專案 Project Magenta,其主要目標是利用機器學習創作藝術和譜寫曲子 https://github.com/tensorflow/magenta;https://github.com/ryankiros/neural-storyteller 是一個自然語言生成專案,實現了看圖講故事的功能。
以上是對深度學習在 NLP 領域運用的一些總結和說明。最後,再講回竹間全力打造的自然語言對話系統。之前提到 2017 年的對話系統一定是在限定的場景下發揮作用的,而竹間智慧基於深度學習打造的人機互動系統,在金融、電商及 IoT 等限定領域中已經實現了比較好的可控人機對話。未來,竹間希望在更多垂直領域形成突破。