21天搞定聊天機器人之{命名實體識別}

FangwenYu發表於2016-11-22

看到這個題目,估計程式猿們要笑了,大家都懂的嘛。畢竟大家已經被“21天學會XXX”坑了不少回了。所以,這個題目自然是開玩笑的了,怎麼可能21天搞定聊天機器人呢。

雖然2016年號稱人工智慧元年,各種牛逼的人工智慧技術如雨後春筍冒出來,但是要打造一個智慧聊天機器人談何容易,目前還沒有一款聊天機器人可以通過“圖靈測試”。最近大熱的《西部世界》中的阿諾德提到了人工智慧的四層金字塔模型,從下往上依次為"記憶","即興","私利","?", (最上面一層劇中尚沒有透露), 這也恰恰就是描述我們人類的智商層次。

OK,言歸正傳。今天想聊的只是在做聊天機器人(或者叫語音助手)的過程中需要面對的一個小問題,叫做所謂的命名實體識別(NER: Named Entity Recognition)。NER是自然語言處理中的一個課題,比如識別文字中的人名,地名,日期等這些詞語。

比如對於如下一句話:
“Siri,打電話給Abby"

作為Siri來說,她除了要明白你的這句話是讓她打電話,同時要知道究竟是打電話給誰。在這句話中,很顯然是要打電話給Abby這個人。那自然要從這句話中識別出Abby作為打電話的目標人。那麼怎麼來實現從一句話紅提取出人名這中命名實體呢? 當然對於人名這種典型的命名實體,已經有很多自然語言處理的工具實現了這個功能,比如NLTK, Stanford NER等。

但是,今天我想講的是藉助機器學習和簡單的NLP來實現定製化的NER。OK,怎麼搞呢?既然提到機器學習,第一反應就是“分類”,畢竟機器學習一個很大的應用領域就在於分類。那麼對於NER怎麼來用“分類”演算法做呢?既然我們的目標是從一個句子中定位出相關的"詞"或"片語",那麼很自然這個句子中的每個詞或字就可以劃分成兩個分類:人名,和非人名。

對上面的這個例子來說,就可以分為下面兩個類:

  1. Siri, 打電話給 ---> 非人名分類
  2. Abby ---> 人名分類

因此這個問題就變成了分類問題了! 只要我們準備足夠的語料庫(包含可能的說法,和常見的人名)就可以來訓練我們的分類模型了。

具體流程可以參考下面示意圖:

21天搞定聊天機器人之{命名實體識別}

現在你的聊天機器人應該知道怎麼打電話了, 是不是很贊。哈哈,其實這種方法可以推廣,可以用來訓練識別其他的Concept, 不僅僅是人名。

OK,今天先聊到這裡了。

歡迎掃描二維碼,瞭解更多。

21天搞定聊天機器人之{命名實體識別}

相關文章