自然語言處理中,一般用什麼方法來找語言中的固定搭配?

是否有工具可以找語言中的固定搭配。

如:

鮮花------&>盛開

圓滿------&>完成


【一】僅考慮相鄰詞

首先,在一個語料庫上訓練一個Language Model就可以達到類似的事,樓主的問題就轉換成找到一個詞w, 最大化「鮮花」後面出現w的概率p(w|鮮花)。當然,LM用在這上面有點殺雞用牛刀,只不過LM有很多現成的工具包,比如SRILM[3] Berkeleylm[4] 等等

自己寫的話,先中文分詞,然後統計所有相鄰詞對(2-gram [5])的出現次數,從高到低排個序就好。中文分詞包,推薦復旦[1] 或 Stanford parser[2]

以上的方法簡單可靠,只需要中文的分詞加大量數據即可,手寫代碼即可。但缺點是只能統計相鄰的詞,對於鮮花 正在 盛開 這樣的情況就無能為力。

【二】利用Dependency Parser進行句法分析

有一個東西叫做依存句法分析 Dependency Parser,可以找到句中的主謂賓關係,修飾,從句等等關係,可以部分解決【一】無法解決的不相鄰詞的常用搭配,即長距離依賴問題。比如無論是對於「鮮花盛開」,還是「鮮花正在盛開」,Stanford Parser都會輸出以下項(可以親自到http://nlp.stanford.edu:8080/parser/index.jsp 這個網頁去玩一玩):

nsubj(盛開-3, 鮮花-1)

這個意思是盛開和鮮花有依存關係,依存關係類型是nsubj,即主語關係,即「鮮花」是「盛開」的主語。然後可以統計大語料庫中所有 nsbuj(盛開,鮮花)的頻率,即可幫助發現一些固定搭配,作為word bi-gram的補充。

之所以說部分,是因為dependency parser準確率存在一定的錯誤。關於現成的依存句法分析工具包,我推薦復旦[1]或stanford parser[2]

[1] fudannlp -

開源中文自然語言處理工具包

[2] http://nlp.stanford.edu:8080/parser/

[3] STAR Laboratory: SRI Language Modeling Toolkit

[4] berkeleylm -

An N-gram Language Model Library from UC Berkeley

[5] n-gram


這個層次的任務沒有流行的工具,需要自己開發。但一般都是對辭彙做簡單的相關統計,也不太難。在斯坦福著名教材Foundations of Statistical Natural Language Processing中就有專門一章介紹搭配抽取的:http://nlp.stanford.edu/fsnlp/promo/colloc.pdf


樓上幾位答主推薦的是方法不是T主想要的工具吧···

工具的話我推薦python下的NLTK,超方便!

文檔:http://www.nltk.org/howto/collocations.html

缺點是大語料下內存佔用和耗時都太高(你只是想要bigram結果它還附贈了許多你可能不用的東西···),想避免這種情況就自己寫吧,估摸T主的需求也就幾行的代碼~

P.S.這項工作之前T主應該還要給語料分詞吧。還是python環境,結巴分詞和NLPIR2015都不錯,NLPIR技術更強而且更符合分詞規範,但我覺得分詞粒度太細,沒有結巴的分的自然。


頻繁項集

必須考慮有間隔的情況

最後, 最後的結果主要跟分詞效果有關


這類問題,一般使用N-Gram模型,其中用的比較多的是Bi-Gram和Tri-Gram


依存提取+tscore篩選,基於第三方詞典做評測並改進方法或增加篩選方法,注意應使用大規模語料庫做以上分析,處理過程中應注意各種程序方面的問題,例如數據的預處理,大規模語料庫帶來的儲存,查找,內存佔用等方面的問題。基本方法就這樣,具體操作時應該具體問題具體分析。因為項目的原因只能說這麼多了,樓主好運。


Selectional Preference

最初是Resnik的工作,現在有很多演化。


推薦閱讀:

負二項分布為什麼叫這個名字?「負」從何而來?
如何看待羅永浩的微博中提到的:鎚子在降價後一天內買出15000台的數據,是否可信呢?
standard deviation 和standard error的區別,能講的通俗些嗎?
知乎什麼時間發問被大量回答的概率最高?
數據分析師是怎樣煉成的,數據分析在不同行業有什麼不同要求?如互聯網、金融、傳統行業。

TAG:數據挖掘 | 自然語言處理 | 統計 |