【发布时间】:2021-03-20 22:28:18
【问题描述】:
我正在尝试构建一个非英语拼写检查器,它依赖于 spaCy 对句子的分类,它允许我的算法使用 POS 标签和各个标记的语法依赖关系来确定不正确的拼写(在我的情况下更多特别是:荷兰语复合词中的不正确拆分)。
但是,如果句子包含语法错误,例如将名词分类为动词,spaCy 似乎会错误地对句子进行分类,即使分类后的单词甚至看起来都不像动词。
因此,我想知道是否有可能获得 spaCy 分类的不确定性,以便判断 spaCy 是否正在与句子作斗争。毕竟,如果 spaCy 正在努力进行分类,那将使我的拼写检查器更加确信该句子包含错误。
有什么方法可以知道 spaCy 是否认为一个句子在语法上是正确的(无需在我的语言中指定所有正确句子结构的模式),或者获得分类确定性?
根据@Sergey Bushmanov 在 cmets 中的建议进行编辑:
我找到了https://spacy.io/api/tagger#predict,这对于获取标签的概率可能很有用。但是,我不确定我在看什么,而且我并没有真正遵循文档对输出的含义。我正在使用以下代码:
import spacy
nlp = spacy.load('en_core_web_sm')
text = "This is an example sentence for the Spacy tagger."
doc = nlp(text)
docs = nlp(text, disable=['tagger'])
scores, tensors = nlp.tagger.predict([docs])
print(scores)
probs = tensors[0]
for p in probs:
print(p, max(p), p.tolist().index(max(p)))
这打印出我猜测的预测的一些整数表示(考虑到“整数”和“表示”获得相同的分数),然后为句子中的每个单词创建一个包含 96 个浮点数的数组。它还列出了最高分和最高分的位置,但对于大多数单词来说,p 数组中的多个项目似乎具有相似的值。现在我想知道这些数组是什么意思,以及如何从中提取每个分类的概率。
问题是:如何解释此输出以获取 spaCy 标记器找到的特定标记的特定概率?或者换一种方式来提出同样的问题:上面代码生成的输出是什么意思?
【问题讨论】:
-
您可能希望检查如何提取 ner 标签support.prodi.gy/t/accessing-probabilities-in-ner/94/2 的概率。我怀疑评估 pos 概率可能是相似的。如果您找到问题的答案,请回复!
-
@SergeyBushmanov 我已经研究了一下,我注意到有一个
nlp.entity.beam_parse方法,以及nlp.parser.beam_parse,但显然对于我想要分析的东西,没有t 类似的方法nlp.tagger.beam_parse。你知道我在哪里可以找到更多资源,这些资源可以帮助我找到将相同方法应用于标记器的方法吗? -
@SergeyBushmanov 我已经编辑了我的问题以包含一些尝试使用spacy.io/api/tagger#predict 来达到预期结果的代码。然而,我并没有真正关注 spacy 的标注器预测的输出。你能帮忙吗?
-
一定是
doc = nlp(text); scores, tensors = nlp.tagger.predict([doc]),我怀疑这些只是pos'的键。仍然不是概率 -
对于那些建议结束这个问题的人来说,如果他们分享这样做的原因会很好。这样问题就有机会进行相应的调整。
标签: python nlp spacy spell-checking