Spacy: генерируйте общие предложения, а затем обучайте модель поверх этого. Это хорошая идея?

Я тренирую модель с нуля, чтобы предсказать продукты питания из текста. Я пометил около 500 предложений, чтобы обучить свою модель, и точность довольно хорошая. Но меня немного беспокоят невидимые данные реального мира, поэтому я придумал интересную идею. Поэтому я хотел знать, что кто-то из опытных людей подумал об этой интересной идее.

Итак, идея состоит в том, чтобы преобразовать 500 предложений, возможно, в 10000 предложений. Для этого я сначала заменил фактический объект тегом, а затем заполнил его возможными объектами. Пример этого следующий:

Оригинальные тренировочные предложения:

  1. «В прошлом году Tesco продала пятьдесят тысяч пицц». --- Еда = пицца.
  2. «Он любит есть пудинг, когда он один». --- Еда = пудинг Общие предложения:
  3. «Tesco продала пятьдесят тысяч в прошлом году».
  4. «Он любит поесть, когда он один».

Список продуктов:

  1. пицца
  2. пудинг

Новые сгенерированные учебные предложения:

  1. «В прошлом году Tesco продала пятьдесят тысяч пицц». --- Еда = пицца.
  2. «В прошлом году Tesco продала пятьдесят тысяч пудингов». --- Еда = пудинг
  3. «Он любит есть пиццу, когда он один». --- Еда = пицца
  4. «Он любит есть пудинг, когда он один». --- Еда = пудинг

Так хорошо ли генерировать тренировочные предложения, подобные этому. Преимущества, которые я думаю:

  1. Больше предложений.
  2. У единственного объекта будет больше примеров вместо одного или двух.
  3. Может быть высокой точности.

Проблемы могут быть:

  • Учебные данные полны похожих шаблонов предложений.

Спасибо, пожалуйста, дайте мне знать мысли в этом подходе.


person Abhishek Kargawal    schedule 14.08.2019    source источник


Ответы (1)


Этот подход называется дополнением обучающих данных синтетическими данными.

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

Эти синтетические данные перестановки должны генерироваться как можно более случайным образом. Можно использовать метод sample() в библиотеке Python random.
Для каждого предложения в исходном наборе обучающих данных возьмите небольшую выборку продуктов из вашего списка и для каждого из выбранных продуктов замените этот продукт в предложении, чтобы получить новое предложение.

Немного другой подход (который, возможно, может лучше обобщать невидимые объекты пищи) заключается в том, чтобы вместо использования списка продуктов из ваших 500 учебных предложений загрузить список продуктов и использовать его.

Списки продуктов можно найти на github, например: здесь или здесь

или взято из Википедии (здесь)

В обоих случаях использование размера выборки n приводит к n-кратному увеличению обучающих данных.

person DBaker    schedule 14.08.2019