筆記轉(zhuǎn)載于GitHub項(xiàng)目:https://github.com/NLP-LOVE/Introduction-NLP
7. 詞性標(biāo)注
7.1 詞性標(biāo)注概述
-
什么是詞性
在語(yǔ)言學(xué)上,詞性(Par-Of-Speech, Pos )指的是單詞的語(yǔ)法分類顷锰,也稱為詞類凤价。同一個(gè)類別的詞語(yǔ)具有相似的語(yǔ)法性質(zhì)缸浦,所有詞性的集合稱為詞性標(biāo)注集。不同的語(yǔ)料庫(kù)采用了不同的詞性標(biāo)注集岩灭,一般都含有形容詞笆搓、動(dòng)詞膏蚓、名詞等常見(jiàn)詞性实愚。下圖就是HanLP輸出的一個(gè)含有詞性的結(jié)構(gòu)化句子。
我/r 的/u 希望/n 是/v 希望/v 張晚霞/nr 的/u 背影/n 被/p 晚霞/n 映/v 紅/a
每個(gè)單詞的后邊跟的就是詞性標(biāo)簽:
詞性標(biāo)簽 詞性 r 代詞 u 動(dòng)詞 n 名詞 v 動(dòng)詞 nr 人名 p 介詞 a 形容詞
-
詞性的用處
詞性的作用是提供詞語(yǔ)的抽象表示兔辅,詞的數(shù)量是無(wú)窮的腊敲,但詞性的數(shù)量是有限的。詞性支撐著許多高級(jí)應(yīng)用维苔,當(dāng)下游應(yīng)用遇到 OOV 時(shí)碰辅,可以通過(guò) OOV 的詞性猜測(cè)用法,比如上面的句子“林晚霞”就識(shí)別為人名進(jìn)行處理介时,而不會(huì)拆開(kāi)没宾。
詞性也可以直接用于抽取一些信息,比如抽取所有描述特定商品的形容詞等沸柔。
-
詞性標(biāo)注
詞性標(biāo)注指的是為句子中每個(gè)單詞預(yù)測(cè)一個(gè)詞性標(biāo)簽的任務(wù)循衰。它有以下兩個(gè)難點(diǎn):
漢語(yǔ)中一個(gè)單詞多個(gè)詞性的現(xiàn)象很常見(jiàn),但在具體語(yǔ)境下一定是唯一詞性褐澎。
OOV 是任何自然語(yǔ)言處理任務(wù)的難題会钝。
-
詞性標(biāo)注模型
統(tǒng)計(jì)方法為這兩個(gè)難點(diǎn)提供了解決方案,那就是我們熟悉的序列標(biāo)注模型工三。只需將中文分詞中的漢字替換為詞語(yǔ)迁酸,{B,M,E,S} 替換為“名詞、動(dòng)詞俭正、形容詞等”奸鬓,序列標(biāo)注模型馬上就可以用來(lái)做詞性標(biāo)注。
詞性標(biāo)注既可以看作中文分詞的后續(xù)任務(wù)掸读,也可以與中文分詞集成為同一個(gè)任務(wù)串远。其中就可以把分詞語(yǔ)料庫(kù)加上詞性標(biāo)簽就可以了,這樣同時(shí)進(jìn)行多個(gè)任務(wù)的模型稱為聯(lián)合模型寺枉。由于綜合考慮了多種監(jiān)督信號(hào)抑淫,聯(lián)合模型在幾乎所有問(wèn)題上都要優(yōu)于獨(dú)立模型。
然而工業(yè)界就沒(méi)有那么理想姥闪,同時(shí)具有分詞和詞性標(biāo)注的語(yǔ)料庫(kù)非常少始苇,需要大量的人力進(jìn)行標(biāo)注。
7.2 詞性標(biāo)注語(yǔ)料庫(kù)與標(biāo)注集
同中文分詞一樣筐喳,語(yǔ)言學(xué)界在標(biāo)注規(guī)范上存在分歧催式,導(dǎo)致目前還沒(méi)有一個(gè)被廣泛接受的漢語(yǔ)詞性劃分標(biāo)準(zhǔn)函喉。無(wú)論是詞性劃分的顆粒度,還是詞性標(biāo)簽都不統(tǒng)一荣月。一方面管呵,各研究機(jī)構(gòu)各持己見(jiàn)、派系林立哺窄,標(biāo)注了大量互不兼容的語(yǔ)料庫(kù)捐下。另一方面,部分語(yǔ)料庫(kù)受到嚴(yán)格版權(quán)控制萌业,成為內(nèi)部材料坷襟,得不到充分共享利用。
本節(jié)選取其中一些授權(quán)寬松生年, 容易獲得的語(yǔ)料庫(kù)作為案例婴程。
以下示例我們選取 PKU 標(biāo)注的《人民日?qǐng)?bào)》語(yǔ)料庫(kù)的標(biāo)注集。
7.3 基于隱馬爾可夫模型的詞性標(biāo)注
之前我們就介紹過(guò)隱馬爾可夫模型抱婉,詳細(xì)見(jiàn): 4.隱馬爾可夫模型與序列標(biāo)注
隱馬爾可夫模型詞性標(biāo)注代碼見(jiàn)(程序會(huì)自動(dòng)下載 PKU 語(yǔ)料庫(kù)): hmm_pos.py
https://github.com/NLP-LOVE/Introduction-NLP/tree/master/code/ch07/hmm_pos.py
運(yùn)行代碼后結(jié)果如下:
一階隱馬爾可夫模型:
r, u, n, v, v, v
他/r 的/u 希望/n 是/v 希望/v 上學(xué)/v
他/代詞 的/助詞 希望/名詞 是/動(dòng)詞 希望/動(dòng)詞 上學(xué)/動(dòng)詞
李狗蛋/動(dòng)詞 的/動(dòng)詞 希望/動(dòng)詞 是/動(dòng)詞 希望/動(dòng)詞 上學(xué)/動(dòng)詞
二階隱馬爾可夫模型:
r, u, n, v, v, v
他/r 的/u 希望/n 是/v 希望/v 上學(xué)/v
他/代詞 的/助詞 希望/名詞 是/動(dòng)詞 希望/動(dòng)詞 上學(xué)/動(dòng)詞
李狗蛋/動(dòng)詞 的/動(dòng)詞 希望/動(dòng)詞 是/動(dòng)詞 希望/動(dòng)詞 上學(xué)/動(dòng)詞
可見(jiàn)隱馬爾可夫模型成功的辨別出“希望”的兩種詞性 n 和 v档叔。但 OOV問(wèn)題就出現(xiàn)了,無(wú)法把“李狗蛋”識(shí)別成人名蒸绩,隱馬爾可夫模型一步走錯(cuò)滿盤(pán)皆輸衙四,其根本原因在于隱馬爾可夫模型只能利用單詞這一個(gè)狀態(tài)特征,無(wú)法通過(guò)姓氏“李”來(lái)推測(cè)“李狗蛋”是人名患亿。
7.4 基于感知機(jī)的詞性標(biāo)注
之前我們就介紹過(guò)感知機(jī)模型届搁,詳細(xì)見(jiàn): 5.感知機(jī)分類與序列標(biāo)注
按照中文分詞時(shí)的經(jīng)驗(yàn),感知機(jī)能夠利用豐富的上下文特征窍育,是優(yōu)于隱馬爾可夫模型的選擇卡睦,對(duì)于詞性標(biāo)注也是如此。
感知機(jī)模型詞性標(biāo)注代碼見(jiàn)(程序會(huì)自動(dòng)下載 PKU 語(yǔ)料庫(kù)): perceptron_pos.py
https://github.com/NLP-LOVE/Introduction-NLP/tree/master/code/ch07/perceptron_pos.py
運(yùn)行會(huì)有些慢漱抓,結(jié)果如下:
李狗蛋/nr 的/u 希望/n 是/v 希望/v 上學(xué)/v
李狗蛋/人名 的/助詞 希望/名詞 是/動(dòng)詞 希望/動(dòng)詞 上學(xué)/動(dòng)詞
這次的運(yùn)行結(jié)果完全正確表锻,感知機(jī)成功的識(shí)別出 OOV “李狗蛋”的詞性。
7.5 基于條件隨機(jī)場(chǎng)的詞性標(biāo)注
之前我們就介紹過(guò)條件隨機(jī)場(chǎng)模型乞娄,詳細(xì)見(jiàn): 6.條件隨機(jī)場(chǎng)與序列標(biāo)注
條件隨機(jī)場(chǎng)模型詞性標(biāo)注代碼見(jiàn)(程序會(huì)自動(dòng)下載 PKU 語(yǔ)料庫(kù)): crf_pos.py
https://github.com/NLP-LOVE/Introduction-NLP/tree/master/code/ch07/crf_pos.py
運(yùn)行時(shí)間會(huì)比較長(zhǎng)瞬逊,結(jié)果如下:
李狗蛋/nr 的/u 希望/n 是/v 希望/v 上學(xué)/v
李狗蛋/人名 的/助詞 希望/名詞 是/動(dòng)詞 希望/動(dòng)詞 上學(xué)/動(dòng)詞
依然可以成功識(shí)別 OOV “李狗蛋”的詞性。
7.6 詞性標(biāo)注評(píng)測(cè)
將 PKU 語(yǔ)料庫(kù)按 9:1 分隔為訓(xùn)練集和測(cè)試集仪或,分別用以上三種模型來(lái)訓(xùn)練确镊,準(zhǔn)確率如下:
算法 | 準(zhǔn)確率 |
---|---|
一階隱馬爾可夫模型 | 44.99% |
二階隱馬爾可夫模型 | 40.53% |
結(jié)構(gòu)化感知機(jī) | 83.07% |
條件隨機(jī)場(chǎng) | 82.12% |
從上圖可知,結(jié)構(gòu)化感知機(jī)和條件隨機(jī)場(chǎng)都要優(yōu)于隱馬爾可夫模型范删,判別式模型能夠利用更多的特征來(lái)進(jìn)行訓(xùn)練蕾域,從而提高更多的精度。
7.7 自定義詞性
在工程上,許多用戶希望將特定的一些詞語(yǔ)打上自定義的標(biāo)簽旨巷,稱為自定義詞性巨缘。比如,電商領(lǐng)域的用戶希望將一些手機(jī)品牌打上相應(yīng)標(biāo)簽采呐,以便后續(xù)分析若锁。HanLP 提供了自定義詞性功能。具體有兩種實(shí)現(xiàn)斧吐。
-
樸素實(shí)現(xiàn)
可以使用HanLP掛載的方式實(shí)現(xiàn):
from pyhanlp import * CustomDictionary.insert("蘋(píng)果", "手機(jī)品牌 1") CustomDictionary.insert("iPhone X", "手機(jī)型號(hào) 1") analyzer = PerceptronLexicalAnalyzer() analyzer.enableCustomDictionaryForcing(True) print(analyzer.analyze("你們蘋(píng)果iPhone X保修嗎又固?")) print(analyzer.analyze("多吃蘋(píng)果有益健康"))
當(dāng)然,此處以代碼的方式插入自定義詞語(yǔ)煤率,在實(shí)際項(xiàng)目中也可以用詞典文件的方式口予,運(yùn)行效果如下:
你們/r 蘋(píng)果/手機(jī)品牌 iPhone X/手機(jī)型號(hào) 保修/v 嗎/y ?/w 多/ad 吃/v 蘋(píng)果/手機(jī)品牌 有益健康/i
從結(jié)果來(lái)看,詞典只是機(jī)械的匹配涕侈,將“吃蘋(píng)果”也當(dāng)成了手機(jī)品牌,犯了所有規(guī)則系統(tǒng)的通病煤辨,看來(lái)詞典同樣解決不了詞性標(biāo)注裳涛,詞性標(biāo)注還是應(yīng)當(dāng)交給統(tǒng)計(jì)方法。
-
標(biāo)注語(yǔ)料
詞性的確定需要根據(jù)上下文語(yǔ)境众辨,這恰好是統(tǒng)計(jì)模型所擅長(zhǎng)的端三。為了實(shí)現(xiàn)自定義詞性,最佳實(shí)踐是標(biāo)注一份語(yǔ)料庫(kù)鹃彻,然后訓(xùn)練一個(gè)統(tǒng)計(jì)模型郊闯。
至于語(yǔ)料庫(kù)規(guī)模,與所有機(jī)器學(xué)習(xí)問(wèn)題一樣蛛株,數(shù)據(jù)越多团赁,模型越準(zhǔn)。
7.8 GitHub
HanLP何晗--《自然語(yǔ)言處理入門(mén)》筆記:
https://github.com/NLP-LOVE/Introduction-NLP
項(xiàng)目持續(xù)更新中......
目錄
章節(jié) |
---|
第 1 章:新手上路 |
第 2 章:詞典分詞 |
第 3 章:二元語(yǔ)法與中文分詞 |
第 4 章:隱馬爾可夫模型與序列標(biāo)注 |
第 5 章:感知機(jī)分類與序列標(biāo)注 |
第 6 章:條件隨機(jī)場(chǎng)與序列標(biāo)注 |
第 7 章:詞性標(biāo)注 |
第 8 章:命名實(shí)體識(shí)別 |
第 9 章:信息抽取 |
第 10 章:文本聚類 |
第 11 章:文本分類 |
第 12 章:依存句法分析 |
第 13 章:深度學(xué)習(xí)與自然語(yǔ)言處理 |