【问题标题】:Spacy custom POS model for Hindi印地语的 Spacy 自定义 POS 模型
【发布时间】:2019-10-30 12:07:59
【问题描述】:

我最近在 Spacy 中为印地语训练了一个词性模型。我得到了已经训练过的模型,但是在分析任何文本时,任何标记的.pos_ 属性始终指向X。细粒度的标签 .tag_ - 这是模型训练时使用的标签 - 不过是正确的。

spacy/lang/hi/tag_map.py 文件中可以找到这种细粒度标签和“通用”标签(动词、名词、ADJ 等)之间的映射。

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 的键,因为没有关于它应该如何将每个提供的标签从数据集映射到“通用”标签的信息。问题是,我可以在我的Hindi(Language) 类的定义中提供一个tag_map.py,但是当通过管道传递文本时,它最终将使用由输出创建的tagger/ 目录中定义的标记映射train 命令。

这是一个链接,可以澄清我在解释什么:https://universaldependencies.org/tagset-conversion/hi-conll-uposf.html

第一列的第一项(CCDEMINTF 等)是提供给模型的。通用标签是第二列中的标签。

我的问题是,我应该在哪里定义 tag_map 以覆盖spacy train 命令生成的那个?

【问题讨论】:

    标签: spacy part-of-speech


    【解决方案1】:

    您需要将您的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 中的标记映射,但我认为没有任何简单的方法可以使用命令行选项来完成spacy train,因此需要自定义训练脚本。

    您可以使用spacy debug-data hi train.json dev.json 确保设置有效,因为它会针对训练数据中不在标签映射中的任何标签显示警告。

    【讨论】:

    • 您好,感谢您的帮助!我已经想通了,正如你所建议的,我不得不把它放在 Spacy 的源代码中。现在我遇到了另一个问题,我的自定义 NER 没有检测到任何实体。我检查了 NER 管道是否已加载,它包含我训练它的标签。知道我错过了什么吗?谢谢!
    • @Adrián 嗨,我正在尝试将特定域的 POS 添加到葡萄牙语中的现有模型中,来自 * .conllu 文件(也就是说,它考虑了句子的上下文),我没有在互联网上找到信息(我找到了 NER,但没有找到 POS),如果您的脚本是免费提供的,请分享一下吗?谢谢。
    猜你喜欢
    • 2016-10-19
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 2021-09-30
    • 1970-01-01
    相关资源
    最近更新 更多