如何重现行为
当解析包含换行符的句子时,意大利语解析器有时会将换行符分配给一个单独的句子,例如:
Ma regolamenta solo un settore, a differenza dell’azione a largo raggio dell’Inflation Act.
I tentativi di legiferare per stimolare l’industria non hanno avuto molto successo.
产生3个句子:
There are various experiments with different combinations of punctuation in the notebook.
Looking at the tokens and their is_sent_start
property, it seems under some circumstances the \n
and I
tokens are both assigned as the start of a new sentence.
I have not been able to cause this problem with en_core_web_sm
, which always correctly identifies 2 sentences.
Although I understand that基于依赖解析器的句子分割是概率性的,并不总是正确,但在这里似乎存在一些语言之间的不一致性,我认为对于空白标记被分配为句子的开始永远不会是正确的。
你的环境
- spaCy版本: 3.6.1
- 平台: Linux-5.15.120+-x86_64-with-glibc2.35
- Python版本: 3.10.12
- 管道: it_core_news_sm (3.6.0), en_core_web_sm (3.6.0)
3条答案
按热度按时间gopyfrb31#
感谢你报告这个问题!
虽然我理解基于依赖解析的句子分割是概率性的,并不总是正确,但这里似乎存在一些语言之间的不一致性。你能详细说明一下这些不一致性吗?
我认为空白标记永远不会被分配为句子的开始。
虽然这是一个合理的解释,但请记住,spaCy的预训练模型(如
it_core_news_xx
)是在自然语言语料库上训练的。\n
是一个control character,而不是出现在自然(意大利或其他)文本中的内容,因此在这里训练的模型性能可能不会很好。我建议你从你的文本中删除这样的字符,或者使用sentencizer component(如果需要的话,根据你的使用情况进行调整)。
x759pob22#
你能详细解释一下语言之间的不一致性吗?
我认为这种行为在意大利语中比其他语言更常见。除了笔记本中的例子,英语似乎能够识别出2个句子,而意大利语能识别出3个,我还在处理一个部分平行语料库,意大利语的平均句子/文档数明显高于任何其他语言(21 vs 14-16),这让我认为这是一个意大利语特有的问题。
我建议从你的文本中删除这些字符,或者使用 sentencizer component (并根据需要调整它)。
我原本希望使用解析器方法,因为文档中的标点符号并不理想,但我尝试了添加
\n
到 chars 列表中的 sentencizer,实际上效果还不错。这也缩小了意大利语与其他语言的句子/文档差距(现在是19 vs 15-16),所以我认为这进一步表明依赖句法分析器之间存在一些行为差异。iyfjxgzm3#
这可能是空白增强出现问题,它只应该将空白附加到前一个标记上,而不是创建新的句子。我们稍后可能会对此进行研究。
我们正在使用这个增强与语料库一起使用-请随时查看并/或使用修改后的设置训练自己的模型: