我正在尝试构建一个非英语拼写检查器,它依赖于spaCy对句子的分类,这使得我的算法可以使用单个标记的词性标签和语法依存关系来确定错误拼写(在我的情况下更具体地说是荷兰复合词中错误的分割)。
然而,如果句子包含语法错误,spaCy会出现错误分类的情况,例如将名词分类为动词,即使被分类的单词看起来根本不像动词。
因此,我想知道是否有可能获得spaCy分类的不确定性,以便能够判断spaCy是否在处理句子时遇到困难。毕竟,如果spaCy遇到了分类问题,那么我的拼写检查器就会更加自信地认为该句子存在错误。
有没有办法知道spaCy是否认为一个句子在语法上是正确的(而不必指定我语言中所有正确句子结构的模式),或者获得分类的确定性?
然而,如果句子包含语法错误,spaCy会出现错误分类的情况,例如将名词分类为动词,即使被分类的单词看起来根本不像动词。
因此,我想知道是否有可能获得spaCy分类的不确定性,以便能够判断spaCy是否在处理句子时遇到困难。毕竟,如果spaCy遇到了分类问题,那么我的拼写检查器就会更加自信地认为该句子存在错误。
有没有办法知道spaCy是否认为一个句子在语法上是正确的(而不必指定我语言中所有正确句子结构的模式),或者获得分类的确定性?
根据 @Sergey Bushmanov 在评论中的建议进行编辑:
我发现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 标注器找到的特定标记的具体概率?或者换句话说,上面的代码生成的输出意味着什么?
nlp.entity.beam_parse
方法和一个nlp.parser.beam_parse
方法,但是对于我想要分析的东西,似乎没有类似的方法nlp.tagger.beam_parse
。你知道在哪里可以找到更多资源,帮助我找到将这种方法应用于标记器的方法吗? - Joeytje50doc = nlp(text); scores, tensors = nlp.tagger.predict([doc])
,我怀疑这些只是 pos 的键。仍然不是概率。 - Sergey Bushmanov