Ничто не говорит "С Днем святого Валентина, дорогая!" например, потратить 4 часа на обучение ИИ вместо того, чтобы потратить 15 минут на то, чтобы написать от руки вдумчивое послание ко дню святого Валентина. Итак, вперед!

Примечание. Если вы просто хотите попробовать генератор сообщений самостоятельно, прокрутите вниз.

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

Для этого мы возьмем существующую языковую модель (GPT-2) и переобучим ее в Google Colab на основе текстов песен Эда.

Шаг 1. Получите данные

Сбор данных обычно составляет большую часть работы здесь, когда вы можете встать на плечи гигантов глубокого обучения для существующей модели. К счастью, нам не нужно гуглить 200 самых популярных песен Эда Ширана и копировать/вставлять текст в текстовый файл. Вместо этого мы можем использовать API, созданный людьми из Genius.com, моего любимого сайта с текстами песен. Вам нужно будет создать свою собственную учетную запись разработчика и токены здесь. Как только у вас появятся:

!pip install git+https://github.com/johnwmillr/LyricsGenius.git
import os
import lyricsgenius
genius = lyricsgenius.Genius('enter your own token here',
    remove_section_headers=True,
    excluded_terms=["(Remix)", "(Live)", "(Acoustic)"],
        timeout=15, retries=3)
artist = genius.search_artist("Ed Sheeran", max_songs=200,   sort="popularity")
file_name = "ed_sheeran_lyrics.txt"
with open(file_name, 'a') as f:
    for song in artist.songs:
        data = song.lyrics
        f.write(data)
f.close()

Мы входим в API, используя наш личный токен, и получаем 200 самых популярных песен. Мы исключаем такие вещи, как акустические версии, потому что мы не хотим, чтобы слишком много повторяющихся текстов загрязняли данные. Мы также исключаем заголовки, чтобы у вашего избранника не возникло подозрений при чтении таких слов, как [Intro] или [Chorus] в вашем красиво оформленном стихотворении ко Дню святого Валентина.

Шаг 2. Загрузите и переобучите GPT-2.

В нашем случае мы будем использовать GPT-2 в качестве предварительно обученной модели. Причина использования этой модели заключается в том, что более поздние модели, такие как GPT-J, слишком велики для повторного обучения на наиболее доступных вычислительных ресурсах. Из чистой злобы я не буду упоминать другую недавнюю не очень открытую модель ИИ. Во всяком случае, для GPT-2 есть очень удобный пакет Python под названием gpt-2-simple. Между прочим, технический термин для переобучения последней части предварительно обученной модели для вашего пользовательского варианта использования называется тонкой настройкой.

!pip install -q gpt-2-simple
import gpt_2_simple as gpt2
from datetime import datetime
from google.colab import files
import os
import requests
#download the smallest pre-trained model to save time
gpt2.download_gpt2(model_name="124M")
gpt2.mount_gdrive()
#load the data
file_name = "ed_sheeran_lyrics.txt"
gpt2.copy_file_from_gdrive(file_name)
#finetune the model with the new data
sess = gpt2.start_tf_sess()
gpt2.finetune(sess,
              dataset=file_name,
              model_name='124M',
              steps=1000,
              restore_from='fresh',
              run_name='run_ed_1',
              print_every=10,
              sample_every=200,
              save_every=500
              )
gpt2.copy_checkpoint_to_gdrive(run_name='run_ed_1')
gpt2.copy_checkpoint_from_gdrive(run_name='run_ed_1')

Шаг 3. Сделайте несколько подсказок ко Дню святого Валентина

Теперь, когда у нас есть собственная нейронная сеть, обученная быть ̶h̶o̶p̶e̶l̶e̶s̶s̶ полным надежд романтиком, давайте дадим ей текстовую подсказку типа «Моему Валентину» и заставим ее работать на нас:

prefix = input("Your prompt (e.g. To my Valentine,): ")
gpt2.generate(sess,
              length=50,
              temperature=0.7,
              prefix=prefix,
              nsamples=5,
              batch_size=5,
              run_name='run_ed_1'
              )

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

Извлеченные уроки

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

  1. улучшить качество входных данных. Мусор на входе остается мусором на выходе. Лирика Эда, конечно, гениальна (каламбур). Но мы не приложили никаких серьезных усилий, чтобы убедиться, что все тексты, помещенные в модель, соответствуют желаемому результату. Судя по выходным данным, входной текст также включал немало песен о разбитых сердцах.
  2. добавить больше данных. В настоящее время в 200 песнях содержится всего около 10 000 строк текста. Так что в настоящее время мы голодаем по языковым моделям, которые очень жадны до данных. Имейте в виду, что новые модели обучаются практически всему англоязычному Интернету.
  3. используйте большую модель. Мы использовали самую маленькую версию модели GPT-2, потому что большие либо слишком долго обучались, либо буквально не работали на нашем доступном оборудовании. Это показывает, насколько прожорливы языковые модели.

Попробуйте сами

Вот код для совместной работы с прогнозами, попробуйте, если хотите генерировать свои собственные сообщения. Вы можете попробовать несколько разных подсказок ввода и посмотреть, что получится. Если вы найдете веселые результаты, поделитесь радостью, опубликовав их, и не стесняйтесь отмечать меня: в Twitter или LinkedIn.

И, конечно же, с Днем святого Валентина, если вы дошли до конца ;)

Источники
Оболочка API LyricsGenius python
Колаборативный код загрузчика текстов песен
Библиотека gpt-2-simple Python (содержит ссылку на оригинальный Colab Макса Вульфа, который я немного адаптировал)