- Набор данных с обзорами сюжетов фильмов с тегами, связанными с историей.

Бизнес-проблема:

Абстрактная социальная маркировка фильмов раскрывает широкий спектр разнородной информации о фильмах, такой как жанр, структура сюжета, саундтреки, метаданные, визуальные и эмоциональные переживания. Такая информация может быть полезна при создании автоматических систем для создания тегов для фильмов. Системы автоматической пометки могут помочь системам рекомендаций улучшить поиск похожих фильмов, а также помочь зрителям заранее узнать, чего ожидать от фильма. В этой статье мы поставили перед собой задачу собрать корпус синопсисов и тегов сюжетов фильмов. Мы описываем методологию, которая позволила нам создать детализированный набор из примерно 70 тегов, раскрывающих неоднородные характеристики сюжетов фильмов и множественные ассоциации этих тегов с некоторыми синопсами сюжетов из 14K фильмов. Мы исследуем, как эти теги соотносятся с фильмами и потоком эмоций в разных типах фильмов. Наконец, мы используем этот корпус, чтобы изучить возможность вывода тегов из кратких обзоров сюжета. Мы ожидаем, что корпус будет полезен в других задачах, где актуален анализ повествований.

Постановка задачи :

Предложите теги на основе содержания, которое было в фильме в его заголовке и резюме.

Полезные ссылки :

Источник: https://www.kaggle.com/cryptexcode/mpst-movie-plot-synopses-with-tags

Исследовательская статья: https://www.aclweb.org/anthology/L18-1274/

Дополнительная информация: http://ritual.uh.edu/mpst-2018/

Цели и ограничения реального мира / бизнеса:

  1. Предсказывайте как можно больше тегов с высокой точностью и точностью.
  2. Неправильные теги могут повлиять на качество обслуживания клиентов.
  3. Нет строгих ограничений по задержке.

Проблема машинного обучения:

Обзор данных:

Все данные находятся в 1 файле: mpst_full_data.csv

Данные в файле разделены на 3 раздела: Train, Test и Val.
Train состоит из 64% данных.
Test состоит из 20% данных.
Val состоит из 16%. данных.
Количество строк в mpst_full_data.csv = 14828

Объяснение поля данных:

Набор данных содержит 14 828 строк. Столбцы в таблице:

imdb_id - IMDB id фильма.

title - Название фильма.

plot_synopsis - сюжетный синопсис фильма.

теги - теги, присвоенные фильму, разделенные знаком «,»

split - позиция фильма в стандартном разбиении данных, например Train, Test или Val.

synopsis_source - источник синопсиса сюжета.

Пример точки данных:

imdb_id: tt0113862
title: Опус мистера Холланда

plot_synopsis:
Гленн Холланд, не жаворонок по чьим-либо меркам, проснулся своей женой Айрис ранним ясным сентябрьским утром 1964 года. Гленн устроился на работу учителем музыки в недавно переименованная в Среднюю школу Джона Ф. Кеннеди.….

теги: вдохновляющий, романтический, глупый, приятный
разделенный: тренировка
synopsis_source: imdb

Сопоставление реальной проблемы с проблемой машинного обучения:

Тип задачи машинного обучения:

Это проблема классификации по нескольким меткам.
Классификация по нескольким меткам: классификация по нескольким меткам присваивает каждому образцу набор целевых меток. Это можно рассматривать как прогнозирование свойств точки данных, которые не исключают друг друга, например, тем, которые имеют отношение к документу. Фильм может касаться любого жанра, например, романтика, боевика, триллера, ужаса одновременно или ни одного из них.
__Credit__: http://scikit-learn.org/stable/modules/multiclass.html

Показатель производительности:

Микро-усредненный балл F1 (средний балл F): балл F1 можно интерпретировать как средневзвешенное значение точности и запоминания, где балл F1 достигает своего наилучшего значения при 1 и худшего балла при 0. Относительный вклад точности и отзывчивости в оценку F1 одинаков. Формула для оценки F1:

F1 = 2 * (точность * отзыв) / (точность + отзыв)

В случае с несколькими классами и несколькими метками это средневзвешенное значение балла F1 каждого класса.

«Оценка Micro f1»
. Вычисляйте показатели в глобальном масштабе, подсчитывая общее количество истинных положительных, ложно отрицательных и ложных срабатываний. Это лучший показатель, когда у нас есть классовый дисбаланс.

«Оценка макроса f1».
Рассчитайте показатели для каждого ярлыка и найдите их невзвешенное среднее. При этом не учитывается дисбаланс этикеток.

Https://www.kaggle.com/wiki/MeanFScore
http://scikit-learn.org/stable/modules/generated/sklearn.metrics.f1_score.html

Потери Хэмминга. Потери Хэмминга - это доля ошибочно предсказанных меток.
https://www.kaggle.com/wiki/HammingLoss

Анализ данных :

Давайте посмотрим некоторые метаданные, то есть данные о нашем наборе данных.

Общее количество строк: 14828

Общее количество столбцов: 6

Столбцы: imdb_id, title, plot_synopsis, tags, split, synopsis_source, tag_count.

tag_count: это недавно добавленный столбец, в котором указывается, из каких тегов состоит наш фильм.

Повторяющиеся фильмы: 0

Фильмов с 0 тегами: 0

Теги Анализ:

Мы видим, что существует 5516 фильмов с 1 тегом, аналогично 2 фильма с 3124 тегами, вплоть до 1 фильма с 25 тегами. Это дает много информации о распределении тегов среди фильмов.

Как мы видим, в нашем наборе данных есть 71 уникальный тег, мы будем использовать эти теги для прогнозирования тестовых данных.

Мы можем видеть эти «убийство», «насилие», «романтика», «воспоминания» и «культ» как некоторые из популярных тегов, которые есть в наборе данных.

Средн. количество тегов на фильм: 2,794578 ~ 3 тега на фильм

Давайте сделаем наши наблюдения над анализом:

  1. Всего 20 тегов, которые используются более 500 раз.
  2. 9 тегов используются более 1000 раз.
  3. Самый частый тег (например, убийство) используется 5782 раза.
  4. Поскольку некоторые теги встречаются намного чаще, чем другие, микро-усредненная F1-оценка является подходящей метрикой для решения этой проблемы.

Предварительная обработка данных:

Очистка данных:

Мы очищаем данные, так как у нас есть необработанная форма текстовых данных, мы удаляем следующее:

  1. пунктуация
  2. дополнительные места
  3. стоп слова
  4. мы меняем такие слова, как «не буду» на «не буду», «не могу» на «не могу» и т. д.
  5. мы меняем такие слова, как «Я» на «У меня есть», «Я буду» на «Я буду»

После очистки данных это выглядит так:

Модели машинного обучения:

Преобразование тегов для задач с несколькими этикетками:

Мы конвертируем все 71 тег в бинарный лук, где для каждого фильма мы будем ставить 1 напротив тех тегов, которые присутствуют для фильма.

После преобразования всех тегов в элемент лука у нас есть теги в виде набора данных (14828, 71).

Разделите данные на тестовые и обучающие:

Мы разделяем данные по принципу (80:20). После разделения у нас есть точки данных как:

Число точек данных в данных поезда X: (11862, 1)
Число точек данных в данных поезда Y: (11862, 71)
Число точек данных в данных теста X: (2966, 1)
Количество точек данных в тестовых данных Y: (2966, 71)

Особенности данных: самая важная часть любой модели

Давайте поговорим о самой творческой и самой сложной части любой модели машинного обучения, то есть о создании функций из необработанных данных.

Давайте рассмотрим особенности, которые я придумал при решении проблемы.

Лексические особенности:

  1. н-грамм: 1,2,3
  2. Знаков и граммов: 2,3
  3. к-скип-н-грамм

Будем изучать лексические особенности одну за другой:

1. н-грамм: 1,2,3

Разберемся на примере: примем во внимание это предложение: «Быстрая коричневая лисица перепрыгивает через ленивую собаку».

Теперь для функции 1-грамма каждое слово будет рассматриваться как вектор:

Быстрая, коричневая, лиса, прыгает, прыгает, ленивая, собака

Теперь для функции 2-грамма она будет рассматривать комбинацию двух слов как вектор:

Быстрая, шустрая коричневая коричневая лисица…. и так далее.

Аналогично на 3 грамма потребуется:

Быстрая коричневая, быстрая коричневая лисица… и так далее.

По сути, они представляют собой набор совпадающих слов в заданном окне.

2. Char n-грамм: 2,3

Символ n-Gram подразумевает ту же концепцию, что и n-грамм, с той лишь разницей, что он работает на уровне персонажа.

