什么是标记器异常的normalpart?

2024-06-02 09:15:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为我的语言添加tokenizer_exceptions。我正在查看'gonna'英语语言的示例,因此编写规则如下:

'т.п.': [
    {ORTH: "т.", NORM: "тому", LEMMA: "тот"},
    {ORTH: "п.", NORM: "подобное", LEMMA: "подобный"}
],

然后当我标记化时,我希望NORM-规则的部分将在token.norm_中(尽管没有任何关于Token.norm_的文档)。但是相反,我在token.norm_中看到ORTH-部分,而在{}-实例中,我看不到规则的NORM-部分。在

那么Token.norm_-成员是什么,NORM-规则的一部分是什么?在


Tags: 实例文档标记token语言norm示例规则
2条回答

更笼统地回答这个问题:在spacyv1.x中,NORM主要用于提供令牌的“标准化”形式,例如,如果令牌文本“不完整”(如gonna示例中),则使用全屈折形式,或是替代拼写。v1.x中规范的主要目的是使其作为.norm_属性访问,以供将来参考。在

然而,在v2.x,currently in alpha中,NORM属性变得更加相关,因为它也被用作模型中的一个特性。这使您可以将具有不同拼写的单词规范化为一种常见拼写,并确保这些单词接受相似的表示形式,即使其中一个在您的训练数据中不太常见。例如,英语中的美式和英式拼写,或者货币符号,它们都被规范化为$。为了简化这一点,v2.0引入了一个新的语言数据组件norm exceptions。在

如果您正在开发自己的语言模型,我绝对建议您查看v2.0alpha(现在已经非常接近第一个发布候选版本了)。在

您可以在nlp.vocab.lex_attr_getters中绑定任何函数,并且将为该词汇表条目计算该函数。每个标记都有一个指向其词汇表项的指针,因此它们都将引用此计算值。在

import spacy
from spacy.attrs import NORM

nlp = spacy.blank('ru') # In spacy 1, just spacy.load() here.

doc = nlp(u'a a b c b')

[(w.norm_, w.text) for w in doc]
# (a, a), (a, a), (b, b), (c, c), (b, b)

nlp.vocab.lex_attr_getters[NORM] = lambda string: string.upper()
# This part should be done automatically, but isn't yet.
for lexeme in nlp.vocab:
    lexeme.norm_ = nlp.vocab.lex_attr_getters[NORM](lexeme.orth_)
[(w.norm_, w.text) for w in doc]
# (a, A), (a, A), (b, B), (c, C), (b, B)

您可以将这些词汇属性绑定到您想要的任何东西上。我不确定绑定在俄语中是如何工作的,但是您可以在源代码中更改它,也可以在运行时重置词法属性函数。在

相关问题 更多 >