中文詞性標註 (Part-of-Speech tagging) 的難點在哪?現在做得比較好的有哪幾家?

如題


騰訊剛開源的一個項目, 800萬詞條, 開源可下載, 可以作為分詞的依據,

問題是, 分詞的時候, 如果有歧義怎麼辦?

比如小撒給AI搗亂常用的:

一把把把把住了

(小龍女): 我也想過過過過過過的生活.

還有一些, 迅雷不及掩耳盜鈴之勢,

總之, NLP自然語言處理領域還有好些好玩的東西, 再等兩年, 很多有趣的項目會浮出水面.


好問題啊,答的人有點少。

從之前做序列標註的經歷來看,在pos tagging這一塊,總結一下有以下幾個難點:

  1. 詞性標註集的定義劃分。這一塊不像英文有一個比較確切的詞性標註集,國內各大家的標註規則不一,拋開學術界不談,就是百度、阿里、boson等的標註尺度都不一樣;
  2. 訓練語料的缺失。目前主要的中文詞性標註的訓練語料主要是98年人民日報的標註語料,當然還有一個2014年版本的標註語料,但從語料來看,標註質量不高。這一塊不像ner任務,有許多的通用語料和領域內的語料可以參考;
  3. 老大難問題,OOV,這一塊可以上詞典和干預規則;
  4. 一詞多性的問題,即兼類詞問題。有的詞也許專業的標註人員都弄不清楚在當前的語境下的詞性,常見的像名詞、動名詞的區分,這一塊在模型層面可以做一些工作;

主要的還是想到這幾個。

另一塊,隨著語言模型的更新以及各種網路的層出不窮,在當前bilstm+crf儼然成為了序列標註的baseline model,但能夠妥帖解決上述問題的,很少。


難點有兩個:一是詞性之本,究竟基於什麼?詞性可以從語法結構看,也可以從辭彙語義看,也就是動靜之分。

二是歧義之辯,究竟選哪個?一詞多義和多能,再正常不過,因此,不理解上下文,根本就是抓鬮。

或許,詞性是語法的副產品,是我們強制賦予的臆想,這個準確性也不值得我們追求吧?


謝謝邀請。

中文的詞性標註有幾家一直就做得挺好的,很多是分詞和詞性標註一起做的,我就主要說一下我試用過的吧,給題主做個參考。

最早用的是斯坦福的:The Stanford Natural Language Processing Group,一直在維護,有更新,主體是Java,下載full的包就能分詞。

然後也用過ICTCLAS的分詞工具,這個工具有分詞和詞性標註的功能:NLPIR-ICTCLAS漢語分詞系統-首頁,也一直在維護。我用的其實是他們最早的那個2008的開源的java版,就是下載jar包之後直接調介面,效果肯定趕不上後來的完整版,但是也能用,當時覺得方便好用就行了。

再然後試用過清華出的THULAC,THULAC:一個高效的中文詞法分析工具包,這個我主要是試用他們的在線版。C++, Java, Python都支持,效果也很好。

至於說詞性標註的難點在哪,這個我就不太說得上來,因為不是做這個方向。大部分的工具我都只是拿來用而已,覺得除了一些奇怪的專有詞分不出來,大家的分詞工具基本都能用。錯誤的部分對我做文檔向量空間模型或者詞向量的效果影響不是太大。詞性標註基本上是用於句法分析之類的任務,或者提取一些關鍵詞,感覺數據量大了之後錯的那些也無所謂。不過我後來的確是沒有在句法這方面繼續,提取關鍵詞的研究也沒有從詞性這方面入手,所以這個答案主要的依據還是自己當初的印象,最近並沒有再試。只能說這幾個工具一直在維護,相信是能夠一直做得不錯並且一直在進步的。


01

詞性定義

維基百科上對詞性的定義為:In traditional grammar, a part of speech (abbreviated form: PoS or POS) is a category of words (or, more generally, of lexical items) which have similar grammatical properties.

詞性指以詞的特點作為劃分詞類的根據。詞類是一個語言學術語,是一種語言中詞的語法分類,是以語法特徵(包括句法功能和形態變化)為主要依據、兼顧辭彙意義對詞進行劃分的結果。

從組合和聚合關係來說,一個詞類是指:在一個語言中,眾多具有相同句法功能、能在同樣的組合位置中出現的詞,聚合在一起形成的範疇。詞類是最普遍的語法的聚合。詞類劃分具有層次性。如漢語中,詞可以分成實詞和虛詞,實詞中又包括體詞、謂詞等,體詞中又可以分出名詞和代詞等。

詞性標註就是在給定句子中判定每個詞的語法範疇,確定其詞性並加以標註的過程,這也是自然語言處理中一項非常重要的基礎性工作,所有對於詞性標註的研究已經有較長的時間,在研究者長期的研究總結中,發現漢語詞性標註中面臨了許多棘手的問題。

02

中文詞性標註的難點

漢語是一種缺乏詞形態變化的語言,詞的類別不能像印歐語那樣,直接從詞的形態變化上來判別。

