⚡ Градиент обреченный Upd. 11.06.2022 Многие заинтересовались генерацией изображений нейросетями. Вот Colab (интерактивная среда для запуска кода) для рисования картинок в стиле pixel art по текстовому описанию. Просто запускайте, ближе к концу увидете ячейку для ввода текста. Примеры картинок из Colab'а в комментариях. Два года назад я начал делать небольшой проект, связанный с обработкой текстов на иностранных языках. Он постепенно развивался и стал использоваться лингвистами в НКРЯ, а энтузиасты сохранения малых языков используют его для расширения своих параллельных корпусов. Сегодня же я расскажу как при помощи него создать полноценную параллельную книгу на разных языках. Книга будет красиво сверстана в PDF, иметь содержание, обложку и две выровненные по смыслу колонки текста. Такие книги служат отличным подспорьем при изучении иностранного языка. Найти их, однако, не так просто, и скорее всего это будут книги для детей или избранная классика. Полный пример готовой книги можно посмотреть здесь. Под капотом у приложения NLP модели, поддерживаемых языков более ста. Проект открытый и любой может в нем поучаствовать. Во многом благодаря сообществу и вашему участию он за несколько лет дошел до сегодняшнего дня. В общем штука годная, давайте уже посмотрим, что к чему. Ранее я писал о том, как подготавливать и выравнивать тексты при помощи Lingtrain Studio, поэтому пройдусь по этим пунктам вскользь, а на новых вещах остановлюсь подробней. Для наглядности я записал видео подсказку, которая поможет вам разобраться с интерфейсом. Актуальная версия программы (в видео скачивается через docker) — lingtrain/studio:v7.2. Имея на руках два текста, чистим их от лишней информации — номеров страниц, сносок и т.п. Оставим только текст и метаданные — имя автора, заглавия и эпиграфы, если они есть. Чтобы эти дополнительные данные не участвовали в процессе выравнивания мы их пометим специальными метками, — так при создании выравнивания они отделятся от текстов и будут использованы только при оформлении книги. Основные метки такие: С расставленными метками тексты выглядят примерно так: И второй: Давайте теперь выровняем эти тексты. Нужно запустить Lingtrain Studio, для этого придется применить некоторые технические навыки. Если что-то будет не понятно, то смело пишите к нам в группу, разберемся. Для запуска приложения у себя на компьютере поднадобится docker. Выполним следующие команды: В данном примере у вас на компьютере должны быть папки E:\lingtrain\data и E:\lingtrain\img, в которых будут храниться выравнивания. Контейнер с приложением и моделями скачается из интернета и запустится на 80-м порту. Откроем приложение в браузере по адресу localhost.  Более подробно про интерфейс приложения и как им пользоваться можно почитать здесь, а про технические детали здесь. На последней вкладке мы можем скачать наше выравнивание в различных форматах.  Скачаем HTML. Экспорт в этот формат поддерживает все наши метки и позволяет добавить подсветку соответствующих предложений. Можно выбрать на какой стороне листа будет какой язык и на основе какого исходного текста формировать абзацы параллельного текста. Готовая веб-страничка выглядит так:  Или так:  Дальше мы посмотрим как можно стилизовать нашу книжку. Теперь новое, — поговорим о том, как из извлеченных параллельных данных сгенерировать красивую книгу в PDF формате. Для этого скачаем из Lingtrain Studio данные в виде XML.  На данный момент для PDF поддерживается не вся доступная разметка. Как и прежде обязательно должны быть метки автора и названия; метки заголовков должны быть только вида %%%%%h2., из них будут генерироваться содержание и колонтитулы. Поддержка полной разметки (эпиграфы, цитаты и картинки) появится в ближайшем будущем. Верстка в PDF происходит следующим образом. Сначала из данных (XML) генерируется веб-страничка (HTML). Затем к ней добавляются стили (CSS), и все это идет на вход замечательной библиотеке weasyprint. Она умеет оптимально верстать и экспортировать в PDF формат в отличие печати в PDF из браузера. Финальная книга будет с обложкой, работающими ссылками в содержании (если была h2 разметка), иметь колонтитулы и вообще выглядеть красиво. Для начала надо установить библиотеки и их зависимости. Проще всего делать это так (опять же, если возникнут трудности, то не стесняйтесь, пишите в канал): Если вы пользуетесь Windows, то вам понадобится WSL, а пользователи Linux, думаю, разберутся во всем без подсказок. Следующим шагом нужно заглянуть в репозиторий с проектом, в папке tools/pdf есть необходимые нам скрипты и примеры их использования. Свой xml файл, полученный из выравнивателя, для удобства положите в папку data. Теперь можно воспользоваться скриптом create_pdf.sh. Пару слов о нем, это просто bash скрипт, который автоматизирует создание книги. В шаблонах зашиты переменные для включения цветовой подсветки, путь к картинке для обложки, подсказки для японского и китайского и некоторые другие. Скрипт переопределяет эти настройки и запускает генерацию. Параметры генерации: Трансформацию и стили можно не указывать, тогда будут использоваться файлы, лежащие в папке со скриптом. Путь к обложке надо указать относительно XML файла, так как этот путь попадет в промежуточный HTML. Формат книги А4, поэтому картинка для обложки должна быть примерно такого же размера. Замечу, что картинки для обложки можно генерировать нейросетями. Сейчас это очень популярное направление, недавно вышли релизы Imagen и DALL-E 2, но в открытом доступе их пока что нет. Из доступных есть ruDALL-E. Также есть компания midjourney, которая предоставляет бесплатный доступ к бета версии своих моделей. В любом случае, в папке data/covers есть несколько примеров, можете взять их или добавить свою картинку. Вот так сейчас рисуют нейросети: Иллюстрация к роману "Пикник на обочине" Стругацких. Для примера запустим следующий скрипт (все эти файлы есть в репозитории). Рекомендую сначала запустить его, а когда получится, можете класть в папку data свой XML файл с книгой и запускать генерацию. В зависимости от размера файла процесс может занимать от нескольких секунд, до пары минут. Настройки форматирования книги находятся в файле book.css. Можете поиграться с настройками и отформатировать книгу как вам хочется. Кроме того в этом файле можно настроить ширину левой и правой колонки. Это особенно важно для иероглифических текстов с подсказками, так как они занимают гораздо больше пространства. Вот идеи по настройке форматирования под себя: На выходе получаем вот такую книгу: Если бы в выравнивании были метки %%%%%h2., то сгенерировалось бы содержание с работающими ссылками: Как я уже говорил, применение проекта не ограничивается книгами. Из Lingtrain Studio можно экспортировать параллельные корпуса и TMX файлы. Параллельные корпуса затем можно использовать для дообучения моделей машинного перевода. Кроме того, благодаря энтузиастам, любящим свои родные языки, появилась возможность дообучения модели под более редкие языки. Про результаты можно почитать в этой статье. Проект выравнивателя развивается несколько лет и вырос из соревнования на машинный китайско-русский перевод, которое организовал madrugado. Благодаря команде русско-китайского параллельного корпуса НКРЯ он получил дополнительный стимул к развитию. Сейчас наше небольшое сообщество обрастает любителями языков и подпитывает проект идеями, поэтому приглашаю к нему присоедиться, ссылка в конце статьи. Для интересующихся тонкостями машинного обучения и новостями из мира ИИ я веду еще один канал. Если есть идеи, критика или слова поддержки, — жду от вас весточки! ML Engineer