http://www.zhihu.com/question/19895141
stanford NLP課程網址
https://class.coursera.org/nlp/lecture
14 個回答
接下來說,《統計自然語言處理基礎》這本書,這書實在是太老了,但是也很經典,看不看隨意了。
現在自然語言處理都要靠統計學知識,所以我十分十分推薦《統計學習方法》,李航的。李航老師用自己課余時間7年寫的,而且有博士生Review的。自然語言處理和機器學習不同,機器學習依靠的更多是嚴謹的數學知識以及推倒,去創造一個又一個機器學習算法。而自然語言處理是把那些機器學習大牛們創造出來的東西當Tool使用。所以入門也只是需要涉獵而已,把每個模型原理看看,不一定細致到推倒。
宗成慶老師 的統計自然語言處理第二版非常好~ 《中文信息處理叢書:統計自然語言處理(第2版)》 藍色皮的~~~
然后就是Stanford公開課了,Stanford公開課要求一定的英語水平。 | Coursera 我覺得講的比大量的中國老師好~
舉例:
http://www.ark.cs.cmu.edu/LS2/in...
或者
http://www.stanford.edu/class/cs...
如果做工程前先搜索有沒有已經做好的工具,不要自己從頭來。做學術前也要好好的Survey!
開始推薦工具包:
中文的顯然是哈工大開源的那個工具包 LTP (Language Technology Platform) developed by HIT-SCIR( 哈爾濱工業大學社會計算與信息檢索研究中心).
英文的(python):
- pattern - simpler to get started than NLTK
- chardet - character encoding detection
- pyenchant - easy access to dictionaries
- scikit-learn - has support for text classification
- unidecode - because ascii is much easier to deal with
希望可以掌握以下的幾個tool:
CRF++
GIZA
Word2Vec
希望可以理解自然語言處理的基本架構~:分詞=>詞性標注=>Parser
Quora上推薦的NLP的論文(摘自Quora 我過一陣會翻譯括號里面的解釋):
Parsing(句法結構分析~語言學知識多,會比較枯燥)
- Klein & Manning: "Accurate Unlexicalized Parsing" ( )
- Klein & Manning: "Corpus-Based Induction of Syntactic Structure: Models of Dependency and Constituency" (革命性的用非監督學習的方法做了parser)
- Nivre "Deterministic Dependency Parsing of English Text" (shows that deterministic parsing actually works quite well)
- McDonald et al. "Non-Projective Dependency Parsing using Spanning-Tree Algorithms" (the other main method of dependency parsing, MST parsing)
Machine Translation(機器翻譯,如果不做機器翻譯就可以跳過了,不過翻譯模型在其他領域也有應用)
- Knight "A statistical MT tutorial workbook" (easy to understand, use instead of the original Brown paper)
- Och "The Alignment-Template Approach to Statistical Machine Translation" (foundations of phrase based systems)
- Wu "Inversion Transduction Grammars and the Bilingual Parsing of Parallel Corpora" (arguably the first realistic method for biparsing, which is used in many systems)
- Chiang "Hierarchical Phrase-Based Translation" (significantly improves accuracy by allowing for gappy phrases)
Language Modeling (語言模型)
- Goodman "A bit of progress in language modeling" (describes just about everything related to n-gram language models 這是一個survey,這個survey寫了幾乎所有和n-gram有關的東西,包括平滑 聚類)
- Teh "A Bayesian interpretation of Interpolated Kneser-Ney" (shows how to get state-of-the art accuracy in a Bayesian framework, opening the path for other applications)
Machine Learning for NLP
- Sutton & McCallum "An introduction to conditional random fields for relational learning" (CRF實在是在NLP中太好用了!!!!!而且我們大家都知道有很多現成的tool實現這個,而這個就是一個很簡單的論文講述CRF的,不過其實還是蠻數學= =。。。)
- Knight "Bayesian Inference with Tears" (explains the general idea of bayesian techniques quite well)
- Berg-Kirkpatrick et al. "Painless Unsupervised Learning with Features" (this is from this year and thus a bit of a gamble, but this has the potential to bring the power of discriminative methods to unsupervised learning)
- Hearst. Automatic Acquisition of Hyponyms from Large Text Corpora. COLING 1992. (The very first paper for all the bootstrapping methods for NLP. It is a hypothetical work in a sense that it doesn't give experimental results, but it influenced it's followers a lot.)
- Collins and Singer. Unsupervised Models for Named Entity Classification. EMNLP 1999. (It applies several variants of co-training like IE methods to NER task and gives the motivation why they did so. Students can learn the logic from this work for writing a good research paper in NLP.)
- Gildea and Jurafsky. Automatic Labeling of Semantic Roles. Computational Linguistics 2002. (It opened up the trends in NLP for semantic role labeling, followed by several CoNLL shared tasks dedicated for SRL. It shows how linguistics and engineering can collaborate with each other. It has a shorter version in ACL 2000.)
- Pantel and Lin. Discovering Word Senses from Text. KDD 2002. (Supervised WSD has been explored a lot in the early 00's thanks to the senseval workshop, but a few system actually benefits from WSD because manually crafted sense mappings are hard to obtain. These days we see a lot of evidence that unsupervised clustering improves NLP tasks such as NER, parsing, SRL, etc,
但更重要的還是實戰經驗!
這本書的權威自不用說,譯者是馮志偉老師和孫樂老師,當年讀這本書的時候,還不知道馮老師是誰,但是讀起來感覺非常好,想想如果沒有在這個領域積攢多年的實力,是不可能翻譯的這么順暢的。這本書在國內外的評價都比較好,對自然語言處理的兩個學派(語言學派和統計學派)所關注的內容都有所包含,但因此也失去一些側重點。從我的角度來說更偏向於統計部分,所以需要了解統計自然語言處理的讀者下面兩本書更適合做基礎閱讀。不過這本書的N-gram語言模型部分寫得非常不錯,是SRILM的推薦閱讀參考。
2、《統計自然語言處理基礎》(Foundations of Statistical Natural Language Processing)
我比較喜歡這本書,這兩年的學習過程中也經常拿這本書作為參考,可能與我做統計機器翻譯有關吧。看china pub上的評論說這本書的翻譯比較差,自己的感覺是還行。當然,這是國內翻譯圖書的一個通病:除了很難有翻譯的非常好的書外,另外一個原因就是滯后性。如果e文足夠好的壞,就及時看英文版吧。這本書在統計基本部分的介紹很不錯,另外n元語法部分講得也比較好,也是SRILM的推薦閱讀。
3、《統計自然語言處理》
這是北京自動化所宗成慶老師今年5月出版的一本專著,我有幸較早的閱讀了這本書的很多章節。一個很強的感覺是:如果你想了解相關領域的國內外最新進展,這本書非常值得一讀。上面兩本書在由於出版稍早的緣故,很多領域最新的方法都沒有介紹。而這本書剛剛出版,宗老師對國內外現狀把握的也比較好,因此書中充分體現了這方面的信息。另外統計機器翻譯這一部分寫得很詳細很不錯,這可能與宗老師亦是這個領域的研究者有關吧。
4、《計算機自然語言處理》
這是我最早看的一部自然語言處理方面的書籍,和上面幾部大部頭的書籍相比,這本書很薄,可以很快的看完。書的內容我都有點忘了,但是印象中可以在每個章節看到國內這個領域的研究歷史和相關單位。這時才發現母校HIT在這個領域的超強實力,只是可惜這時候已經離開冰城了。
這些書籍怎么讀都行,泛覽也罷,精讀也行,只要有時間,多讀書是沒壞處的。我自己的經驗是,先泛泛的瀏覽或閱讀一篇,對於比較晦澀的部分可以先跳過去,然后對自己感興趣的領域或者將要從事的領域的相關章節進行精讀,當然,書籍一般在開始的幾個章節講些基礎性的知識,這部分最好也仔細揣摩一下。真正要對自己研究的領域深刻了解,還得好好讀一下本領域的相關論文。
書籍篇:
入門書籍挺多的,我也看過不少。
1)《數學之美》(吳軍)
這是我看的第一本關於NLP的書。現在第二版出來了,貌似新增了兩章內容,還沒看過。第一版寫的挺好,科普性質。看完對於nlp的許多技術原理都有了一點初步認識。現在沒事還會翻翻的。
2)《自然語言處理簡明教程》(馮志偉)
馮志偉老師這本書,偏向於語言學,書略厚。關於語言學的東西很多。都是很容易理解的東西。建議沒有學過理工科們翻一翻,畢竟nlp這東西未來趨勢可能會融合不少語言學的東西。
3)《自然語言處理綜論》(Daniel Jurafsky)
這本書也是馮志偉老師翻譯的,翻譯的挺棒,看了差不多一半。綜論性質的,選感興趣的章節翻翻就行。作者是Daniel Jurafsky,在coursera上面有他的課程,后面視頻篇里集中談。
4)《自然語言處理的形式模型》(馮志偉)
這本書還是馮志偉老師寫的。很佩服馮志偉老師,文理兼修,而且都很厲害。內容許多是從他以前的著作里面摘取的。算是一本各種語言模型和統計模型的大集合吧。放在桌面,沒事翻翻也能是極好的。
5)《統計自然語言處理(第2版)》(宗成慶)
這本書我覺得寫的不錯。雖然我是語言學背景,但讀起來也沒有太吃力。它也是綜論性質的,可以跳着看。
6)《統計學習方法》(李航)
自然語言處理需要些機器學習的知識。我數學基礎還是太薄弱,有的內容還是有些吃力和困惑的。
7)《機器學習實戰》哈林頓 (Peter Harrington)
《Python自然語言處理》
《集體智慧編程》
這些書都是python相關的。中間那本就是將NLTK的。網上都有電子版,需要的時候翻一番看一看就行。
視頻篇:
@吳俁 上面提到的,斯坦福的nlp課程 Video Listing,哥倫比亞大學的 https://class.coursera.org/nlangp-001,兩個都是英文的,無中文字幕,現在還可以下載視頻和課件。
另外超星學術視頻:
1) 自然語言理解_宗成慶
我覺得講的還是不錯的,第一次聽的時候有些暈乎。該課程網上有ppt講義。講義后來被作者寫成了書,就是上面提到的《統計自然語言處理》。拿着書就是教材,還有課程ppt和視頻可以看,這種感覺還是很好的。
2) 自然語言處理_關毅
感覺講的一般,聽了幾節,跳躍太多,有時候讓人摸不着頭腦。多聽聽還是很有益處的吧。
3) 計算語言學概論_侯敏
這個就是語言學內容為主了,作者也是語言學背景下在nlp比較活躍的。講的很淺。老師講課很啰嗦,說話太慢,我都是加速看的。
4) 計算語言學_馮志偉
馮志偉老師這個課,一如他的著作,語言學和統計都會涉及到一些。馮志偉老師說話有些地方聽不大清,要是有字幕就好了。
5) 語法分析_陸儉明
這是純語言學的課程。陸劍明也是當代語言學的大師。我覺得既然是自然語言處理,語言學的東西,還是多少要了解的。
其他篇:
1)博客的話, 我愛自然語言處理專門記錄nlp的,很不錯,再有就是csdn上一些比較瑣碎的了。
2) 北京大學中文系 應用語言學專業這個剛開始的時候也看了看,又不少干貨。
3)《中文信息學報》說這個,不會被大神噴吧。英語不佳,英文文獻實在看的少。這個學報,也是挑着看看就行。
好像就是這些內容了。如果有,日后再補。
雖然自己寫了這么多,但不少書和視頻都沒有完整的看完。現在水平仍很菜,仍在進階的路上。希望各路大神多多指點,該拍磚就拍吧。
在知乎上搜索相關問題,有人推薦《數學之美》,之前粗略看過一次,這次想重新看一下並且做個讀書筆記。下面是關於自然語言理解方面的一些讀書筆記和自己的思考。
一. 自然語言處理歷史:
自然語言處理最初發展的20多年里,相關科學家都極力通過電腦模擬人腦,試圖用這種方式來處理人類語言,但是這種方式被證明是行不通的,成功幾乎為零。NLP發展的第二階段是70年代之后,科學家們終於找到了基於數學模型和統計的方法。
第一階段的時候,學術界對人工智能和自然語言理解的普遍認識是:要讓機器完成翻譯或者語音識別等等,必須先讓計算機理解自然語言,就像人類一樣去理解這些語言,這顯然是做不到的。即便在可預見的將來,這也必定是一件不太現實的事情。
第二階段,比如機器在翻譯的過程中,並沒有理解這句話的意思,它只是做了一種統計上的歸納而已。機器依舊是機器。
基於規則的分析方法,需要將現有的句法系統按照句子成分划分成一個一個單位,而這會隨着句子的復雜多樣化句子的划分復雜度幾何級上升,並且沒有上下文的幫助句子詞義的多樣性同樣限制了規則分析方法的發展。比如The pen is in the box.和The box is in the pen.按照規則來分析該句子根本不可能獲得語義,必須依靠常識來得到該句子的真正含義,但是基於統計的方法可以依靠上下文對該語義做一個合理的預估。基於規則的方法完全從該單獨的句子着手,根本不管上下文。但是這樣也還是沒有讓基於統計的方法快速發展起來,主要原因在於基於統計的方法需要大量的訓練數據,這在當時來說是達不到的。
二.統計語言模型:
自然語言逐漸演變成為一種上下文相關的信息表達和傳遞的方式,計算機就用統計語言模型去表征自然語言這種上下文相關的特性。
一個句子S=(w1,w2,w3…wn)由n個詞組成,我們要弄清該句子是否是一個合乎實際的句子,可以計算該句子在現實情況下的概率,最最簡單的想法是把人類所有句子統計一遍,然后再計算這個句子的概率,但是這顯然是行不通的。一個可行的方法是把這個句子分成n個詞(對於中文來說,這就是中文分詞研究的東西),然后再計算這n個詞按照該順序組成這個句子的概率大小。可以表示如下:

