spacy - 印地语的 Spacy 自定义 POS 模型
问题描述
我最近致力于在 Spacy 中为印地语训练一个词性模型。我得到了已经训练过的模型,但是在分析任何文本时,.pos_
任何标记的属性总是指向X
. 细粒度的标签.tag_
——也就是模型训练时使用的标签——是正确的。
此细粒度标签和“通用”标签(动词、名词、ADJ 等)之间的映射可在spacy/lang/hi/tag_map.py
文件中找到。
Lemma यूरोप, Lemmatized: False, POS: X, TAG: NNP
Lemma के, Lemmatized: False, POS: X, TAG: PSP
Lemma जिन, Lemmatized: False, POS: X, TAG: DEM
Lemma राजनीतिक, Lemmatized: False, POS: X, TAG: JJ
Lemma दलों, Lemmatized: False, POS: X, TAG: NN
Lemma को, Lemmatized: False, POS: X, TAG: PSP
Lemma व्यवस्था, Lemmatized: False, POS: X, TAG: NN
Lemma ,, Lemmatized: False, POS: SYM, TAG: SYM
Lemma राजनेताओं, Lemmatized: False, POS: X, TAG: NN
Lemma और, Lemmatized: False, POS: X, TAG: CC
Lemma मीडिया, Lemmatized: False, POS: X, TAG: NN
Lemma द्वारा, Lemmatized: False, POS: X, TAG: PSP
Lemma अति, Lemmatized: False, POS: X, TAG: INTF
Lemma दक्षिणपंथी, Lemmatized: False, POS: X, TAG: NN
Lemma कहा, Lemmatized: False, POS: X, TAG: VM
Lemma जाता, Lemmatized: False, POS: X, TAG: VAUX
Lemma है, Lemmatized: False, POS: X, TAG: VAUX
Lemma (, Lemmatized: False, POS: SYM, TAG: SYM
Lemma परन्तु, Lemmatized: False, POS: X, TAG: CC
Lemma मेरी, Lemmatized: False, POS: X, TAG: PRP
Lemma ओर, Lemmatized: False, POS: X, TAG: NST
Lemma से, Lemmatized: False, POS: X, TAG: PSP
Lemma सभ्यतावादी, Lemmatized: False, POS: X, TAG: NNP
Lemma कहा, Lemmatized: False, POS: X, TAG: VM
Lemma जाता, Lemmatized: False, POS: X, TAG: VAUX
Lemma है, Lemmatized: False, POS: X, TAG: VAUX
Lemma ), Lemmatized: False, POS: SYM, TAG: SYM
Lemma उनकी, Lemmatized: False, POS: X, TAG: PRP
Lemma आलोचना, Lemmatized: False, POS: X, TAG: NN
Lemma उनकी, Lemmatized: False, POS: X, TAG: PRP
Lemma भूलों, Lemmatized: False, POS: X, TAG: NN
Lemma और, Lemmatized: False, POS: X, TAG: CC
Lemma अतिवादिता, Lemmatized: False, POS: X, TAG: NN
Lemma के, Lemmatized: False, POS: X, TAG: PSP
Lemma कारण, Lemmatized: False, POS: X, TAG: PSP
Lemma की, Lemmatized: False, POS: X, TAG: VM
Lemma जाती, Lemmatized: False, POS: X, TAG: VAUX
Lemma है|, Lemmatized: False, POS: X, TAG: NNPC
稍微调查了一下,我发现 之所以.pos_
有这个X
值是因为在生成的lang_model/tagger/tag_map
二进制文件中,它的所有键都指向101
哪个是分配给词性的“代码” X
,即Other
.
我推断它正在生成指向的键,101
因为没有关于它应该如何将每个提供的标签从数据集映射到“通用”标签的信息。问题是,我可以tag_map.py
在我的类的定义中提供一个Hindi(Language)
,但是当通过管道传递文本时,它最终将使用命令tagger/
输出创建的目录中定义的标签映射。train
这是一个链接,它将澄清我正在解释的内容: https ://universaldependencies.org/tagset-conversion/hi-conll-uposf.html
第一列的第一项(CC
、DEM
、INTF
等)是提供给模型的项。通用标签是来自第二列的标签。
我的问题是,我应该在哪里定义 tag_map 以覆盖spacy train
命令生成的那个?
解决方案
您需要添加您的tag_map.py
tospacy/lang/hi/
并告诉默认模型(这是加载的模型spacy train hi
)来加载它。听起来你已经有了一个tag_map.py
,但如果没有,你可以看到任何提供 spacy 模型的语言的示例,例如:
https://github.com/explosion/spaCy/blob/master/spacy/lang/en/tag_map.py
导入标签映射并将其添加到HindiDefaults
inspacy/lang/hi/__init__.py
以加载标签映射:
from .tag_map import TAG_MAP
class HindiDefaults(Language.Defaults):
tag_map = TAG_MAP
我认为您也可以nlp.vocab.morphology.tag_map
在开始训练之前初始化空白模型后即时修改标签映射,但我认为没有任何简单的方法可以使用命令行选项来执行此操作spacy train
,因此需要自定义训练脚本。
您可以使用spacy debug-data hi train.json dev.json
它来确保设置有效,因为它会针对训练数据中不在标签映射中的任何标签显示警告。
推荐阅读
- java - Java 建模类,如果对象具有相同的属性但它们根本不同
- javascript - 双击编辑后如何将值从视图传递到控制器
- apache-spark - 如何在 Spark 结构化流中保存通过水印丢弃的记录
- spring-boot - Spring Boot Slf4j 更改日志时间戳以使用 UTC 时区
- keras - LSTM Keras:重塑输入数据
- javascript - 将对象附加到所有选择类javascript
- arrays - 查找、计数和索引数组中的重复项
- powershell - 远程机器上的 Azure DevOps Powershell 问题与美元登录秘密
- python - python importlib 从错误的目录导入
- python - 在python中添加列数据