常用詞兼類現象嚴重。《現代漢語八百詞》收取的常用詞中,兼類詞所佔的比例高達22.5%,而且發現越是常用的詞,不同的用法越多。由於兼類使用程度高,兼類現象涉及漢語中大部分詞類,因而造成在漢語文本中詞類歧義排除的任務量巨大。

研究者主觀原因造成的困難。語言學界在詞性劃分的目的、標準等問題上還存在分歧。目前還沒有一個統的被廣泛認可漢語詞類劃分標準,詞類劃分的粒度和標記符號都不統一。詞類劃分標準和標記符號集的差異,以及分詞規範的含混性,給中文信息處理帶來了極大的困難。

03

詞性標註常見方法

關於詞性標註的研究比較多,這裡介紹一波常見的幾類方法,包括基於規則的詞性標註方法、基於統計模型的詞性標註方法、基於統計方法與規則方法相結合的詞性標註方法、基於深度學習的詞性標註方法等。

基於規則的詞性標註方法

基於規則的詞性標註方法是人們提出較早的一種詞性標註方法,其基本思想是按兼類詞搭配關係和上下文語境建造詞類消歧規則。早期的詞類標註規則一般由人工構建。

隨著標註語料庫規模的增大,可利用的資源也變得越來越多,這時候以人工提取規則的方法顯然變得不現實,於是乎,人們提出了基於機器學習的規則自動提出方法。

基於統計模型的詞性標註方法

統計方法將詞性標註看作是一個序列標註問題。其基本思想是:給定帶有各自標註的詞的序列,我們可以確定下一個詞最可能的詞性。

現在已經有隱馬爾可夫模型(HMM)、條件隨機域(CRF)等統計模型了,這些模型可以使用有標記數據的大型語料庫進行訓練,而有標記的數據則是指其中每一個詞都分配了正確的詞性標註的文本。

基於統計方法與規則方法相結合的詞性標註方法

理性主義方法與經驗主義相結合的處理策略一直是自然語言處理領域的專家們不斷研究和探索的問題,對於詞性標註問題當然也不例外。

這類方法的主要特點在於對統計標註結果的篩選,只對那些被認為可疑的標註結果,才採用規則方法進行歧義消解,而不是對所有情況都既使用統計方法又使用規則方法。

基於深度學習的詞性標註方法

可以當作序列標註的任務來做,目前深度學習解決序列標註任務常用方法包括LSTM+CRF、BiLSTM+CRF 等。

值得一提的是,這一類方法近年來文章非常多,想深入了解這一塊的朋友們可以看這裡:

https://github.com/sebastianruder/NLP-progress/blob/master/english/part-of-speech_tagging.md

最後再放一個詞性標註任務數據集(人民日報 1998 詞性標註數據集):

https://pan.baidu.com/s/1fW908EQmyMv0XB5i0DhVyQ

04

詞性標註工具推薦

1. Jieba

「結巴」中文分詞:做最好的 Python 中文分片語件,可以進行詞性標註。

Github 地址:

https://github.com/fxsjy/jieba

2. SnowNLP

SnowNLP 是一個 python 寫的類庫,可以方便的處理中文文本內容。

Github 地址:

https://github.com/isnowfy/snownlp

3. THULAC

THULAC(THU Lexical Analyzer for Chinese)由清華大學自然語言處理與社會人文計算實驗室研製推出的一套中文詞法分析工具包,具有中文分詞和詞性標註功能。

Github 地址:

https://github.com/thunlp/THULAC

4. StanfordCoreNLP

斯坦福 NLP 組的開源,支持 python 介面。

Github 地址:

https://github.com/Lynten/stanford-corenlp

5. HanLP

HanLP 是一系列模型與演算法組成的 NLP 工具包,由大快搜索主導並完全開源,目標是普及自然語言處理在生產環境中的應用。

Github 地址:

https://github.com/hankcs/pyhanlp

6. NLTK

NLTK是一個高效的 Python 構建的平台,用來處理人類自然語言數據。

Github 地址:

https://github.com/nltk/nltk

官網:http://www.nltk.org/

7. SpaCy

工業級的自然語言處理工具,遺憾的是不支持中文。

Gihub 地址:https://github.com/explosion/spaCy

官網:https://spacy.io/

摘自:樂雨泉 人工智慧頭條


因為中文沒有屈折變化,也沒有附加詞綴,所以一個詞如果要活用,根本不需要改變其形態。也就是說,中文你實際上要靠語序來判斷句子成分,而不像屈折語和黏著語那可以靠詞綴,難度自然上去了。


謝邀!

詞性標註是自然語言淺層理解的一個重要環節,它可幫助系統自動判定詞語所屬的語法範疇,為進一步處理提供更高層面的支持。詞性標註主要任務是消除詞性兼類歧義,對於新信息檢測來說,它的實際意義還在於:

(1) 能夠在很大程度上消除詞義歧義。如對下面的兩個句子:

「The pill-induced abortion can be painful, causing bleeding and nausea for days」

