对于使用 Prodigy 注释的 integer/dates 个值,spaCy 模型是否也学习了值的范围?

For integer/dates values annotated using Prodigy, does the spaCy model learn the range of values as well?

我设置了一个 prodigy 会话来注释文档中的特定数值(范围从 0 到 100)。我只是注释数字。我的问题是,假设有一个损坏的值悄悄进入(年龄为 1000 或 22.7),模型是否会理解即使它接近文档中的年龄文本,也不应该被拾取?

换句话说,它可以学习整数值的范围吗?如果可以,那是否也适用于日期格式? 例如,格式为 dd/mm/yyyy 的日期是 DOB(所有带注释的日期都 < 01/01/2000)并且有一个日期 31/12/2020,因为所有带注释的日期也会被提取吗日期离这个范围很远?

谢谢

好问题! spaCy 不会在内部将数字标记表示为数字,因此它没有明确的值概念。从这个意义上讲,它无法区分年龄的有效值和无效值。

但是,spaCy 在表示有助于识别有效年龄的标记时确实使用了“形状”特征。有不同种类的形状标记,但 spaCy 使用的一种将通过将字符转换为字符类型的表示来表示单词。它是这样工作的:

  • spaCy → xxxXx
  • 鱼 → xxxx
  • 鱼 → Xxxx
  • 23 → dd
  • 1000 → dddd
  • 22.7 → dd.d

因此,您可以预期 spaCy 了解到两位数可能是年龄,但小数或四位数的数字不太可能。另一方面,这无助于区分 100 和 999。

对于日期,这无助于确定有效或无效的生日。形状只是 spaCy 的功能之一,但前缀和后缀等其他功能也无济于事。

由于在代码中验证数值很容易,我建议在 spaCy 中广泛匹配,然后使用您自己的函数通过解析来检查日期或年龄是否有效。


特别是在 spaCy 之外,NLP 模型如何表示数值的问题实际上是一个越来越受欢迎的研究课题 - 如果您想了解更多相关信息,请参阅最近关于该主题的文章:Do Language Models Know How Heavy an Elephant Is?