出處:
http://blog.csdn.net/longxinchen_ml/article/details/50543337,
http://blog.csdn.net/han_xiaoyang/article/details/50545650
聲明:版權所有。轉載請聯繫做者並註明出處編程
咱們試着開一下腦洞:假如你有一個優盤,裏面存了大量「三體」人(劉慈欣小說中的高智能外星人)的網絡文本信息。你會如何經過這些信息去了解外星文明並從中獲取有價值的技術情報?固然。「三體」人的文字都長這樣兒:
安全
「全是亂碼,根本摸不着頭腦!markdown
」網絡
好吧,的確是這樣。機器學習
事實上在計算機的眼中。人類的語言跟外星人的語言也沒什麼兩樣。編程語言
讓計算機「理解」人類語言中的種種信息。甚至像人類同樣作出反應。這些是天然語言處理的主要內容。post
那咱們怎麼分析呢?首先,咱們嘗試找出最小觀察對象。發現外星人文字好像是一塊一塊的方塊字。每一個方塊字可以做爲咱們的一個分析的基本語言單位。學習
咱們對這些方塊字作一些主要的統計。大體就能知道「三體」人語言的基本詞彙量、常用詞、罕見詞、常用固定搭配等等。.net
可見統計方法是一個比較實用的利器。
而且,咱們發現,有些方塊字直接由一個空格將其隔開。所以將方塊字區分紅不一樣的區域。每一個區域可否夠理解成一句話?這個工做就是「斷句」,也是天然語言處理其中的一個典型問題。
而後空行可以做爲分段。
依照人類語言的經驗。可能段首第一句話會包括不少其它的信息。
還能繼續分析嗎?彷佛比較難了。但是後來你發現,這個優盤中的外星人語料庫有些是「標記」了的。
比方有些信息是像在豆瓣站點中那樣被組織的。裏面每段話都有一些類似「好評」「差評」的標記。基於這些標記,你可以統計出某些詞在好評中出現的機率比差評的更高。這些詞可能就是「褒義詞」。類似的,你也可以統計出一些「貶義詞」。
基於這些褒、貶義詞,可以去推斷其它文本的褒貶性。
這就是天然語言處理中的「褒貶分析」過程。
……
因而可知。當面對一種一無所知的語言的時候。彷佛最直接的方法就是掌握大量的語料庫,而且這些語料最好是通過各類方式標註了的。而後對其進行各類各樣的統計。發掘一些有價值的信息。這是傳說中天然語言處理的經驗主義視角。
事實上,天然語言處理的應用很是普遍,如:
垃圾郵件識別
經過本身主動分析郵件中的文本內容,推斷該郵件是否垃圾郵件。
中文輸入法
經過識別輸入的拼音字符串。識別用戶但願輸入的漢字。
機器翻譯
將文本從一種語言轉成還有一種語言,如中英文機器翻譯。
本身主動問答、客服機器人
用文本輸入一個問題,再返回一段文本做爲問題的答案。
……
這裏簡單羅列了一些NLP的常見領域:分詞,詞性標註,命名實體識別,句法分析,語義識別,垃圾郵件識別,拼寫糾錯,詞義消歧。語音識別。音字轉換,機器翻譯,本身主動問答……
假設對天然語言處理的應用場景不太瞭解,可以去騰訊的中文語義平臺簡單玩幾個樣例就熟悉了。
依據stafford教授Dan Jurafsky的介紹:
有些問題獲得了基本解決。如:詞性標註、命名實體識別、垃圾郵件識別。
有些問題取得長足進展。如:情感分析、共指消解、詞義消歧、句法分析、機器翻譯、信息抽取。
有些問題依舊充滿挑戰,如:本身主動問答、複述、文摘提取、會話機器人等。
你們可能感覺到了,天然語言處理的問題很是龐雜。一時還真不太好系統地梳理。
然而,從咱們的學習天然語言處理的經驗來看。經過機器學習的基本思路,可以將很是多問題都抽象成相同的算法和模型來處理,這樣會清晰很是多。
比方,詞性標註,垃圾郵件識別,褒貶分析。拼寫糾錯等問題都可以歸結成簡單的分類問題。
這就好用咱們以前掌握的機器學習分類方法去很是好地處理。
又比方,對於機器翻譯,語音識別。音字轉換等等領域,都可以抽象成運用隱馬爾科夫模型去處理,而這自己是一個更加複雜的分類問題。
所以本系列文章儘可能從算法原理的角度去梳理天然語言處理的問題,把這些原理在詳細場景的不一樣變換方式給展現出來。
對於英文等字符串類型的天然語言,正則表達式可以很是好地作一些簡單的處理工做。如詞幹提取。大寫和小寫轉換等。
現在主流的編程語言對正則表達式都有較好的支持,如Grep、Awk、Sed、Python、Perl、Java、C/C++。可以經過簡單的編程完畢一些基本任務。
對於英文,分詞比較直觀。通常被空格區分開來的就是不一樣的詞。但是有些不一樣的詞彙表達需要咱們細心推斷:
這需要咱們依據不一樣的條件作一些簡單的推斷規則。
這樣的方法對英語這樣的包括固定分隔符的語言行之有效。但對於漢語、日語、德語以及咱們上面的「三體文」等文本則再也不適用,需要有專門的分詞技術。咱們將在以後的文章中進行探討。
- 莎拉波娃現在居住在美國東南部的佛羅里達。
- 莎拉波娃 現在 居住 在 美國 東南部 的 佛羅里達
編輯距離(Minimum Edit Distance。MED)。又稱Levenshtein距離,是指兩個字符串之間。由一個轉成還有一個所需要的最少編輯操做次數。
贊成的編輯操做包括:
一個簡單的示意圖例如如下:
咱們可以使用動態規劃算法解最小編輯距離。其形式化定義例如如下:
經過這樣的方法,給字符串之間定義了一個量化的「距離」的概念,而且很是有解釋力。
在機器學習中,有了「距離」就可以作很是多事情。
比方推斷兩個字符串的類似性。作一些分類、聚類的工做。
在project上。編輯距離可以用來提供用於拼寫糾錯的侯選單詞。
比方我用英文輸入法輸入一個「girlfriand」的單詞。但是詞庫中沒有「girlfriand」這個詞。則可以尋找與「girlfriand」編輯距離爲1或2的其它字符串,如「girlfriend」、「girlfriends」,做爲糾正拼寫錯誤的候選詞。
剩下的問題就是推斷哪一個侯選詞的做爲糾正詞的機率更高而已。
因爲天然語言處理中至關一部分都可以抽象成分類問題去處理。咱們在這裏補充一些分類問題的基本知識,方便之後探討。
二分類:推斷題
1.1 褒貶分析:推斷一段文本是「褒」仍是「貶」。
1.2 垃圾郵件識別:推斷一封郵件是「正常郵件」仍是「垃圾郵件」。
多分類:單選題
2.1 詞性標註:推斷一個詞語是名詞、動詞、形容詞、副詞等等。
2.2 拼寫糾錯:推斷多個侯選詞中的哪一個詞可以做爲終於的糾正詞。
2.3 中文分詞:從多種分詞序列中挑選最優序列。
2.4 機器翻譯:從多個備選翻譯句子中。推斷出最優翻譯語句。
類重疊分類:多選題
3.1 主題分析:推斷一個新聞同一時候包括哪幾類主題(美食、食品安全、健康等)
有時候管多選題叫作軟分類。單選題叫硬分類。
對於通常二分類,咱們評估的指標有召回率、準確度和F值。
對於多分類咱們也有類似的評價標準。
假設cij爲有多少篇ci的文檔被本身主動分類到cj類別下,則有:
本文主要是講了一些天然語言處理的淺層內容。咱們從從破譯外星人文字導出天然語言處理過程當中的經驗主義視角。因爲業務場景十分繁雜。咱們打算從機器學習算法的角度去觀察這些業務場景。以便有個清晰的認識。文本處理的一些基礎內容,如正則表達式、分詞斷句等是天然語言預處理過程當中的常用手段。編輯距離是衡量兩個字符串類似性的尺度。
瞭解這些基礎以後,就可以進行一些典型的天然語言處理問題了,比方文本分類。咱們將在接下來的文章中一一介紹。