Например :

Рассмотрим слово «машинное обучение»

Char-2-Gram: «ma», «ac», «ch», «hi»… и т. Д.

Char-3-Gram: «мак», «ах», «чи»… и т. Д.

3. k-Skip-n-Gram:

В архитектуре skip gram word2vec вводом является центральное слово, а предсказания - контекстные слова. Рассмотрим массив слов W, если W (i) является входом (центральное слово), тогда W (i-2), W (i-1), W (i + 1) и W (i + 2) являются контекстные слова, если размер скользящего окна равен 2.

Как мы говорим, изображение говорит больше, чем слова, что ж, это абсолютно верно. Приведенное выше изображение просто избавило меня от множества объяснений. Понятно, как работает k-Skip-n-Gram.

Пакет концепций: части речевых тегов

Это процесс преобразования предложения в формы - список слов, список кортежей (где каждый кортеж имеет форму (слово, тег)). Тег в случае является тегом части речи и указывает, является ли слово существительным, прилагательным, глаголом и т. Д.

В основном, теги POS являются словесными, поэтому мы должны быть очень осторожны, прежде чем использовать их, как мы предполагаем использовать их для нашей машины, в моем случае я подсчитал количество POS, которые у меня есть в моем предложении, и сделал модель лука и обновил count, таким образом в наших данных не будет несоответствия размеров.

Чувства и эмоции:

Я использовал «SentimentIntensityAnalyzer», чтобы узнать значения тональности конкретного предложения, эта функция возвращает нам четырехмерную характеристику вместе с их значением для конкретного предложения, значения в основном следующие:

neg, neu, pos, complex: это оценка, основанная на анализе приведенного текста.

Вложение слов:

Я использовал 4 слова Embedding, а именно:

  1. ПОКЛОН
  2. TF-IDF
  3. Средн. W2V
  4. Взвешенное значение TFIDF AvgW2V

Давайте пройдемся по каждому из них и поймем их значение:

ПОКЛОН :

Модель набора слов - это способ представления текстовых данных при моделировании текста с помощью алгоритмов машинного обучения.

Алгоритмы машинного обучения не могут работать напрямую с необработанным текстом; текст необходимо преобразовать в числа. В частности, векторы чисел.

Модель набора слов или сокращенно BoW - это способ извлечения функций из текста для использования в моделировании.

Пакет слов - это представление текста, которое описывает появление слов в документе.

Например: давайте рассмотрим 2 предложения:

  1. «Это хорошее место для отдыха»
  2. «Это хорошее место, чтобы поесть и выпить»

Теперь нам нужно иметь две вещи, чтобы составить нашу модель BoW:

я. Словарь известных слов.

II. Мера присутствия известных слов.

Итак, давайте рассмотрим нечто, называемое двоичным BoW, которое указывает, содержит ли это предложение слово или нет.

Здесь наш вектор BoW будет иметь вид [This, is, a, good, place, to, stay, eat, and, drink]. Следовательно, двоичный BoW для 1-го и 2-го предложений будет следующим: [1,1,1,1,1,1,1,0,0,0] и [1,1,1,1,1,1,1 , 0,1,1] соответственно.

TF-IDF:

Tf-idf обозначает обратную частоту термина «частота документа», а вес tf-idf - это вес, который часто используется при поиске информации и интеллектуальном анализе текста. Этот вес - статистическая мера, используемая для оценки того, насколько важно слово для документа в коллекции или корпусе. Важность увеличивается пропорционально тому, сколько раз слово появляется в документе, но компенсируется частотой появления слова в корпусе.

TF: частота встречаемости термина, который измеряет, насколько часто термин встречается в документе. Поскольку все документы различаются по длине, возможно, что термин будет встречаться в длинных документах гораздо чаще, чем в более коротких. Таким образом, частота термина часто делится на длину документа (также известную как общее количество терминов в документе) в качестве способа нормализации:

TF (t) = (Количество раз, когда термин t встречается в документе) / (Общее количество терминов в документе).

IDF: обратная частота документов, которая измеряет важность термина. При вычислении TF все термины считаются одинаково важными. Однако известно, что некоторые термины, такие как «есть», «из» и «то», могут встречаться много раз, но не имеют большого значения. Таким образом, нам нужно уменьшить частые члены и увеличить редкие, вычислив следующее:

IDF (t) = log_e (Общее количество документов / Количество документов с термином t в нем).

Среднее W2V:

Word2vec в основном помещает слово в пространство функций таким образом, чтобы их расположение определялось их значением, то есть слова, имеющие одинаковое значение, группируются вместе, и расстояние между двумя словами также имеет одинаковое значение.

Давайте сначала поймем, что такое косинусное сходство, потому что word2vec использует косинусное сходство для определения наиболее похожего слова. Косинусное сходство не только говорит о сходстве между двумя векторами, но также проверяет ортогональность вектора. Косинусное подобие выражается формулой:

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

Нам нужно предоставить большой текстовый корпус, где для каждого слова создается вектор. он пытается узнать взаимосвязь между векторами автоматически из необработанного текста. чем больше размерность, тем больше информация у вектора.

характеристики:

  1. если слова w1 и w2 похожи, чем векторы v1 и v2 будут ближе.
  2. автоматическое изучение отношения между словами / вектором.

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

как преобразовать каждый документ в вектор?

предположим, у вас есть слово w1, w2,… wn в одном документе (строке). чтобы преобразовать в вектор.

у каждого слова есть один вектор, мы преобразуем среднее слово 2vec, чем разделим на количество слов в документе.

Word2Vec, взвешенный по TFIDF:

В этом методе сначала мы вычислим значение tfidf для каждого слова. чем следовать тому же подходу, что и в предыдущем разделе, умножив значение tfidf на соответствующее слово и затем разделив сумму на значение суммы tfidf.

Таким образом, эти 4 метода были использованы в качестве дополнения к обучению моей модели.

Числовая функция для текста:

  1. Краткое содержание каждого сюжета. По сути, я взял длину каждого сюжета и сделал это как дополнительную функцию.
  2. Линия уникальных слов в кратком описании сюжета: подсчитывала каждое уникальное слово для каждого сюжетного синопсиса и включала его как функцию.

Сочетание всех функций ручной работы:

Наконец, после объединения всех функций, у нас есть все 12 функций, которые будут использоваться для обучения моей модели.

Модели:

1. Классификация с несколькими ярлыками: машинное обучение

1.1: Один против остальных: логистическая регрессия:

Один против остальных (OvR), стратегия нескольких классов / нескольких ярлыков. Эта стратегия, также известная как «один против всех», заключается в подборе одного классификатора для каждого класса. Для каждого классификатора класс сопоставляется со всеми другими классами. Помимо вычислительной эффективности (необходимы только классификаторы n_classes), одним из преимуществ этого подхода является его интерпретируемость. Поскольку каждый класс представлен только одним и только одним классификатором, можно получить информацию о классе, проверив соответствующий ему классификатор. Это наиболее часто используемая стратегия для мультиклассовой классификации и справедливый выбор по умолчанию.

Эту стратегию также можно использовать для обучения с несколькими метками, где классификатор используется для прогнозирования нескольких меток, например, путем подгонки к двумерной матрице, в которой ячейка [i, j] равна 1, если образец i имеет метку j и 0 иначе.

В учебной литературе с несколькими метками OvR также известен как метод бинарной релевантности.

Чтобы узнать о логистической регрессии, прочтите это ...

После использования OVR: LR и его гипертюнинга мы получили следующие результаты:

Test F1 Score with prob > 0.25 for each tags :  0.6533833574983932

Здесь всем тегам дается вероятность присутствия в синопсисе сюжета, поэтому я рассмотрел только те, которые имели вероятность более 0,25.

1.2: Один против остальных: полиномиальныйNB

Дополнительные сведения о MultinomialNB см. В разделе это…

Я использовал Multinomial Naive Bayes в качестве классификатора вместе с OVR, позволяющим визуализировать результаты:

Test F1 Score with prob > 0.495000 for each tags : 0.076542

Очень меньше, не может считаться.

Давайте попробуем что-нибудь отличное от машинного обучения, давайте попробуем модели глубокого обучения.

2. Многопрофильная классификация: глубокое обучение

Для глубокого обучения нам необходимо учитывать настраиваемые показатели и наши настраиваемые вложения Word.

Особенности:

Я взял все необработанные текстовые данные и выполнил для них вложения Word.

Мы можем использовать Tokenizer и Max_No_Words, Max_Seq_Length и Embedding_Dim.

