首页 > 解决方案 > 如何使用 Google NLP 在单个注释中提取多个标签文本项

问题描述

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

示例注释:

   {
    "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 "
    }
}

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

加利福尼亚旧金山最佳 JJ's Pizza

结果在以下屏幕截图中,

预测数据

我希望预测的结果如下,

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

标签: google-cloud-platformnlpautomlgoogle-cloud-nlgoogle-natural-language

解决方案


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

这可能会混淆模型,使其无法理解所有文本都是该实体。

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


例如,假设从这些文本片段中,我告诉模型草书部分是一个名为 的实体a,而粗体部分是一个名为 的实体b

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

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

但是,如果我提供以下文本示例(也注释为草书是实体a粗体是实体b):

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

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


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

在您提供的示例中,如果您的实际场景中的数据将采用 format <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 路线。一个简单的正则表达式就足够了。如果没有自然语言部分,将很难正确训练模型。初学者指南中的更多详细信息。


推荐阅读