Skip to content

Instantly share code, notes, and snippets.

@sslotin
Last active August 14, 2022 14:22
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sslotin/d4c80a5f724a5cede5f2dfa62958074b to your computer and use it in GitHub Desktop.
Save sslotin/d4c80a5f724a5cede5f2dfa62958074b to your computer and use it in GitHub Desktop.

Генератор текстов

Напишите утилиту, которая на основе заданных текстов генерирует свои.

Это задание даже важнее математики, но, вообще говоря, дописывать его до конца не обязательно.

Можете решать любыми методами. Приведенная ниже архитектура — это совет, а не строгое техзадание. Из ограничений только запрет на использование читерских внешних библиотек типа nltk – используйте только то, что есть по умолчанию в питоне.

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

Как автор предлагает

Автор когда-то сам такое писал и предлагает следующий простой и эффективный метод: биграммнная языковая модель.

По большому тексту для каждого слова составляется список слов, которые могут идти после него. В ML это называется обучением. Хранить эту информацию можно в виде словаря: {слово : [одно-следующее-слово, другое-следующее-слово, ...]}.

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

Основной код должен быть разбит на две части: обучение и генерация.

Обучение:

  • Считать входные данные из файлов.
  • Очистить тексты: выкидывать неалфавитные символы, приводить к lowercase.
  • Разбить тексты на слова (в ML это называется токенизацией).
  • Сохранить модель в каком-нибудь формате, который позволяет восстановить слова и частоты биграмм.

Генерация:

  • Загрузить модель.
  • Инициализировать её каким-нибудь сидом.
  • Сгенерировать последовательность нужной длины.

Детали:

  • Удобно создать для обучения и генерации отдельные файлы и реализовать консольный интерфейс к ним через argparse.
  • Для работы с текстами может пригодиться библиотека регулярных выражений re.
  • Соблюдайте, пожалуйста, pep8. Пишите хороший код.
  • Следуйте принципам ООП. Оберните модель в класс, у которого будет методы fit и generate.
  • Для сохранения модели удобно использовать pickle или dill.
  • Обучать модель можно на чем угодно – от «Войны и мира» и «Гарри Поттера» до текстов Монеточки и протоколов съездов КПСС.

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

FAQ по всему отбору

Правда ли, что от нас хотят генерацию последовательности слов, а не предложений?

Если придумаешь, как прикрутить пунктуацию и разбиение на предложения — большой плюс.

Как работать с гитхабом?

Регаешься на сайте, устанавливаешь в системе git. Кликаешь на плюсик, выбираешь «new repository» и заполняешь название. Когда создастся, там где-то будет инструкция, как его синхронизировать со своей системой ( в нужной папке ввести git clone и ссылка на репозиторий).

Дальше заливать на него обновления так:

  • git add * — добавить все изменения в текущий коммит
  • git commit -a -m '...' — закоммитить их локально, с комментарием вместо точек (очень рекомендуется писать там что-нибудь информативное)
  • git push — залить на сам гитхаб

Прокатит ли в 5 и 6 сумма бесконечного ряда?

Это лучше, чем ничего, но, если вы её правильно получили, то она сворачивается в красивые формулы.

@sslotin
Copy link
Author

sslotin commented Sep 2, 2019

Ссылку на репозиторий прикрепляйте в форме на странице отбора.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment