Для данной работы я собрал 4 разных корпуса. Один из них на английском языке, остальные на русском. Русскоязычные тексты были взяты из корпуса TAIGA.
В данный корпус входят отзывы пользователей с сайта IMDB. Корпус содержит 50000 отзывов, которые в сумме дают 14 млн. слов, а так же 146 тыс. уникальных слов.
В данный корпус входят новости из 4х новостных изданий (Lenta, КП, Интерфакс и N+1).
- 9.5 млн. слов
- 291 тыс. уникальных слов
- 6.3 млн. слов
- 216 тыс. уникальных слов
- 7.8 млн. слов
- 217 тыс. уникальных слов
- 2.2 млн. слов
- 137 тыс. уникальных слов
В данный корпус входят тексты из художественной литературы, а так же тексты стихотворений.
- 9.1 млн. слов
- 341 тыс. уникальных слов
- 1.2 млн. слов
- 127 тыс. уникальных слов
Сюда входят сообщения и посты с сайта LiveJournal. В будущем, надеюсь, смогу распарсить Vk и Twitter.
- 40.0 млн. слов
- 752 тыс. уникальных слов
Для генерации текстов был написан класс TextGenerator(method, analyzer)
, который содержит три метода, о которых подробнее будет написано ниже.
Предварительую обработку текстов я решил сделать минимальную, ведь задача в том, чтобы генерировать максимально похожий на настоящий текст. За подготовку текста отвечает метод prepare_for_generation(...)
, который принимает путь на папку содержащую .txt файлы и возвращает список токенов текста. В качестве токенизатора я использовал TweetTokenizer() из nltk, но в prepare_for_generation(...)
можно передать любой токенизатор.
Подробнее о данной модели вы можете прочитать по этой ссылке: Speech and Language Processing. Daniel Jurafsky & James H. Martin. Метод fit(...)
считает вероятности для данной модели.
Для генерации используется метод generate(...)
. С помощью класса TextGenerator
можно генерировать как на уровне слов, так и на уровне букв.
Для построения генеративной модели со своим набором данных, вы можете запустить в командной строке python TextGenerator
указав путь до папки --data="data folder path"
, которая содержит .txt файлы с вашими данными. Чтобы запустить построение модели не с дефолтными флагами, воспользуйтесь --help
.
Ниже представленны короткие куски сгенерированного текста. Большие фрагменты вы можете найти в .ipynb ноутбуках, которые находятся в папке experiments
.
Президент союза мма смешанных боевых искусств. В настоящее время обсуждает перспективы работы и выплаты им положенных пенсий.
Болельщики бразильского клуба " зенит " в 1/4 финала он хотел привлечь к ответственности по статье 282 ук рф, мужчина нанес ребенку побои, порвав его одежду в целях предосторожности, а также невестка и племянник.
Чэпмен, совершивший убийство леннона в декабре 1980 года, объявил об уходе с поста председателя "яблока" была надпись "руки прочь от академии наук», — сказал порошенко.
Так же, примеры генерации текста вы можете запросить у бота @HsePythonTextGenBot. Он умеет выдавать сгенерированный текст по двум темам: новости и проза.
(Не могу гарантировать, что бот будет работать на момент проверки задания, я гораздо больше времени потратил на деплой бота на heroku, чем на само написание бота.)