【问题标题】:How to extract more than label text items in a single annotation using Google NLP如何使用 Google NLP 在单个注释中提取多个标签文本项
【发布时间】:2020-08-19 04:46:48
【问题描述】:

我使用 Google NLP 实体提取创建了数据集,并上传了输入数据(训练、测试、验证 jsonl 文件),例如 NLP 格式,将存储在 Google 存储桶中。

示例注释:

   {
    "annotations": [{
        "text_extraction": {
            "text_segment": {
                "end_offset": 10,
                "start_offset": 0
            }
        },
        "display_name": "Name"
    }],
    "text_snippet": {
        "content": "JJ's Pizza\n "
    }
} {
    "annotations": [{
        "text_extraction": {
            "text_segment": {
                "end_offset": 9,
                "start_offset": 0
            }
        },
        "display_name": "City"
    }],
    "text_snippet": {
        "content": "San Francisco\n "
    }
}

这是预测标签为“名称”、“城市”和“州”的输入文本

加利福尼亚州旧金山最好的 J J's 比萨

结果如下截图,

我预计预测结果如下,

名称:JJ's Pizza 城市:旧金山 :加州

【问题讨论】:

  • 您能解释一下您是如何训练模型的吗?您在训练集中使用了多少样本?
  • @Kim 模型是 Google Auto-ml NLP。我在训练集中有 150 个样本(训练、测试、验证)。
  • 它只返回名称吗?还是您也有标签 City 和 State 但没有任何价值?尽管如此,我想 150 个样本对于训练任何模型来说都太少了。尝试更多数据,可能会改变结果。
  • @IMB 是的,它只返回名称,因为我将名称作为数据集中的第一个标签,这些标签 City 和 state 具有值
  • 我只是想了解您所说的“城市”和“州”标签的真正含义是什么!从上图中我们可以看到,只有值为 1 的“名称”标签,与其他标签一样,从未存在过。我真的会建议你在你的模型中添加更多的训练数据,在你的测试中添加更多的内容。

标签: google-cloud-platform nlp automl google-cloud-nl google-natural-language


【解决方案1】:

根据您提供的示例注释,您将整个 text_snippet 设置为 name(或您要提取的任何字段)。

这会使模型混淆所有文本都是那个实体。

最好有类似于the documentation 中的训练数据。在那里,有一大块文本,然后我们注释我们想要从那里提取的实体。


例如,假设从这些文本 sn-ps 中,我告诉模型 cursive 部分是一个名为 a 的实体,而 bold 部分是一个名为b的实体:

  • JJ 比萨
  • LL 墨西哥卷饼
  • 烤肉串 MM
  • 舒氏NN
  • 旧金山
  • 纽约
  • 华盛顿
  • 洛杉矶

然后,当模型读取 Best JJ Pizza 时,它认为一切都是一个单一的实体(我们用这个假设训练了模型),它只会选择最匹配的那个(在这种情况下,它可能会说它是一个a 实体)。

但是,如果我提供以下文本示例(也注释为 cursive 是实体 a 并且 bold 是实体 b):

  • 旧金山最好的披萨店是 JJ Pizza
  • 若想享受奢华体验,请不要忘记在纽约附近参观LL Burritos
  • 我曾经访问过Kebab MM,但华盛顿有更好的选择。
  • 您可以在 Los Angles 找到 Shushi NN

你可以看到你是如何训练模型在一段文本中找到实体的,它会尝试根据上下文提取它们。


训练模型的重要部分是提供尽可能与真实数据相似的训练数据。

在您提供的示例中,如果您的实际场景中的数据将采用 <ADJECTIVE> <NAME> <CITY> 格式,那么您的训练数据应该具有相同的格式:

{
    "annotations": [{
        "text_extraction": {
            "text_segment": {
                "end_offset": 16,
                "start_offset": 6
            }
        },
        "display_name": "Name"
    },
    {
        "text_extraction": {
            "text_segment": {
                "end_offset": 30,
                "start_offset": 21
            }
        },
        "display_name": "City"
    }],
    "text_snippet": {
        "content": "Worst JJ's Pizza in San Francisco\n "
    }
}

请注意,自然语言机器学习模型的重点是处理自然语言。如果您的输入看起来像那样相似/简单/简短,那么可能不值得走 ML 路线。一个简单的正则表达式就足够了。如果没有 自然语言 部分,将很难正确训练模型。更多详情the beginners guide

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-05
    • 2020-07-20
    相关资源
    最近更新 更多