Использование моделей обнимающего лица на неанглийских текстах

Как использовать предварительно обученные модели английского языка из Hugging Face на неанглоязычных текстах

Предварительно обученная модель - это сохраненная модель машинного обучения, которая ранее была обучена на большом наборе данных (например, на всех статьях в Википедии), а затем может использоваться в качестве «программы», которая выполняет определенные задача (например, поиск тональности текста).

Hugging Face - отличный ресурс для предварительно обученных моделей языковой обработки. Тем не менее, большинство доступных моделей обучены для популярных языков (английский, испанский, французский и т. Д.). К счастью, на многих небольших языках есть предварительно обученные модели, доступные для задач перевода. Здесь я собираюсь продемонстрировать, как можно использовать доступные модели:

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

Я использую эстонский (на родном языке около 1,1 миллиона человек) в качестве языка ввода и оцениваю практичность этого рабочего процесса, решая следующие задачи:

  1. Анализ настроений.
  2. Экстрактивные ответы на вопросы.
  3. Генерация текста.
  4. Признание именной организации.
  5. Обобщение.

Перевод

Перевод - это задача перевода текста с одного языка на другой. Это будет первая и последняя задача в каждом нашем примере. Один из способов получить доступ к моделям Hugging Face - через их Inference API, который позволяет выполнять логический вывод (запрашивать что-то из модели машинного обучения) без локальной установки или загрузки какой-либо из моделей. Для начала вам необходимо зарегистрироваться в Hugging Face и получить токен API в своем профиле.

Использование API предполагает:

  • Выбор модели из Model Hub и определение конечной точки ENDPOINT = https://api-inference.huggingface.co/models/<MODEL_ID>.
  • Определение заголовков с помощью вашего личного токена API.
  • Определение ввода (обязательно) и параметров (необязательно) вашего запроса.
  • Выполнение запроса API.

Это проиллюстрировано в следующем примере сквозного кода, где мы 1. определяем конечную точку API, копируя имя модели из библиотеки моделей; 2. Установка токена API, который вы можете найти в настройках пользователя после регистрации учетной записи в Hugging Face; 3. Определение функции, которая делает POST-запрос к API; 4. Определение вводимого текста, который я хотел бы перевести, и выполнение запроса API с этим вводом и 5. извлечение результатов. NB: для следующих переводов нам нужно только повторить шаги 4 и 5 (определение нового ввода и извлечение результатов).

Анализ настроений

Анализ тональности - это задача классификации входящего текста как положительного или отрицательного. Количество возможных классов зависит от конкретной предварительно обученной модели. Например, некоторые модели используют только два класса (положительный, отрицательный), в то время как другие используют три (положительный, нейтральный, отрицательный) или более.

Для анализа настроений я использую Библиотеку трансформеров, которая является еще одним простым вариантом рядом с Inference API для доступа к предварительно обученным моделям. Установите библиотеку !pip install transformers в свой ноутбук или pip install transformers в терминал.

Самый простой способ использовать предварительно обученную модель для данной задачи - использовать функцию pipeline('name-of-the-task'). Библиотека загружает предварительно обученные модели для конкретной задачи, и вывод выполняется на вашем локальном компьютере (напомним, что если вы не хотите загружать модели, вы можете использовать API вывода). Давайте посмотрим, как это работает при анализе настроений:

  1. Сначала мы создаем классификатор с функцией конвейера и названием задачи. Вы можете найти доступные задачи из документации.
  2. Далее мы переводим введенный текст с исходного языка на английский.
  3. Наконец, мы запускаем анализ настроений с помощью одной строчки кода и извлекаем результаты. Пример, приведенный ниже, является успешным - перевод хороший: «Мы хотели самого лучшего, но вышло так, как всегда». и мы правильно классифицируем тональность предложения как отрицательную.

Вот еще один пример, но на этот раз задача не удалась из-за неправильного перевода. Переводчик ответил: «Лучший аргумент в пользу демократии - это пятиминутный разговор со средним избирателем», но правильным переводом было бы «Лучший аргумент против демократии…». При переводе и использовании предварительно обученных английских моделей следует помнить о возможности неправильного перевода.

Экстрактивные ответы на вопросы

