1. 程式人生 > >NLP系列(1)_從破譯外星人文字淺談自然語言處理的基礎

NLP系列(1)_從破譯外星人文字淺談自然語言處理的基礎

應用 展現 發現 func 文本 詞幹 pos 中文分詞 漢語

作者:龍心塵 &&寒小陽
時間:2016年1月。


出處:
http://blog.csdn.net/longxinchen_ml/article/details/50543337,
http://blog.csdn.net/han_xiaoyang/article/details/50545650
聲明:版權全部。轉載請聯系作者並註明出處

1. 假設讓你破譯“三體”人文字你會怎麽辦?

我們試著開一下腦洞:假如你有一個優盤,裏面存了大量“三體”人(劉慈欣小說中的高智能外星人)的網絡文本信息。你會如何通過這些信息去了解外星文明並從中獲取有價值的技術情報?當然。“三體”人的文字都長這樣兒:


技術分享

“全是亂碼,根本摸不著頭腦!

好吧,的確是這樣。

事實上在計算機的眼中。人類的語言跟外星人的語言也沒什麽兩樣。

讓計算機“理解”人類語言中的種種信息。甚至像人類一樣做出反應。這些是自然語言處理的主要內容。

那我們怎麽分析呢?首先,我們嘗試找出最小觀察對象。發現外星人文字好像是一塊一塊的方塊字。每個方塊字能夠作為我們的一個分析的基本語言單位。

我們對這些方塊字做一些主要的統計。大致就能知道“三體”人語言的基本詞匯量、經常使用詞、罕見詞、經常使用固定搭配等等。

可見統計方法是一個比較實用的利器。

並且,我們發現,有些方塊字直接由一個空格將其隔開。因此將方塊字區分成不同的區域。每個區域能否夠理解成一句話?這個工作就是“斷句”

,也是自然語言處理其中的一個典型問題。

然後空行能夠作為分段

依照人類語言的經驗。可能段首第一句話會包括很多其它的信息。

還能繼續分析嗎?似乎比較難了。可是後來你發現,這個優盤中的外星人語料庫有些是“標記”了的。

比方有些信息是像在豆瓣站點中那樣被組織的。裏面每段話都有一些相似“好評”“差評”的標記。基於這些標記,你能夠統計出某些詞在好評中出現的概率比差評的更高。這些詞可能就是“褒義詞”。相似的,你也能夠統計出一些“貶義詞”。

基於這些褒、貶義詞,能夠去推斷其它文本的褒貶性。

這就是自然語言處理中的“褒貶分析”過程。

……

由此可見。當面對一種一無所知的語言的時候。似乎最直接的方法就是掌握大量的語料庫,並且這些語料最好是經過各種方式標註了的。

然後對其進行各種各樣的統計。發掘一些有價值的信息。這是傳說中自然語言處理的經驗主義視角

2. 自然語言處理要解決的問題:

事實上,自然語言處理的應用非常廣泛,如:

  • 垃圾郵件識別

    通過自己主動分析郵件中的文本內容,推斷該郵件是否垃圾郵件。

  • 中文輸入法

    通過識別輸入的拼音字符串。識別用戶希望輸入的漢字。

  • 機器翻譯

    將文本從一種語言轉成還有一種語言,如中英文機器翻譯。

  • 自己主動問答、客服機器人

    用文本輸入一個問題,再返回一段文本作為問題的答案。

    ……

這裏簡單羅列了一些NLP的常見領域:分詞,詞性標註,命名實體識別,句法分析,語義識別,垃圾郵件識別,拼寫糾錯,詞義消歧。語音識別。音字轉換,機器翻譯,自己主動問答……

假設對自然語言處理的應用場景不太了解,能夠去騰訊的中文語義平臺簡單玩幾個樣例就熟悉了。

3. 自然語言處理的發展現狀

依據stafford教授Dan Jurafsky的介紹:

  • 有些問題得到了基本解決。如:詞性標註、命名實體識別、垃圾郵件識別。

  • 有些問題取得長足進展。如:情感分析、共指消解、詞義消歧、句法分析、機器翻譯、信息抽取。

  • 有些問題依舊充滿挑戰,如:自己主動問答、復述、文摘提取、會話機器人等。

4. 用算法統攝問題

大家可能感受到了,自然語言處理的問題非常龐雜。一時還真不太好系統地梳理。

然而,從我們的學習自然語言處理的經驗來看。通過機器學習的基本思路,能夠將非常多問題都抽象成相同的算法和模型來處理,這樣會清晰非常多。

比方,詞性標註,垃圾郵件識別,褒貶分析。拼寫糾錯等問題都能夠歸結成簡單的分類問題

