訓練parser for custom semantics 自定義語義分析
用這個模型可以訓練自定義的語義中的分詞關聯(lián)關系突那,比如在樣例中定義了幾個自定義的關系:ROOT, PLACE, QUALITY, ATTRIBUTE, TIME, LOCATION等等挫酿。
在example/training中有spaCy提供的幾個模型訓練樣例早龟,直接拷貝一個train_intent_parser.py 到 spaCy 的根目錄葱弟,然后修改代碼中的訓練語料,修改為中文訓練語料:
TRAIN_DATA = [
??? ("找無線質量好的咖啡廳", {
??????? 'heads': [0, 5, 1, 2, 5,? 0, 333, 333, 333, 333],? # index of? token head
??????? 'deps': ['ROOT',? 'ATTRIBUTE', 'ATTRIBUTE', 'QUALITY', '-', PLACE, '-', '-', '-', '-']
??? })
]
其中藏杖,heads和deps的規(guī)則如下:
例句:找無線質量好的咖啡廳
首先,spaCy引入了結巴分詞祥楣,例句首先通過結巴進行分詞误褪,分詞結果為:找 無線 質量 好 的 咖啡廳。接下來是句子結構嘀略,找—咖啡廳 無線—咖啡廳 無線--質量質量--好
heads:輸入各分詞所依賴的分詞的索引號(索引號為:找-0無線-1 質量-2 好-3 的-4 咖啡廳-5)
在這個例句中的核心詞是找鸠天,那么句中各分詞的heads定義為:
找:0(根)
無線:5(咖啡廳)
質量:1(無線)
好:2(質量)
的:5(咖啡廳)
咖啡廳:0(找)
對應的索引號是每個分詞按句子結構中對應的分詞的序號饥瓷,核心詞對應的是自己痹籍。
deps:
找:ROOT
無線:ATTRIBUTE
質量:ATTRIBUTE
好:QUALITY
的:- (沒有實際意義的詞呢铆,結構助詞之類的,隨意用個符號表述即可)
咖啡廳:PLACE
需要注意的是:在本樣例中蹲缠,spaCy是按照漢字的字數(shù)來計算heads和deps中的參數(shù)數(shù)量的棺克,而進行標注時是以分詞為單位標注和計算序號的,所以訓練數(shù)據(jù)中的寫法為:
("找無線質量好的咖啡廳",{
??????? 'heads': [0, 5, 1, 2, 5, 0, 333, 333,333, 333],? # index of token head
??????? 'deps': ['ROOT', 'ATTRIBUTE','ATTRIBUTE', 'QUALITY', '-', 'PLACE', '-', '-', '-', '-']
??? })
heads中前6個為有效序號吼砂,而句子的實際字數(shù)是10個逆航,需要有10個數(shù)字,所以后面4個333是隨意填充的渔肩。
deps同理因俐,前6個是有效標記,后面4個是填充的周偎。
接下來運行
python train_intent_parser.py -m zh_model?-o zh_model
test_text = "找無線質量好的咖啡廳"
輸出結果為:
[('找', 'ROOT', '找'), ('無線', 'ATTRIBUTE', '咖啡廳'), ('質量', 'ATTRIBUTE', '無線'), ('好', 'QUALITY', '質量'), ('咖啡廳', 'PLACE', '找')]
在zh_model目錄中可以看到生成了parser目錄抹剩,目錄結構如下:
zh_model
└──parser
??? ├──cfg
??? ├──lower_model
? ? ├──moves
? ? ├──tok2vec_model
??? └──upper_model
打開cfg文件查看,可以看到其中的labels已經(jīng)有了ROOT蓉坎、ATTRIBUTE澳眷、QUALITY、PLACE等等labels蛉艾。
到此钳踊,中文的自定義語義關系parser模型就訓練完成了拓瞪,對于精度提升助琐,需要準備至少幾百條標注語料才能達到一定的好結果兵钮,準備好語料后重新運行訓練代碼即可。
文中完整代碼可參考 https://github.com/jeusgao/spaCy-new-language-test-Chinese