印地语的 Spacy 自定义 POS 模型
Spacy custom POS model for Hindi
我最近致力于在 Spacy 中训练印地语的词性模型。我已经训练了模型,但是在分析任何文本时,任何标记的 .pos_
属性始终指向 X
。细粒度标签 .tag_
- 这是训练模型的标签 - 是正确的。
这个细粒度标签和 "universal" 标签(VERB、NOUN、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
的 "code",即 Other
。
我推断它正在生成指向 101
的键,因为没有关于它应该如何将每个提供的标签从数据集映射到 "universal" 的信息。问题是,我可以在 Hindi(Language)
class 的定义中提供一个 tag_map.py
,但是当通过管道传递文本时,它最终会使用 [=] 中定义的标签映射24=] 由 train
命令的输出创建的目录。
这里有一个 link 可以阐明我正在解释的内容:https://universaldependencies.org/tagset-conversion/hi-conll-uposf.html
第一列的第一项(CC
、DEM
、INTF
等)是提供给模型的。通用标签是第二列中的标签。
我的问题是,我应该在哪里定义tag_map来覆盖由spacy train
命令生成的?
您需要将 tag_map.py
添加到 spacy/lang/hi/
并告诉默认模型(这是用 spacy train hi
加载的)加载它。听起来您已经有了 tag_map.py
,但如果没有,您可以查看任何提供 spacy 模型的语言的示例,例如:
https://github.com/explosion/spaCy/blob/master/spacy/lang/en/tag_map.py
导入标签映射并添加到spacy/lang/hi/__init__.py
中的HindiDefaults
以加载标签映射:
from .tag_map import TAG_MAP
class HindiDefaults(Language.Defaults):
tag_map = TAG_MAP
我认为你也可以在开始训练之前初始化空白模型后即时修改 nlp.vocab.morphology.tag_map
中的标签映射,但我认为没有任何简单的方法可以使用命令来完成-line 选项 spacy train
,因此需要自定义训练脚本。
您可以使用 spacy debug-data hi train.json dev.json
来确保设置有效,因为它会针对训练数据中不在标签映射中的任何标签显示警告。
我最近致力于在 Spacy 中训练印地语的词性模型。我已经训练了模型,但是在分析任何文本时,任何标记的 .pos_
属性始终指向 X
。细粒度标签 .tag_
- 这是训练模型的标签 - 是正确的。
这个细粒度标签和 "universal" 标签(VERB、NOUN、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
的 "code",即 Other
。
我推断它正在生成指向 101
的键,因为没有关于它应该如何将每个提供的标签从数据集映射到 "universal" 的信息。问题是,我可以在 Hindi(Language)
class 的定义中提供一个 tag_map.py
,但是当通过管道传递文本时,它最终会使用 [=] 中定义的标签映射24=] 由 train
命令的输出创建的目录。
这里有一个 link 可以阐明我正在解释的内容:https://universaldependencies.org/tagset-conversion/hi-conll-uposf.html
第一列的第一项(CC
、DEM
、INTF
等)是提供给模型的。通用标签是第二列中的标签。
我的问题是,我应该在哪里定义tag_map来覆盖由spacy train
命令生成的?
您需要将 tag_map.py
添加到 spacy/lang/hi/
并告诉默认模型(这是用 spacy train hi
加载的)加载它。听起来您已经有了 tag_map.py
,但如果没有,您可以查看任何提供 spacy 模型的语言的示例,例如:
https://github.com/explosion/spaCy/blob/master/spacy/lang/en/tag_map.py
导入标签映射并添加到spacy/lang/hi/__init__.py
中的HindiDefaults
以加载标签映射:
from .tag_map import TAG_MAP
class HindiDefaults(Language.Defaults):
tag_map = TAG_MAP
我认为你也可以在开始训练之前初始化空白模型后即时修改 nlp.vocab.morphology.tag_map
中的标签映射,但我认为没有任何简单的方法可以使用命令来完成-line 选项 spacy train
,因此需要自定义训练脚本。
您可以使用 spacy debug-data hi train.json dev.json
来确保设置有效,因为它会针对训练数据中不在标签映射中的任何标签显示警告。