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

Как все начиналось

Этим летом я проводил курс по прикладному машинному обучению и должен был искать идею для проекта. Во время моего исследования я встретил друга. Этот друг много болтает. И под много я имею в виду начало предложения в предложении в другом предложении, пока больше не станет ясно, о чем он говорит в первую очередь. Пока он продолжал говорить, я пытался понять, насколько сложной будет структура его предложений. Говоря позитивно: это должны быть красивые и замысловатые деревья, качающиеся вокруг меня. Поэтому у меня была общая идея: анализ структуры текста. Еще одной важной целью для меня было разобраться в четырех этапах машинного обучения, а именно:

  1. Обрисовывая проблему,
  2. Готовим данные,
  3. Обучите модель машинного обучения и
  4. Прогнозируйте, используя модель машинного обучения.

После некоторого исследования в этой области (который на самом деле представляет собой совершенно новый пакет буррито, я был действительно поражен и поражен) один конкретный алгоритм привлек мое внимание: моделирование Word2vec (здесь - очень интересная статья о встраивании слов и его применении, написанная автором Памятка Актен).

Что такое алгоритм word2Vec?

В качестве входных данных алгоритм получает большой объем текстовых данных (речи, книги, словари, сканированный текст с веб-сайтов и т. Д.) И назначает каждое слово соответствующему вектору в пространстве (размерность вектора обычно составляет около 50–1000. , в зависимости от набора данных). Эти «векторы слов» расположены рядом с другими словами, которые используются в аналогичном контексте, например, в одном предложении. Например. слово «петь» можно расположить рядом с «песней». Но назначение также зависит от набора данных (используете ли вы новостные статьи или статьи по философии, но я вернусь к этому на последнем этапе).

Четыре этапа машинного обучения

Далее я объясню, как прошел четыре этапа машинного обучения.

1. Постановка проблемы

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

2. Подготовьте данные

Подготовка данных была самой важной частью. Сначала вопрос был в том, какие данные я хочу использовать. Поскольку для модели word2Vec полезно использовать довольно большой объем текста, я решил использовать стенограммы выступлений TED на английском языке. В выступлениях на TED было много выступлений на самые разные темы. После импорта набора данных из kaggle пришло время подготовить данные. Из нескольких руководств (например, этот или этот) я использовал следующие методы:

Расширяемые сокращения
В английском языке есть такие сокращения, как «не имеет» или «не является», особенно в разговорной речи, такой как выступления на TED. Чтобы убедиться, что эти фразы не влияют на тренировку, я расширил каждое сокращение в корпусе текста.

Удаление специальных символов и цифр
Это вполне объяснимый шаг по очистке модели и сосредоточению внимания на словах.

Удалите стоп-слова
Стоп-слова - это часто используемые слова (например, 'a', 'the', 'of' 'in'), которые не влияют на смысл текста и могут сильно влияют на производительность модели.

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

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

Специально для стенограммы выступлений TED: удалите комментарии стенограммы
. Все предыдущие шаги фактически могут быть применены ко всем проектам nlp. Но было также важно взглянуть на индивидуальный корпус, поэтому я заметил комментарии стенограммы, которые часто появлялись в моем тексте. Поскольку они всегда начинались и заканчивались круглыми скобками, их было легко удалить с помощью регулярных выражений.

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

Моим последним шагом было разделение корпуса на предложения и деление каждого предложения на токены слов для модели.

3. Обучение модели машинного обучения

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

Затем я инициализировал модель. Для этого проекта я использовал модель Gensim Word2Vec. После многократного тестирования идеальное количество измерений для этого набора данных было 50. Более 100 вызвали недостаточное соответствие, что привело к незначительным результатам.

И я адаптировал минимальное количество до 50, игнорируя все слова, частота которых ниже этого минимального количества. В результате получилось 4703 словаря. После этого я обучил модель 30 эпохам. Тренировка длилась недолго, как я ожидал. Всего было 3 мин.

4. Прогнозирование с использованием модели машинного обучения

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

Самым интересным было построение модели. Это означает проецирование векторов более высокой размерности на 2D-холст (Вот отличный учебник, за которым я следил). Поскольку в идеале модель должна располагать похожие слова ближе друг к другу, точки должны показывать некую кластеризацию, поэтому этот график был очень успокаивающим (вы должны представить: после длительного периода подготовки данных и обучения, наконец, увидев результат вроде это полезно).

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

Мое заявление

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

Это было действительно весело. Я использовал node.js и p5. Здесь вы можете ознакомиться с моим гитхабом.

Альтернативные текстовые корпуса

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

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

Заключение

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