寫在最前面:筆者也是NLP小白,哪里寫得不當(dāng)歡迎指出隅肥,但是不喜勿噴哈哈~
一、WHAT
- 自然語言處理
- NLP 與 AI 的關(guān)系
- NLP 與 IDE 的關(guān)系
- 中文分詞
1.自然語言處理
即 NLP(Natural Language Processing)
2.NLP 與 AI 的關(guān)系:
知識的鑰匙是什么袄简?是語言腥放。AI的終極目標(biāo)又是什么?是知識绿语。對于下一代智能系統(tǒng)所需的知識秃症,AI必須進(jìn)行兩個重要的步驟才能得到,那就是“聽”和“讀”吕粹,然而這兩個關(guān)鍵的步驟所涉及的關(guān)鍵技術(shù)就是——NLP种柑。
3.NLP 與 IDE 的關(guān)系:
剛接觸自然語言處理的時候,我第一時間從腦里冒出來的兩個問題就是:
自然語言處理中“自然語言”到底是什么東西匹耕?
所謂的自然語言就是指一種自然地隨文化演化的語言聚请。比如我們?nèi)粘T谑褂玫闹形摹⒂⑽牡鹊任绕洌祟愡M(jìn)行交流的時候用來傳遞信息的工具驶赏。而我們的主角NLP的一個重要目標(biāo)就是讓計算機(jī)理解我們?nèi)祟悅鬟f信息時使用的自然語言。-
和我們的IDE工具在理解我們從鍵盤輸入的C語言既鞠、JAVA等高級程序語言的過程是否相同煤傍?
其實一般的高級程序語言在設(shè)計之初就會有其固定的語法、所使用的關(guān)鍵字嘱蛋,IDE只要記住了一定的關(guān)鍵字蚯姆、約定的規(guī)則等,按照一定的流程洒敏,就可以理解并編譯我們的高級程序語言龄恋。
流程
而NL呢?處理NL的復(fù)雜性跟高級程序語言是完全不是在同一個等級的桐玻,NL中有各種各樣的語種篙挽,有中文、英文镊靴,NL也會有很強(qiáng)的語義性铣卡,即不同環(huán)境說出同樣的話可能有完全不同的含義,也就是存在二義性偏竟。
二義性例子
4.NLP 在中文領(lǐng)域的重頭戲-中文分詞
這里首先通過一個例子煮落,在中文分詞器上演示:
從上述簡單例子,要理解一個句子首先就是要將句子分成一個個獨(dú)立的詞匯踊谋,看似簡單的東西蝉仇,要讓計算機(jī)理解起來,是經(jīng)過了幾年、幾十年的研究轿衔、完善才有的成果沉迹,其中奧妙無限。
二害驹、HOW
NLP通常包括以下幾個關(guān)鍵的問題:
- 選擇什么樣的分類算法高效鞭呕?
- 采用什么樣的語言模型適合?
- 常見的語言模型有哪些宛官?
- 隱含馬爾可夫模型?
- 相關(guān)領(lǐng)域葫松?
1.選擇什么樣的分類算法高效?
其實第一個問題是幾乎所有機(jī)器學(xué)習(xí)領(lǐng)域的都需要考慮的標(biāo)準(zhǔn)問題底洗,各種針對不同數(shù)據(jù)類型腋么、數(shù)據(jù)分布的算法和技巧,這里不再贅述亥揖。
2.采用什么樣的語言模型適合珊擂?
1、為了讓計算機(jī)處理自然語言徐块,其實經(jīng)歷過很多個階段未玻,與現(xiàn)在所不同的是,以前為了讓計算機(jī)處理我們的自然語言胡控,很多時候是常用基于規(guī)則的處理扳剿,就中文來說,如我們從小時候就接觸的中文語法:主謂賓等昼激。
2庇绽、然而采用基于規(guī)則的方式并不能使NLP在該領(lǐng)域有所建樹,后來慢慢就出現(xiàn)了基于統(tǒng)計的方式橙困,而采用這種方式瞧掺,一個關(guān)鍵的問題就是為自然語言這種上下文相關(guān)的特性建立特定的數(shù)學(xué)模型。也就是常說的統(tǒng)計語言模型凡傅。
3辟狈、其實我覺得為何如今大多使用基于統(tǒng)計的模型,我覺得是天時地利人和的夏跷,為什么這樣說呢哼转,隨著技術(shù)水平的飛速發(fā)展,基礎(chǔ)計算能力已經(jīng)跟以前的是完全的不同等級了槽华,意味著我們在建立壹蔓、訓(xùn)練模型的時候,是能夠在及其豐富的語料環(huán)境下的猫态。
3.常見的語言模型有哪些佣蓉?
不同語言模型最根本的區(qū)別披摄,就是對文本提取特征的不同。
1.Bag-of-words:在這種模型中是將最原始的特征集勇凭,分割成許多單詞疚膊,形成一個詞集合,往往一個單詞/分詞就是一個特征套像。往往一個數(shù)據(jù)集就會有上萬個特征酿联;有一些簡單的指標(biāo)可以幫助篩選掉一些對分類沒幫助的詞語,例如“停止詞”(Stop Word夺巩,漢語中常見的停止詞有:“是”、“得”等)周崭,計算互信息熵等等柳譬,但不管怎么訓(xùn)練,特征維度都很大续镇,每個特征的信息量太忻腊摹;因此在使用這種模型的時候往往非常依賴適用場景摸航。
2.統(tǒng)計特征:包括Term frequency(TF制跟,詞頻) , Inverse document frequency(IDF,逆文本頻率指數(shù)), 以及合并起來的TF-IDF酱虎。這種語言模型主要是用詞匯的統(tǒng)計特征來作為特征集雨膨,每個特征都能夠說得出物理意義。這種模型大多用于度量網(wǎng)頁和查詢的相關(guān)性读串,通過對每個特征進(jìn)行TF-IDF(TF1IDF1+TF2IDF2+...)計算聊记,得到相關(guān)性,在搜索領(lǐng)域有著廣泛的應(yīng)用恢暖。
3.NGram:一種考慮了詞匯順序的模型排监,就是N階Markov鏈,每個樣本轉(zhuǎn)移成了轉(zhuǎn)移概率矩陣杰捂。也能取得不錯的效果舆床,在漢語中的使用場景是:拼音、筆劃在進(jìn)行轉(zhuǎn)換成句子時嫁佳,計算出最有可能是目標(biāo)(最大概率)的句子挨队,從而實現(xiàn)無需用戶手動選擇單個漢字就可以形成一個句子。
4.隱含馬爾可夫模型:
在說到NLP時脱拼,不自覺就會想到“隱含馬爾可夫模型”
隱含馬爾可夫模型(HMM) 在最開始的時候在通信領(lǐng)域應(yīng)用得很廣泛瞒瘸,后來由于其特性,被逐步應(yīng)用熄浓、推廣到語言處理中情臭,在NLP 及 通信領(lǐng)域中起著越來越重要的角色省撑。
如何訓(xùn)練HMM?
在吳軍博士的《數(shù)學(xué)之美》中提到關(guān)于HMM的三個基本問題:
1俯在、給定一個模型竟秫,如何計算某個特定的輸出序列的概率;
其實這個問題就直接的方式就是使用Forward-Backward算法:
Forward-Backward 就不在這里詳細(xì)闡述跷乐,其實整個算法的工作流程就是分成兩部分肥败,從最左邊開始,從左到右計算消息愕提,并依次傳遞到右邊馒稍;然后再通過得到的遞推式從后面往前面遞推。
2浅侨、給定一個模型和某個特定的輸出序列纽谒,如何找到最可能產(chǎn)生這個輸出的狀態(tài)序列;
這個問題可以使用維特比算法解決(動圖):
其實就是在每個狀態(tài)(zhong 對應(yīng)“中”如输、“種”等不同狀態(tài))按照不同的值展開鼓黔,形成的籬笆網(wǎng)絡(luò)中得到的有向網(wǎng)狀圖中得到找出一條最短路徑。
籬笆網(wǎng)絡(luò)
該算法可以分成三步走:
A不见、如果目標(biāo)路徑P必經(jīng)過某一點(diǎn)澳化,如x23,則起點(diǎn)S到x23的路徑必定在P上稳吮。
B缎谷、P必定經(jīng)過i時刻的某一個狀態(tài)i(此時i=2,x21盖高、x22...x2N中某一個狀態(tài)x2j)慎陵,則起點(diǎn)S到i時刻的某一狀態(tài)的最短路徑也必定在P上。即d(S喻奥,X3k)= d(S席纽,X2j)+ d(X2j,X3k)
C撞蚕、第三步則是結(jié)合前兩步润梯,從i時刻到i+1時刻只需要考慮S到i時刻所有狀態(tài)中(xij)的最短路徑+xij到xi+1,k的距離甥厦。
3纺铭、給定足夠量的觀測數(shù)據(jù),如何估計隱含馬爾可夫模型的參數(shù)刀疙。
這里所說的參數(shù) 包括
1.轉(zhuǎn)移概率 P(St|St-1):從前一個狀態(tài)St-1到當(dāng)前狀態(tài)St的概率舶赔;
2.生成概率 P(Ot|St):每一個狀態(tài)St產(chǎn)生相應(yīng)的輸出符號Ot的概率。
要得到這兩個參數(shù)的方法分成兩種:有監(jiān)督的訓(xùn)練方法 和 無監(jiān)督的訓(xùn)練方法
1.有監(jiān)督的訓(xùn)練方法:最直接的方式就是通過人工標(biāo)注的方式谦秧,即可以直接得到對應(yīng)的分子分母竟纳,但是這樣子是成本極高的撵溃,應(yīng)用場景并不多;
2.無監(jiān)督的訓(xùn)練方法:這種就是通過得到o1,o2...等這些信號的量锥累,推算出上述兩個參數(shù)缘挑,主要使用了 鮑姆-韋爾奇算法(Baum-Welch Algorithm)。
HMM經(jīng)典的例子
擲骰子:這里引用知乎上有人舉過的例子桶略,“擲骰子”
5.相關(guān)領(lǐng)域:
就上文所說语淘,NLP涉及的領(lǐng)域越來越廣泛,越來越重要际歼。
- 機(jī)器翻譯(Machine translation)
- 文本朗讀(Text to speech)
- 中文自動分詞(Chinese word segmentation)
- 自動摘要(Automatic summarization)
三惶翻、WHY
筆者堅信NLP必然會壯大,從而極快地推動AI發(fā)展速度鹅心。為什么维贺?
隨著AI時代的到來必然少不了NLP這把利劍,作為人類與AI的溝通橋梁巴帮,如家用機(jī)器人要在能夠很好地理解人們說的話并執(zhí)行相應(yīng)的指令,而不再是以往幾個單調(diào)的指令(“sit虐秋、open榕茧、sing...”)...等等很多場景,我個人拙見覺得基本都離不開NLP客给。然而這個也需要 CS 與 NS 領(lǐng)域的越來越緊密結(jié)合用押,NLP的場景也會不斷增多。
NLP 使用場景:
除了幾個很常見的領(lǐng)域如機(jī)器翻譯等靶剑,這里舉一個企業(yè)應(yīng)用中可能會用到的(當(dāng)然很多都是筆者自己yy的o ):
1.輿情分析
在很多APP中都有一個入口是 “用戶反饋”蜻拨,在這里一般是用戶使用哪個業(yè)務(wù)功能出現(xiàn)問題來反饋,對應(yīng)著某一個特定的模塊桩引。假如將這些數(shù)據(jù)收集起來缎讼,達(dá)到一定數(shù)據(jù)量的時候,訓(xùn)練出一個專屬我們自己APP的模型坑匠,下次有用戶反饋的時候可以提取出反饋文本中的特征血崭,將問題分類,快速定位并通知負(fù)責(zé)該模塊的同學(xué)厘灼。也可以在用戶畫像上增加該特征夹纫;
1、Android在灰度階段也可以有針對性地投放到對應(yīng)的用戶群设凹,灰度的效果肯定會得到很好的提升舰讹。
2、輿情分析確實是比較值得分析的一塊闪朱,如果一個人一上午通過人力去查看輿情的原因月匣,可能原因還沒查出來钻洒,一上午就過了,很浪費(fèi)時間桶错,如果有這樣一個模型能夠快速定位航唆、分類出問題勢必可以節(jié)省很多人力物力。
2.用戶關(guān)系分析
可以在微博上抓取用戶發(fā)的文本信息中有關(guān)自己應(yīng)用或者競爭對手的文本院刁,我覺得應(yīng)該可以分析到很多有趣的資料糯钙。比如競對產(chǎn)品的用戶滿意度、用戶對對手有什么滿意的和不滿的地方等等退腥,相當(dāng)?shù)慕拥貧夤?/p>
四任岸、END?
NLP深不見底狡刘,小弟無法作出小結(jié)~
萬言千語享潜,終于寫好啦~以上很多是由于筆者水平有限,然后自己yy出來的~所以請各位大(da)神(lao)多多指教嗅蔬,不喜勿噴呀哇哈哈~