這個概率計算的復雜度會隨着n的增大指數上升。因此引入齊次馬爾科夫性假設,即假設一個詞的出現只與其前面一個詞的出現有關,而與更前面的詞無關,這樣概率計算可以簡化為如下:

這樣的模型稱為二元模型,用更一般的表示方法為:

但是二元模型顯然太過於簡單草率,所以有了高階模型的出現,n階模型表示一個詞的出現與其前面的n-1個詞有關。表示為:

一般由於計算復雜度的問題,大多數情況下用3階模型,谷歌的用到了4階模型。
接下來的問題是,由於用來訓練模型的語料庫(corpus)太少而出現的零概率情況如何處理?
這里有一個古德-圖靈公式,基本思路是當詞語對出現次數大於某一閾值時,利用條件概率計算出來的頻率根據大數定理就當做概率(因為只有大於某一閾值時我們才有充分理由相信大數定理的條件被滿足),當出現頻數小於該閾值但又大於零的頻率,則相應的下調該頻率值,因為這個時候大數定律成立的條件是沒有被滿足的,並且出現次數越少,下調頻率越多,最后把這個下調的頻率當做所求的概率,最后對於零出現的情況,則將這些下調的總和平均分配給零出現的次數,以保證概率總和為1。
三.中文分詞問題:
漢語和英語有分割每個詞的空格不一樣,漢語中所有的詞都沒有明顯分界,所以必須解決中文分詞問題,最簡單的方法是查字典,基本思想是首先有一個中文詞語的字典庫,將一個句子從左掃描到末尾,遇到字典里有的詞之后就保存,規則是盡量找最長的詞,比如中國航天城,中是一個單字詞,先保存,繼續往下掃描,遇到國字,中和國可以組成一個更長的詞,因此最后保存中國這個詞,后面的航天城類似。查字典的處理方法簡單,但不夠准確。因為很多情況下並不是最長詞的分詞規則就是最適合的。
利用統計語言模型來處理中文分詞的第一人是郭進博士,基本思想是:假設一個句子有很多種分詞方法,則分別計算每種分詞方法對應的該句子概率。即:

