Пошаговое руководство по созданию веб-приложения переводчика субтитров с использованием библиотеки Streamlit менее чем за час

Схема

- Введение

— Формат ввода

— Обзор Streamlit

- Обзор EasyNMT

— Демо

- Код и прохождение

Субтитры – это текст, отображаемый в нижней части экрана кинотеатра или телевизора, который переводит или транскрибирует диалог или повествование, помогая тем, для кого не является родным, понимать контент на другом языке и наслаждаться им. Пару недель назад мне довелось взглянуть на основные языки (кроме английского и хинди), на которых говорит большинство зрителей на моем канале YouTube. Французский, немецкий, испанский, корейский, арабский, турецкий языки возглавляют список. 🥇

Итак, прошлой ночью я потратил около часа и сделал простой пользовательский интерфейс с помощью Streamlit и EasyNMT, чтобы перевести все мои английские субтитры на эти языки одним нажатием кнопки! Я имею в виду, что здорово видеть, как технологии трансформируют и значительно экономят наше время (хотя и не всегда 😛).

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

Формат ввода

Мы используем файл (.srt) в качестве формата ввода. Если кто-то из вас не видел, как выглядит файл SRT, посмотрите ниже —

1
00:00:00,000 --> 00:00:03,520
hello everyone welcome back to my
2
00:00:01,520 --> 00:00:05,040
youtube channel so today we'll be going
3
00:00:03,520 --> 00:00:06,560
through the concept of multivariate
4
00:00:05,040 --> 00:00:08,480
gaussian distribution
5
00:00:06,560 --> 00:00:11,759
so i found this document online from
6
00:00:08,480 --> 00:00:13,360
stanford and it dates back to 2008

Здесь у нас есть индексация, начальные и конечные временные метки и связанный текст, который должен отображаться на экране в это время. Кроме того, если вы читаете этот блог именно по той причине, для которой я создал этот инструмент, вы также можете извлечь соответствующий файл SRT для своего видео на YouTube из Channel Studio. На рисунке ниже показан соответствующий экран —

Что такое стримлит?

Streamlit – это библиотека с открытым исходным кодом, которая помогает разработчикам, не использующим пользовательский интерфейс, очень быстро создавать прототипы своих "веб-приложений", не обладая предварительными знаниями HTML, CSS или JavaScript. Если вы просто знаете Python, вы готовы создать прекрасный пользовательский интерфейс с помощью всего нескольких строк кода для вашего приложения ML, вообще не беспокоясь о внешнем интерфейсе. Есть несколько действительно крутых приложений, созданных сообществом с их использованием. Отметьте здесь.

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

Вот как его можно установить —

$ pip install streamlit==0.75.0

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

$ streamlit hello

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

Что такое EasyNMT?

EasyNMT предоставляет простую в использовании оболочку для современных моделей машинного перевода, поддерживающую более 100+ языков в автономном режиме, что означает, что вам не нужно обходное решение LIMIT EXCEEDED error при использовании коммерческих моделей больше. Это также поможет вам автоматически выполнять определение языка (в случае, если вы не уверены в исходном языке) для более чем 170 языков. Наконец, он также помогает вам быстрее делать выводы благодаря поддержке нескольких графических процессоров.

Вот как его можно установить —

$ pip install easynmt==1.0.1

P.S. Версии зависят от того, что у меня есть в моей системе, которая хорошо организована.

На момент написания этого блога автор предоставил 3 модели NMT — Opus-MT от Helsinki-NLP, mBART50_m2m и M2M_100 от Facebook Research. Для целей этого блога мы будем использовать Opus-MT.

Демо

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

Код

Пошаговое руководство по коду

Давайте расшифруем весь код и разберемся с различными компонентами и потоком.

  1. Импортировать соответствующие библиотеки — строка (5–6)
  2. Загрузить модель OpusMT — (строка 7)
  3. Создайте список со всеми интересующими вас языковыми парами. Где первый элемент – исходный, а следующий – целевой язык – (строка 10)
  4. Мы определяем функцию перевода, которая вызывает метод перевода OpusMT, передавая предложение/текстовый сегмент, исходный язык и целевой язык(строки 12–13)
  5. В функции «display_props» мы определяем все необходимые уценки для основного экрана, а также боковой панели, добавляя .sidebar к объекту (st) с подсветкой — (строка 15–29)
  6. Определите загрузчик файлов, ограничив тип ввода как SRT. Первый параметр установлен на "", показывая пустую метку для этого поля. У вас может быть что-то вроде «Загрузить файл сюда» и т. д. — (Строка 32)
  7. Получив файл, мы читаем его построчно, сохраняем в списке и подсчитываем количество строк в файле. Мы используем это для расчета размера шага для рендеринга нашего индикатора выполнения — (строки 34–37)
  8. Для каждой языковой пары распечатайте текущие пары ввода-вывода перевода и откройте соответствующие файлы для хранения вывода — (строки 39–60)
  9. Установите индикатор выполнения на 0 , переберите каждую строку, для каждой строки проверьте, является ли первый символ строки строкой или нет, на основе этого мы решаем, нужно ли нам вызывать функцию перевода или копировать строку как есть. Обновляйте индикатор выполнения на 1 шаг за каждые N пройденных вами строк.— (строки 62–82)

Доступ к суть.

На этом блог закончился. Надеюсь, чтение стоило вашего времени. Спасибо!