「Food in cans is called canned food.」

第一個句子中的can是情態動詞,僅起到了辭彙連接作用,並不具備實際語義。而在第二個句子中,第一個「cans」表示的是名詞「罐頭」,第二個「canned」表示的是形容詞「罐裝的」,它們都表達了具體的實體對象。僅從詞形出發,系統很難判別它們之間的差別,往往會作為停用詞統一處理。

(2) 具有提高句子檢索性能的潛力。詞性標註可以幫助我們保留表徵實際意義的名詞、動詞、形容詞以及數詞等實詞,同時濾掉對檢索不具實際影響的介詞、代詞、連詞與冠詞等。相對於純粹從詞形出發的過濾手段,詞性更能有效消除雜訊,在句子層面的檢索上更具有潛力。

(3) 提高區分信息新穎程度的能力:新信息本質上是尋找與以前不同的相關信息,詞性標註結果有助於甄別同形異用的辭彙,同時還可以幫助對辭彙進行語法範疇的分類。

按照學習過程與標註過程的關係,可將詞性標註方法分為監督型與非監督型兩種。監督型標註器一般都採取事先已經標註好的語料庫作為知識來源,從中學習抽取出標註過程需要的資源,比如標註詞典、詞語/詞性頻率、詞性序列的概率以及規則集合;非監督詞性標註模型不需要已經標註好的語料庫,往往採取比較複雜的計算方法自動地進行詞聚類,根據聚類結果來估算相關概率,或者推導出上下文規則。按照採用的技術方法來劃分,還可將詞性標註分為三類:規則方法、統計方法與神經網路方法。規則往往是語言學家手工整理,有的研究者還嘗試自動地從語料庫中自動地抽取規則,傳統的規則方法往往根據上下文信息來標記未知詞與歧義詞的詞性,比如規則「det - X - n = X/adj」說的就是「如果歧義詞X在限定詞與名詞之間,則其詞性為形容詞」,因此,「a good boy」中的「good」為形容詞;而「Im telling you this for your good.」中的「good」為名詞。

除上下文信息之外,構詞規則也往往起到關鍵作用,比如字母大小寫、前後綴、標點等。典型的系統有TAGGIT、Brill Tagger等。統計方法可以是任何一種結合了概率信息的標註模型,其目標是為句子中的詞串選擇一個最可能的詞類序列。80年代初由英國Lancaster大學的研究小組設計的CLAWS系統第一次在詞性自動標註中運用了統計語言學的模型。在CLAWS之後,詞性自動標註多採用統計的方法,典型的統計方法有n元語言模型、最大熵方法、隱馬模型等。實現n元模型標註最常用的方法是Viterbi演算法。80年代中期後,隨著人工神經網路(即連接機制)的興起, 運用神經網路的方法進行詞性自動標註的研究也取得了一定的成果。

在英文詞性標註中,主要工作是在Brill標註器的源代碼基礎上作了進一步改進,採用的詞性標註集為賓州大學樹庫的標註集合,採用的是基於錯誤驅動的詞性標註方法,其基本過程如下:

(1). 初始詞性賦值;

(2). 對比正確標註的句子,自動學習結構轉換規則;

(3). 利用轉換規則調整初始賦值。

Brill詞性標註器除了存在嚴重的內存泄漏等技術缺陷之外,它不能實際應用的問題還在於它只能處理一個單句的辭彙串,而不能適應實際的自由文本。比如原來的系統只能接受「I#』m#a#Ph.D.#candidate#.」,而不能正確處理實際句子「I』m a Ph.D. candidate.」。為此我們做了如下改進:

(1) 在詞性標註之前,增加了斷句與辭彙切分預處理過程;

(2) 針對新信息檢測的需要,增加了新的詞條以及部分針對主題分析的規則集合。

改進後的詞性標註器能較好的適應各種文本,並能有針對性的分析主題與文檔內容。

以上是引與北京理工大學大數據搜索與挖掘實驗室張華平主任著作《大數據搜索與挖掘》,其研發的NLPIR大數據語義智能分析平台是根據中文數據挖掘的綜合需求,融合了網路精準採集、自然語言理解、文本挖掘和語義搜索的研究成果,並針對互聯網內容處理的全技術鏈條的共享開發平台。主要有精準採集、文檔轉化、新詞發現、批量分詞、語言統計、文本聚類、文本分類、摘要實體、智能過濾、情感分析、文檔去重、全文檢索、編碼轉換等十餘項功能模塊,平台提供了客戶端工具,雲服務與二次開發介面等多種產品使用形式。可能為大家解決眾多大數據挖掘過程中遇到的問題。


難點之一:分詞(因為詞之間沒有空格)

哪家強:谷歌至少在三年前有一個開源庫可以做到,記不太清了,C++的一個庫。


推薦閱讀:

TAG:機器學習 | 自然語言處理 | 深度學習DeepLearning | 精通Python自然語言處理書籍 | NLP漢語自然語言處理原理與實踐書籍 |