Экстрактивный ответ на вопрос - это задача ответа на вопрос на основе введенного текста. В следующем примере я дам общее описание модуля, в котором я работаю, и попытаюсь ответить на вопрос «что делает этот модуль?». Давайте рассмотрим код ниже:

  1. Создайте конвейер ответов на вопросы (строка 2).
  2. Предоставьте контекст на языке оригинала и переведите контекст на английский.
  3. Задайте вопрос на языке оригинала и переведите его на английский.
  4. Пропустите вопрос и контекст через конвейер и извлеките ответ.
  5. Переведите ответ обратно на язык оригинала.

Приведенный выше результат показывает, что перевод не идеален, но он справится со своей задачей. Ответ на вопрос «Чем занимается E-Lab?» тоже немного резковато, но суть верна.

Генерация текста

Генерация текста (также известная как моделирование причинного языка) - это задача предсказания следующего слова (слов) с учетом начала предложения. Другими словами, это задача, в которой модель машинного обучения пытается быть писателем 😄!

В приведенном ниже примере мы:

  1. сгенерировать конвейер генерации текста.
  2. Определите два начала предложения на эстонском языке и переведите их на английский.
  3. Используйте конвейер для создания текста на основе начала и ограничения количества сгенерированных слов до 50.
  4. Переведите сгенерированный текст обратно на эстонский язык.

Как видно из приведенного выше текста, наша модель порождает изрядную чепуху вроде «Эстония вырабатывает электроэнергию из гидроэлектростанции, работающей на природном газе» 😄. Тем не менее, рабочий процесс Est-to-Eng-to-Est, похоже, работает хорошо, и качество перевода в этом примере действительно хорошее.

Признание именованных сущностей

Распознавание именованных сущностей (NER) - это задача поиска имен людей, мест и организаций из текста. В приведенном ниже примере я введу два предложения на эстонском языке в качестве входных данных и попытаюсь определить из них все названные сущности. Давайте рассмотрим код ниже:

  1. Инициализируйте конвейер распознавания именованных сущностей и определите разумные имена для классов, которые выводит наша модель. Здесь я создаю словарь, используя коды классов в качестве ключей и эстонские значения в качестве значений. Они будут использованы позже.
  2. Определите вводимый текст.
  3. Переведите ввод на английский.
  4. Определите функцию для NER: Наша функция а.) Запускает конвейер с вводом, б.) Заменяет все загадочные имена классов разумными именами на эстонском языке (в цикле for) и в.) Группирует вместе строки / токены, принадлежащие одному объекту (вы можете попробовать функцию без группировки, чтобы увидеть необработанный результат).
  5. Распечатайте все сущности с классом, к которому они принадлежат.

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

Обобщение

Резюмирование - это задача взять длинный текст или документ и резюмировать его в более короткий текст. В приведенном ниже примере я использую модель Google T5, которая была обучена на смешанных входных данных (включая документы из CNN и Daily Mail). Опять же, мы можем следовать уже знакомому рабочему процессу:

  1. Инициализируйте конвейер трансформаторов с помощью задачи «суммирования».
  2. Предоставьте вводное предложение или документ.
  3. Переведите ввод на английский.
  4. Обобщите текст, используя предварительно обученную английскую модель. Вы можете указать максимальную и минимальную длину резюме в качестве аргумента - здесь я ограничил длину резюмирования 30 токенами.
  5. Перевести обратно на язык ввода.

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

Резюме

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

  1. При анализе тональности качество вывода во многом зависит от качества перевода. Здесь мы попытались определить тональность двух предложений на эстонском языке - один из примеров был успешным, а другой - неудачным из-за ошибки перевода, которая изменила значение предложения.
  2. Отвечая на вопрос, мы увидели, что в переводе для нашего примера почти ничего не потеряно.
  3. Генерация текста также работает, но трудно увидеть какие-либо «реальные» варианты использования для этой задачи, потому что результат - чистая выдумка.
  4. При распознавании именованных сущностей мы не сильно потеряли при переводе, и наш метод хорошо подходит.
  5. При резюмировании текста модели следует использовать для отражения основных идей более длинных текстов, но не для создания грамматически правильного текста.

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