gpt4 book ai didi

nlp - 如何将自定义俚语添加到 spaCy 的 norm_exceptions.py 模块中?

转载 作者:行者123 更新时间:2023-12-05 06:35:49 25 4
gpt4 key购买 nike

SpaCy 的文档有一些关于添加新俚语的信息 here .

但是,我想知道:

(1)什么时候调用下面的函数?

lex_attr_getters[NORM] = add_lookups(Language.Defaults.lex_attr_getters[NORM], NORM_EXCEPTIONS, BASE_NORMS)

spaCy的典型用法,根据介绍指南here , 是这样的:

import spacy
nlp = spacy.load('en')
# Should I call the function add_lookups(...) here?
doc = nlp(u'Apple is looking at buying U.K. startup for $1 billion')

(2) 在处理管道中什么时候处理规范异常?

我假设一个典型的管道是这样的:tokenizer -> tagger -> parser -> ner。

是否在分词器之前处理了规范异常?而且,规范异常组件相对于其他预处理组件(例如停用词、词形还原器)是如何组织的(参见组件的完整列表 here )?什么先于什么?


我是 spaCy 的新手,非常感谢您的帮助。谢谢!

最佳答案

规范异常是语言数据的一部分,属性 getter(获取文本并返回规范的函数)是用语言类初始化的,例如英语。你可以看到这个 here 的例子.这一切都发生在管道构建之前

这里的假设是规范异常通常是特定于语言的,因此应该在语言数据中定义,独立于处理管道。规范也是词汇属性,因此它们的 getter 依赖于底层的词素,即词汇表中上下文不敏感的条目(与标记相反,标记是上下文中的单词)。

但是,token.norm_ 的优点在于它是可写的——因此您可以轻松地添加 custom pipeline component在您自己的字典中查找 token 的文本,并在必要时覆盖规范:

def add_custom_norms(doc):
for token in doc:
if token.text in YOUR_NORM_DICT:
token.norm_ = YOUR_NORM_DICT[token.text]
return doc

nlp.add_pipe(add_custom_norms, last=True)

请记住,NORM 属性也用作模型中的一个特征,因此根据您要添加或覆盖的规范,您可能只想应用您的自定义组件 标记器、解析器或实体识别器被调用之后。

例如,默认情况下,spaCy 将所有货币符号规范化为 "$" 以确保它们都接收到相似的表示,即使其中一个在训练数据中出现频率较低。如果您的自定义组件现在用 "Euro" 覆盖 "€",这也会对模型的预测产生影响。因此,您可能会看到对 MONEY 实体的预测不太准确。

如果您计划训练自己的模型并将您的自定义规范考虑在内,您可能需要考虑实现自定义语言子类。或者,如果您认为默认情况下您要添加的俚语应包含在 spaCy 中,您可以随时提交 pull request ,例如英语 norm_exceptions.py .

关于nlp - 如何将自定义俚语添加到 spaCy 的 norm_exceptions.py 模块中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49493232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com