也就是說,利用每種分詞方法都可以計算該句子的概率。然后取最大概率對應的分詞方法。其本質上是一種極大似然估計。
四.關於郭進博士分詞方法的一些思考:(求指正)
在這里我添加一些關於極大似然估計和極大后驗概率,以及頻率學派和貝葉斯學派這方面自己的思考,因為每次好不容易弄清楚了二者聯系和區別之后,過段時間又混淆了。
在這里,極大似然估計和極大后驗概率都是如下的應用場景:在給定觀測數據X的情況下,我們要求解產生該觀測數據X背后的參數,並且我們求得的參數並不是非此即彼的,也就是有一個概率分布來表征每一個可能的參數。當然, 一般情況下我們都取概率最大的那個參數,即.

極大似然估計和極大后驗概率的關鍵區別就在第三個等號這里,這也是歷史上著名的頻率學派和貝葉斯學派爭論的地方,焦點就在於是否是一個常數,假如是常量的話,那么第三個等號自然就成立了,這樣對於參數的估計就變成了極大似然估計(Maximum Likelihood),假如
不為常量,那么第三個等號就不能成立,對於參數的估計只能停留在倒數第二個式子這里,這便是極大后驗概率(Maximum A Posteriori)。
在頻率學派的世界里, 參數是常量只是未知。而在貝葉斯學派的世界里,參數則不是常量。雙方曾經對這兩種觀點進行了激烈的爭論,這是后話不表。
回到我們這里的問題,給定一個句子,我們要求解其分詞組合,實際上給定的這個句子就是我們的觀測值,而分詞組合便是待求解的參數,而上文說到的清華大學博士郭進所用到的方法便是:先求得每個分詞組合下對應的句子概率,把最大概率對應的分詞組合作為最終答案。很明顯存在如下這個公式:

所以我把這個歸為本質上的極大似然估計。
中文分詞並不是只能應用在中文領域,而是根據特定場合同樣可以應用在字母語言的領域,比如英語詞組的分割,手寫句子的識別(因為手寫英文句子的空格不那么明顯)等等。
中文分詞已經發展到相當高的階段,目前只是做一些完善和添加新詞的工作,但是也存在一些工程實現方面的取舍問題,主要有兩點:
1.分詞的一致性,對於同樣一個句子,每個人的分詞方法不一樣,不能說哪種分詞方法更優,只能說在具體應用場景里存在一種最優的分詞方法;
2.分詞的顆粒度問題,和一致性問題一樣,不同的應用場景適合用不同的顆粒度,分詞器在設計的時候一般會全面兼顧顆粒度小和顆粒度大的情況,在具體問題的時候再進行相應的取舍。