Как извлечь больше, чем текстовые элементы меток в одной аннотации, используя Google NLP

Я создал набор данных, используя извлечение сущностей 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 Город: Сан-Франциско Штат: Калифорния


person dwayneJohn    schedule 04.05.2020    source источник
comment
Не могли бы вы объяснить, как вы обучили модель. Сколько образцов вы использовали в обучающей выборке?   -  person Kim    schedule 03.06.2020
comment
@Kim Model - это НЛП Google Auto-ml. у меня есть 150 образцов (поезд, тест, проверка) в обучающем наборе.,   -  person dwayneJohn    schedule 03.06.2020
comment
Возвращается только имя? Или у вас есть еще ярлыки «Город» и «Штат», но без всякого значения? Тем не менее, 150 образцов - это слишком мало для обучения какой-либо модели. Попробуйте использовать больше данных, и результат может измениться.   -  person IMB    schedule 09.06.2020
comment
@IMB да, он возвращает только имя, потому что я ставлю имя как первую метку в наборе данных, эти метки Город и штат имеют значения   -  person dwayneJohn    schedule 10.06.2020
comment
Я просто хотел бы понять, что вы на самом деле имели в виду, говоря о ценностях города и штата! На картинке выше мы видим, что только метка Name имеет значение 1 и, как и другие метки, никогда не существовала. Я действительно посоветую вам добавить больше обучающих данных в вашу модель и больше содержимого в вашу тестовую.   -  person Abdelilah.F    schedule 25.07.2020


Ответы (1)


Согласно предоставленному вами образцу аннотации, вы устанавливаете весь text_snippet как name (или любое другое поле, которое вы хотите извлечь).

Это может запутать модель в понимании того, что весь текст является этим объектом.

Было бы лучше иметь данные обучения, аналогичные данным в документация. Там есть большой кусок текста, а затем мы аннотируем объекты, которые хотим извлечь оттуда.


В качестве примера предположим, что из этих текстовых фрагментов я сообщаю модели, что часть курсивом - это сущность с именем a, а полужирная часть - это сущность с именем b:

  • Джей Джей Пицца
  • LL Буррито
  • Шашлык ММ
  • Шуши Н.Н.
  • Сан-Франциско
  • Нью-Йорк
  • Вашингтон
  • Лос-Анджелес

Затем, когда модель читает Best JJ Pizza, она думает, что все представляет собой единый объект (мы обучили модель с этим предположением), и просто выбирает тот, который соответствует наилучшему (в данном случае , скорее всего, это a сущность).

Однако, если я предоставлю следующий образец текста (также помеченный как cursive - это сущность a, а полужирным шрифтом - сущность b):

  • Лучшая пиццерия в Сан-Франциско - это JJ Pizza.
  • Если вы хотите получить роскошные впечатления, не забудьте посетить LL Burritos, когда вы находитесь в Нью-Йорке.
  • Однажды я посетил Kebab MM, но в Вашингтоне есть варианты получше.
  • Вы можете найти 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 "
    }
}

Обратите внимание, что суть модели машинного обучения естественного языка заключается в обработке естественного языка. Если ваши входные данные будут выглядеть такими же / простыми / короткими, возможно, не стоит идти по пути машинного обучения. Достаточно простого регулярного выражения. Без части естественного языка будет сложно правильно обучить модель. Подробнее читайте в руководстве для начинающих.

person Jofre    schedule 12.08.2020