訓(xùn)練dependency parser
在example/training中有spaCy提供的幾個(gè)模型訓(xùn)練樣例,直接拷貝一個(gè)train_parser.py到spaCy的根目錄蛹头,然后修改代碼中的訓(xùn)練語(yǔ)料为牍,修改為中文訓(xùn)練語(yǔ)料:
TRAIN_DATA = [
??? ("他們進(jìn)行抵押貸款交易。", {
??????? 'heads': [1, 1, 3, 4, 1,? 1, 333, 333, 333, 333, 333],
??????? 'deps': ['nsubj',? 'ROOT', 'compound', 'nmod', 'dobj', 'punct', 'depdep', 'dep', 'dep', 'dep',? 'dep']
??? }),
??? ("我喜歡倫敦和柏林打月。", {
??????? 'heads': [1, 1, 1, 2, 2,? 1, 333, 333, 333],
??????? 'deps': ['nsubj',? 'ROOT', 'dobj', 'cc', 'conj', 'punct', 'dep', 'dep', 'dep']
??? }),
??? ("你在找些什么?",? {
??????? 'heads': [2, 2, 2, 2, 2,? 333, 333],
??????? 'deps': ['nsubj',? 'advmod', 'ROOT', 'obj', 'punct', 'dep', 'dep']
??? }),
??? ("我喜歡北京的秋天。", {
??????? 'heads': [1, 1, 3, 4, 1,? 1, 333, 333, 333],
??????? 'deps': ['nsubj',? 'ROOT', 'nmod', 'case', 'dobj', 'punct', 'dep', 'dep', 'dep']
??? })
]
其中腥泥,heads和deps的規(guī)則如下:
例句:我喜歡北京的秋天。
首先啃匿,spaCy引入了結(jié)巴分詞蛔外,例句首先通過(guò)結(jié)巴進(jìn)行分詞,分詞結(jié)果為:我? 喜歡? 北京? 的? 秋天? 溯乒。接下來(lái)是句子結(jié)構(gòu)夹厌,我--喜歡 喜歡--秋天 北京--的 的--秋天
heads:輸入各分詞所依賴的分詞的索引號(hào)(索引號(hào)為:我-0喜歡-1 北京-2 的-3 秋天-4 。-5)
在這個(gè)例句中的核心詞是? 喜歡裆悄,那么句中各分詞的heads定義為:
我:1(喜歡的索引)
喜歡:1(自己)
北京:3(的)
的:4(秋天)
秋天:1(喜歡)
矛纹。:1(喜歡)
對(duì)應(yīng)的索引號(hào)是每個(gè)分詞按句子結(jié)構(gòu)中對(duì)應(yīng)的分詞的序號(hào),核心詞對(duì)應(yīng)的是自己光稼,標(biāo)點(diǎn)對(duì)應(yīng)標(biāo)點(diǎn)前句子的核心詞或南。
deps:
我:nsubj
喜歡:ROOT
北京:nmod
的:case
秋天:dobj
孩等。:punct
詳細(xì)的label編碼參見(jiàn) https://spacy.io/api/annotation#section-dependency-parsing
需要注意的是:在本樣例中,spaCy是按照漢字的字?jǐn)?shù)來(lái)計(jì)算heads和deps中的參數(shù)數(shù)量的采够,而進(jìn)行標(biāo)注時(shí)是以分詞為單位標(biāo)注和計(jì)算序號(hào)的肄方,所以訓(xùn)練數(shù)據(jù)中的寫(xiě)法為:
("我喜歡北京的秋天。",{
??????? 'heads': [1, 1, 3, 4, 1, 1, 333, 333,333],
??????? 'deps': ['nsubj', 'ROOT', 'nmod','case', 'dobj', 'punct', 'dep', 'dep', 'dep']
??? })
heads中前六位為有效序號(hào)吁恍,而句子的實(shí)際字?jǐn)?shù)加標(biāo)點(diǎn)是9個(gè)扒秸,需要有9個(gè)數(shù)字,所以后面三個(gè)333是隨意填充的冀瓦。
deps同理伴奥,前六個(gè)是有效標(biāo)記,后面三個(gè)是填充的翼闽。
接下來(lái)運(yùn)行
python train_parser.py -mzh_model?-o zh_model
test_text = "我喜歡北京的秋天拾徙。"
輸出結(jié)果為:
Dependencies [
('我', 'nsubj', '喜歡'),?
('喜歡', 'ROOT', '喜歡'),?
('北京', 'nmod', '的'),?
('的', 'case', '秋天'),?
('秋天', 'dobj', '喜歡'),?
('。', 'punct', '喜歡')]
在zh_model目錄中可以看到生成了parser目錄感局,目錄結(jié)構(gòu)如下:
zh_model
└──parser
??? ├──cfg
??? ├──lower_model
? ? ├──moves
? ? ├──tok2vec_model
??? └──upper_model
打開(kāi)cfg文件查看尼啡,可以看到其中的labels已經(jīng)有了nsubj、dobj询微、cc崖瞭、punct等等labels。
到此撑毛,中文的parser模型就訓(xùn)練完成了书聚,對(duì)于精度提升,需要準(zhǔn)備至少幾百條標(biāo)注語(yǔ)料才能達(dá)到一定的好結(jié)果藻雌,準(zhǔn)備好語(yǔ)料后重新運(yùn)行訓(xùn)練代碼即可雌续。
文中完整代碼可參考?https://github.com/jeusgao/spaCy-new-language-test-Chinese