Это моя новая серия по глубокому обучению, в которой я буду писать о реальных приложениях NN. Здесь мы подробно разберемся с каждым из них и попытаемся понять интуицию, лежащую в основе этого. Мы углубимся как в теоретические, так и в практические концепции.
Если вы не прошли через мою предыдущую серию математических интуиций, лежащих в основе NN, я очень рекомендую это сделать. Мы могли бы строить концепции поверх этого.
Постановка задачи
Кому здесь нравится смотреть фильмы ?! А кто здесь проверял рейтинги IMDB перед просмотром любого фильма? Так что добавление обзоров на фильмы - обычная тенденция. Давайте создадим с нуля нейронную сеть, которая сможет определять настроения при просмотре фильма. Довольно круто, да !?
Часть кода довольно проста. Что более важно, так это понимание теории, лежащей в основе этого. Итак, начнем с нескольких теоретических концепций.
Предварительная обработка данных
Итак, как обычно выглядит обзор? Длинная цепочка слов. Разобраться в этом может быть самой сложной задачей для наших компьютеров. Текст с параграфами может иметь столько многословия и шума, как знаки препинания, слова с маленькой заглавной буквы и т. Д., Что может не добавить большой ценности при поиске его тональности. Таким образом, очистка текста становится важной его частью.
Если вы программист и работали в поисковике - это вам что-то напоминает ?! Думай думай!! Да, да, файл сопоставления, который мы использовали для создания в эластичном поиске. Это именно то, что вам нужно.
Мы можем применить точно такие же концепции здесь, в тексте -
- Токенизация. Это просто разбиение текста на отдельные слова (называемые токенами).
- Нижний регистр ng: Слова означают одно и то же независимо от регистра. Преобразование всего в нижний регистр помогает добиться единообразия.
- Удаление стоп-слов: Можете ли вы оценить настроение таких слов, как - the, a и т. д. Они просто создают шум, поэтому их следует удалить.
- Создание: «Чтение» и «Чтение» означают одно и то же, верно? Итак, преобразование слова в его корневую форму для уменьшения размера нашего словаря.
- Лемматизация. На самом деле это похоже на стемминг. Просто через определение слова можно найти слово, которого может даже не существовать в английском словаре. Поскольку лемматизация гарантирует, что это правильное слово, она может быть немного медленнее из-за дополнительного процесса поиска.
Векторизация текста
Быстрый вопрос - легко ли компьютеру работать с целыми числами или строками? Вы можете сказать, как инженер-программист, поскольку мы читали об ASCII ранее, поэтому все строки в конечном итоге преобразуются в целочисленный формат. А значит, побеждает целое число.
Векторизация текста - это процесс преобразования строки в целые числа для упрощения вычислений.
Давайте узнаем о нескольких популярных методах того же. Давайте рассмотрим пример и посмотрим, как он будет представлен в каждом из следующих случаев.
Предложение 1: Он мальчик.
Предложение 2: Она девочка.
Мешок слов
Это довольно просто, позвольте мне показать вам, как это сделать.
- В приведенном выше примере наш словарь слов:
Словарь: [«он», «есть», «а», «она», «мальчик», « девушка »] - Вышеупомянутый словарь используется как набор функций. Если слово присутствует в предложении, этот признак представлен как 1 else 0. Следовательно, векторизация:
Предложение 1: [1, 1, 1, 0, 1, 0]
Предложение 2: [0, 1, 1, 1, 0, 1]
Минусы. Проблема с этим подходом в том, что он придает всем словам одинаковую важность. Таким образом, is
и girl
будут иметь одинаковое значение. Кроме того, у него нет никакого смыслового понимания. Даже если и boy
, и girl
люди, мы потеряем эту информацию.
TF-IDF
Это в основном придает большее значение словам, которые встречаются редко, в нашем случае boy
и girl
.
- Частота термина (TF) - дает представление о частоте встречаемости слова в документе.
TF(word)= Frequency in a sentence/Total words in a sentence
- Обратная частота документа (ID F) - помогает определить редкость слова.
IDF(word) = log(Total Sentences/Sentences having word in it)
- Возьмем пример:
TF (девушка) = 1/4
IDF (девушка) = log (2/1) = 0,3
TF-IDF (девушка) = 1 / 4 * 0,3 = 0,075 - Итак, окончательная векторизация:
Предложение 1: [0, 0, 0, 0,075]
Предложение 2: [0, 0, 0, 0,075]
Минусы: хотя это отлично работает, отдавая больший приоритет редким словам и придавая больше смысла предложению, но при этом теряется семантическая связь слов. Поскольку девочка и мальчик связаны семантически, но через this получить эту информацию невозможно.
Вложение слов
Это одно из самых замечательных достижений, которые сделала Semantic Web. Рассмотрим график и нанесем на него все вышеперечисленные слова в зависимости от их семантического значения. Что-то вроде этого изображения (скопировано из поиска Google).
Близость слов на этом графике говорит о том, насколько близки эти слова по своему значению.
Как это сделать? Создается двухмерная матрица, одна сторона которой представляет собой различные характеристики, такие как объект, человек, цвет и т. Д., И каждой характеристике присваивается соответствующее значение. Как будто каждое слово определяется этими чертами.
Итак, существует библиотека Google word2vec
, с помощью которой мы можем получать целочисленные значения для наших слов в зависимости от их семантического значения.
Это важная тема сама по себе. Обязательно расскажу об этом индивидуально позже. Но, если вы хотите вникнуть глубже, очень рекомендую - article1, article2, article3.
На этом завершается теоретическое понимание работы с данными обзоров IMDB. Ура! Часть кода будет рассмотрена в следующей статье. Следите за обновлениями и продолжайте учиться :)