При встраивании слов каждое слово представляется как n-мерный плотный вектор. Похожие слова будут иметь похожий вектор. Методы встраивания слов, такие как GloVe и Word2Vec, оказались чрезвычайно эффективными для преобразования слов в соответствующие плотные векторы. Размер вектора невелик, и ни один из индексов в векторе на самом деле не пуст.

Для реализации встраивания слов библиотека Keras содержит слой под названием Embedding (). Уровень внедрения реализован в форме класса в Keras и обычно используется в качестве первого уровня в последовательной модели для задач НЛП.

Подробности о встраивании можно найти здесь.

Разделение данных поезда и теста (80:20):

Я разделил данные на модели «Обучение» и «Тестирование для моделей DL».

2.1: Модель 1: Встраивание + Conv1D + Conv1D + LSTM

Модель состоит из: слоя Встраивание, Выпадение, Conv1D, Выпадение, Conv1D, LSTM, Сигмоидальный слой ..

Test F1 Score with prob > 0.500000 for each tags : 0.018086

Оценка действительно не очень хорошая, придется попробовать что-нибудь еще.

2.2: Модель 2: Встраивание + Conv1D + Conv1D + LSTM + LSTM

Эта модель состоит из следующей последовательности:

Встраивание ›Conv1D› Dropout ›Conv1D› LSTM › BatchNorm › LSTM ›Sigmoid

Ссылки Ссылки с объяснениями уже были предоставлены в Модели 1, я упомянул ссылку объяснения BatchNorm в последовательности.

Test F1 Score with prob > 0.250000 for each tags : 0.296534

Тем не менее, результат F1 нельзя считать таким хорошим ... Давайте двигаться дальше.

2.3: Модель 3: Встраивание + Conv1D + BN + LSTM

Здесь, встраивание означает, что я сделал пользовательское встраивание с помощью Glove Vector и использовал это вложение для обучения и прогнозирования тестовых данных.

Согласно приведенным выше объяснениям, мы все знаем об элементах моделей, давайте погрузимся в результаты.

Таким образом, оценка F1 составляет 0,34, что лучше, чем указано выше, можно принять во внимание, но давайте посмотрим, сможем ли мы получить больше, чем это ...

2.4: Модель 4: Встраивание + Conv1D + Conv1D + LSTM

Худшая модель, давай попробуем еще одну.

2.5: Модель 5: Встраивание + Conv1D + BN + Conv1D + BN + LSTM

Test F1 Score with prob > 0.150000 for each tags : 0.330111

После того, как мы попробовали так много моделей, нам кажется, что нам нужно более тонко настроить модели и придумать больше, чем просто функции.

Подведем итоги и подведем итоги этой проблемы.

Краткое описание модели:

Машинное обучение :

Глубокое обучение:

Заключение :

  1. Максимальный микро-усредненный балл F1 составляет 0,4015, а максимальное значение отзыва - 0,4827.

2. Признаки N-граммы символов оказались значительно более мощными, чем признаки N-граммы слов. Пропустить граммы также были полезны.

3. Используя такие характеристики, как bow, avg word2vec, tfidf word2vec и комбинацию функций TF-IDF и Word2Vec, наши модели показали себя на удивление лучше, чем предыдущая реализация.

4. В наше время мы привыкли получать оценки выше 90%. Но, учитывая очень ограниченный размер данных в 14 тыс. Точек данных, нам действительно удалось получить приличный микро-усредненный результат F1.

Дальнейшие улучшения:

Мы можем использовать больше функций в моделях глубокого обучения, немного более тонко настроенной архитектуры, можно сделать больше гипер-настройки.

Мы сможем получить хороший результат f1, если добавим больше функций и рассмотрим более глубокую сеть.

Использованная литература :

Исследовательская статья: https://www.aclweb.org/anthology/L18-1274

Ссылки на код: https://www.appliedaicourse.com/

Идеи: https://en.wikipedia.org/wiki/Multi-label_classification

Двоичная релевантность: http://scikit.ml/api/skmultilearn.problem_transform.br.html

Классификаторы: https://scikit-learn.org/stable/

Стратегии: https://www.analyticsvidhya.com/blog/2017/08/introduction-to-multi-label-classification/

Другое:

Https://towardsdatascience.com
https://www.analyticsvidhya.com
https://www.quora.com
https: // deepsense. ai
https://datascience.stackexchange.com/