這就好用我們之前掌握的機器學習分類方法去非常好地處理。

又比方,對於機器翻譯,語音識別。音字轉換等等領域,都能夠抽象成運用隱馬爾科夫模型去處理,而這本身是一個更加復雜的分類問題。

因此本系列文章盡量從算法原理的角度去梳理自然語言處理的問題,把這些原理在詳細場景的不同變換方式給展示出來

5. 文本處理基礎

5.1 正則表達式

對於英文等字符串類型的自然語言,正則表達式能夠非常好地做一些簡單的處理工作。如詞幹提取。大寫和小寫轉換等。

如今主流的編程語言對正則表達式都有較好的支持,如Grep、Awk、Sed、Python、Perl、Java、C/C++。能夠通過簡單的編程完畢一些基本任務。

5.2 分詞

對於英文,分詞比較直觀。一般被空格區分開來的就是不同的詞。可是有些不同的詞匯表達須要我們細心推斷


技術分享

這須要我們依據不同的條件做一些簡單的推斷規則

這樣的方法對英語這樣的包括固定分隔符的語言行之有效。但對於漢語、日語、德語以及我們上面的“三體文”等文本則不再適用,須要有專門的分詞技術。我們將在之後的文章中進行探討。

  • 莎拉波娃如今居住在美國東南部的佛羅裏達。

  • 莎拉波娃 如今 居住 在 美國 東南部 的 佛羅裏達

5.3 編輯距離

編輯距離(Minimum Edit Distance。MED)。又稱Levenshtein距離,是指兩個字符串之間。由一個轉成還有一個所須要的最少編輯操作次數。
同意的編輯操作包括:

  • 將一個字符替換成還有一個字符(substitution。s)
  • 插入一個字符(insert。i)
  • 刪除一個字符(delete。d)

一個簡單的示意圖例如以下:


技術分享

我們能夠使用動態規劃算法解最小編輯距離。其形式化定義例如以下:


技術分享

通過這樣的方法,給字符串之間定義了一個量化的“距離”的概念,並且非常有解釋力。

在機器學習中,有了“距離”就能夠做非常多事情。

比方推斷兩個字符串的相似性。做一些分類、聚類的工作。

在project上。編輯距離能夠用來提供用於拼寫糾錯的侯選單詞。

比方我用英文輸入法輸入一個“girlfriand”的單詞。可是詞庫中沒有“girlfriand”這個詞。則能夠尋找與“girlfriand”編輯距離為1或2的其它字符串,如“girlfriend”、“girlfriends”,作為糾正拼寫錯誤的候選詞。

剩下的問題就是推斷哪個侯選詞的作為糾正詞的概率更高而已。

6. 分類問題基礎

由於自然語言處理中相當一部分都能夠抽象成分類問題去處理。我們在這裏補充一些分類問題的基本知識,方便以後探討。

6.1 分類問題的多種類型

  1. 二分類:推斷題

    1.1 褒貶分析:推斷一段文本是“褒”還是“貶”。

    1.2 垃圾郵件識別:推斷一封郵件是“正常郵件”還是“垃圾郵件”。

  2. 多分類:單選題

    2.1 詞性標註:推斷一個詞語是名詞、動詞、形容詞、副詞等等。

    2.2 拼寫糾錯:推斷多個侯選詞中的哪個詞能夠作為終於的糾正詞。

    2.3 中文分詞:從多種分詞序列中挑選最優序列。

    2.4 機器翻譯:從多個備選翻譯句子中。推斷出最優翻譯語句。

  3. 類重疊分類:多選題

    3.1 主題分析:推斷一個新聞同一時候包括哪幾類主題(美食、食品安全、健康等)


技術分享

有時候管多選題叫做軟分類。單選題叫硬分類。

6.2 多分類的評估指標

對於一般二分類,我們評估的指標有召回率、準確度和F值

對於多分類我們也有相似的評價標準。

假設cij為有多少篇ci的文檔被自己主動分類到cj類別下,則有:


技術分享

7. 小結

本文主要是講了一些自然語言處理的淺層內容。我們從從破譯外星人文字導出自然語言處理過程中的經驗主義視角。由於業務場景十分繁雜。我們打算從機器學習算法的角度去觀察這些業務場景。以便有個清晰的認識。文本處理的一些基礎內容,如正則表達式、分詞斷句等是自然語言預處理過程中的經常使用手段。編輯距離是衡量兩個字符串相似性的尺度。

了解這些基礎之後,就能夠進行一些典型的自然語言處理問題了,比方文本分類。我們將在接下來的文章中一一介紹。

NLP系列(1)_從破譯外星人文字淺談自然語言處理的基礎