訓(xùn)練parser for custom semantics 自定義語義分析
用這個模型可以訓(xùn)練自定義的語義中的分詞關(guān)聯(lián)關(guān)系,比如在樣例中定義了幾個自定義的關(guān)系:ROOT, PLACE, QUALITY, ATTRIBUTE, TIME, LOCATION等等。
在example/training中有spaCy提供的幾個模型訓(xùn)練樣例,直接拷貝一個train_intent_parser.py 到 spaCy 的根目錄,然后修改代碼中的訓(xùn)練語料,修改為中文訓(xùn)練語料:
TRAIN_DATA = [
??? ("找無線質(zhì)量好的咖啡廳", {
??????? 'heads': [0, 5, 1, 2, 5,? 0, 333, 333, 333, 333],? # index of? token head
??????? 'deps': ['ROOT',? 'ATTRIBUTE', 'ATTRIBUTE', 'QUALITY', '-', PLACE, '-', '-', '-', '-']
??? })
]
其中,heads和deps的規(guī)則如下:
例句:找無線質(zhì)量好的咖啡廳
首先,spaCy引入了結(jié)巴分詞,例句首先通過結(jié)巴進(jìn)行分詞,分詞結(jié)果為:找 無線 質(zhì)量 好 的 咖啡廳。接下來是句子結(jié)構(gòu),找—咖啡廳 無線—咖啡廳 無線--質(zhì)量質(zhì)量--好
heads:輸入各分詞所依賴的分詞的索引號(索引號為:找-0無線-1 質(zhì)量-2 好-3 的-4 咖啡廳-5)
在這個例句中的核心詞是找,那么句中各分詞的heads定義為:
找:0(根)
無線:5(咖啡廳)
質(zhì)量:1(無線)
好:2(質(zhì)量)
的:5(咖啡廳)
咖啡廳:0(找)
對應(yīng)的索引號是每個分詞按句子結(jié)構(gòu)中對應(yīng)的分詞的序號,核心詞對應(yīng)的是自己。
deps:
找:ROOT
無線:ATTRIBUTE
質(zhì)量:ATTRIBUTE
好:QUALITY
的:- (沒有實(shí)際意義的詞,結(jié)構(gòu)助詞之類的,隨意用個符號表述即可)
咖啡廳:PLACE
需要注意的是:在本樣例中,spaCy是按照漢字的字?jǐn)?shù)來計(jì)算heads和deps中的參數(shù)數(shù)量的,而進(jìn)行標(biāo)注時(shí)是以分詞為單位標(biāo)注和計(jì)算序號的,所以訓(xùn)練數(shù)據(jù)中的寫法為:
("找無線質(zhì)量好的咖啡廳",{
??????? 'heads': [0, 5, 1, 2, 5, 0, 333, 333,333, 333],? # index of token head
??????? 'deps': ['ROOT', 'ATTRIBUTE','ATTRIBUTE', 'QUALITY', '-', 'PLACE', '-', '-', '-', '-']
??? })
heads中前6個為有效序號,而句子的實(shí)際字?jǐn)?shù)是10個,需要有10個數(shù)字,所以后面4個333是隨意填充的。
deps同理,前6個是有效標(biāo)記,后面4個是填充的。
接下來運(yùn)行
python train_intent_parser.py -m zh_model?-o zh_model
test_text = "找無線質(zhì)量好的咖啡廳"
輸出結(jié)果為:
[('找', 'ROOT', '找'), ('無線', 'ATTRIBUTE', '咖啡廳'), ('質(zhì)量', 'ATTRIBUTE', '無線'), ('好', 'QUALITY', '質(zhì)量'), ('咖啡廳', 'PLACE', '找')]
在zh_model目錄中可以看到生成了parser目錄,目錄結(jié)構(gòu)如下:
zh_model
└──parser
??? ├──cfg
??? ├──lower_model
? ? ├──moves
? ? ├──tok2vec_model
??? └──upper_model
打開cfg文件查看,可以看到其中的labels已經(jīng)有了ROOT、ATTRIBUTE、QUALITY、PLACE等等labels。
到此,中文的自定義語義關(guān)系parser模型就訓(xùn)練完成了,對于精度提升,需要準(zhǔn)備至少幾百條標(biāo)注語料才能達(dá)到一定的好結(jié)果,準(zhǔn)備好語料后重新運(yùn)行訓(xùn)練代碼即可。
文中完整代碼可參考 https://github.com/jeusgao/spaCy-new-language-test-Chinese