Использование моделей обнимающего лица на неанглийских текстах
Как использовать предварительно обученные модели английского языка из Hugging Face на неанглоязычных текстах
Предварительно обученная модель - это сохраненная модель машинного обучения, которая ранее была обучена на большом наборе данных (например, на всех статьях в Википедии), а затем может использоваться в качестве «программы», которая выполняет определенные задача (например, поиск тональности текста).
Hugging Face - отличный ресурс для предварительно обученных моделей языковой обработки. Тем не менее, большинство доступных моделей обучены для популярных языков (английский, испанский, французский и т. Д.). К счастью, на многих небольших языках есть предварительно обученные модели, доступные для задач перевода. Здесь я собираюсь продемонстрировать, как можно использовать доступные модели:
- перевод введенного текста на английский,
- выполнение конкретной задачи с использованием предварительно обученной английской модели,
- перевод результата обратно на исходный язык.
Я использую эстонский (на родном языке около 1,1 миллиона человек) в качестве языка ввода и оцениваю практичность этого рабочего процесса, решая следующие задачи:
- Анализ настроений.
- Экстрактивные ответы на вопросы.
- Генерация текста.
- Признание именной организации.
- Обобщение.
Перевод
Перевод - это задача перевода текста с одного языка на другой. Это будет первая и последняя задача в каждом нашем примере. Один из способов получить доступ к моделям 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 вывода). Давайте посмотрим, как это работает при анализе настроений:
- Сначала мы создаем классификатор с функцией конвейера и названием задачи. Вы можете найти доступные задачи из документации.
- Далее мы переводим введенный текст с исходного языка на английский.
- Наконец, мы запускаем анализ настроений с помощью одной строчки кода и извлекаем результаты. Пример, приведенный ниже, является успешным - перевод хороший: «Мы хотели самого лучшего, но вышло так, как всегда». и мы правильно классифицируем тональность предложения как отрицательную.
Вот еще один пример, но на этот раз задача не удалась из-за неправильного перевода. Переводчик ответил: «Лучший аргумент в пользу демократии - это пятиминутный разговор со средним избирателем», но правильным переводом было бы «Лучший аргумент против демократии…». При переводе и использовании предварительно обученных английских моделей следует помнить о возможности неправильного перевода.
Экстрактивные ответы на вопросы
Экстрактивный ответ на вопрос - это задача ответа на вопрос на основе введенного текста. В следующем примере я дам общее описание модуля, в котором я работаю, и попытаюсь ответить на вопрос «что делает этот модуль?». Давайте рассмотрим код ниже:
- Создайте конвейер ответов на вопросы (строка 2).
- Предоставьте контекст на языке оригинала и переведите контекст на английский.
- Задайте вопрос на языке оригинала и переведите его на английский.
- Пропустите вопрос и контекст через конвейер и извлеките ответ.
- Переведите ответ обратно на язык оригинала.
Приведенный выше результат показывает, что перевод не идеален, но он справится со своей задачей. Ответ на вопрос «Чем занимается E-Lab?» тоже немного резковато, но суть верна.
Генерация текста
Генерация текста (также известная как моделирование причинного языка) - это задача предсказания следующего слова (слов) с учетом начала предложения. Другими словами, это задача, в которой модель машинного обучения пытается быть писателем 😄!
В приведенном ниже примере мы:
- сгенерировать конвейер генерации текста.
- Определите два начала предложения на эстонском языке и переведите их на английский.
- Используйте конвейер для создания текста на основе начала и ограничения количества сгенерированных слов до 50.
- Переведите сгенерированный текст обратно на эстонский язык.
Как видно из приведенного выше текста, наша модель порождает изрядную чепуху вроде «Эстония вырабатывает электроэнергию из гидроэлектростанции, работающей на природном газе» 😄. Тем не менее, рабочий процесс Est-to-Eng-to-Est, похоже, работает хорошо, и качество перевода в этом примере действительно хорошее.
Признание именованных сущностей
Распознавание именованных сущностей (NER) - это задача поиска имен людей, мест и организаций из текста. В приведенном ниже примере я введу два предложения на эстонском языке в качестве входных данных и попытаюсь определить из них все названные сущности. Давайте рассмотрим код ниже:
- Инициализируйте конвейер распознавания именованных сущностей и определите разумные имена для классов, которые выводит наша модель. Здесь я создаю словарь, используя коды классов в качестве ключей и эстонские значения в качестве значений. Они будут использованы позже.
- Определите вводимый текст.
- Переведите ввод на английский.
- Определите функцию для NER: Наша функция а.) Запускает конвейер с вводом, б.) Заменяет все загадочные имена классов разумными именами на эстонском языке (в цикле for) и в.) Группирует вместе строки / токены, принадлежащие одному объекту (вы можете попробовать функцию без группировки, чтобы увидеть необработанный результат).
- Распечатайте все сущности с классом, к которому они принадлежат.
Приведенные выше результаты показывают, что модель смогла правильно обнаружить все названные сущности и разделить их на соответствующий класс (организацию или человека).
Обобщение
Резюмирование - это задача взять длинный текст или документ и резюмировать его в более короткий текст. В приведенном ниже примере я использую модель Google T5, которая была обучена на смешанных входных данных (включая документы из CNN и Daily Mail). Опять же, мы можем следовать уже знакомому рабочему процессу:
- Инициализируйте конвейер трансформаторов с помощью задачи «суммирования».
- Предоставьте вводное предложение или документ.
- Переведите ввод на английский.
- Обобщите текст, используя предварительно обученную английскую модель. Вы можете указать максимальную и минимальную длину резюме в качестве аргумента - здесь я ограничил длину резюмирования 30 токенами.
- Перевести обратно на язык ввода.
Вышеупомянутый составитель суммирования смог очень хорошо уловить основные идеи ввода, но в выводе есть некоторые грамматические проблемы. Таким образом, мы можем ожидать, что модель должна использоваться осведомленным пользователем, чтобы быстро уловить основной смысл длинных документов.
Резюме
В этой статье продемонстрирована идея использования предварительно обученных моделей английского языка на языках, отличных от английского, путем использования перевода как части рабочего процесса. Концепция тестировалась на пяти разных задачах:
- При анализе тональности качество вывода во многом зависит от качества перевода. Здесь мы попытались определить тональность двух предложений на эстонском языке - один из примеров был успешным, а другой - неудачным из-за ошибки перевода, которая изменила значение предложения.
- Отвечая на вопрос, мы увидели, что в переводе для нашего примера почти ничего не потеряно.
- Генерация текста также работает, но трудно увидеть какие-либо «реальные» варианты использования для этой задачи, потому что результат - чистая выдумка.
- При распознавании именованных сущностей мы не сильно потеряли при переводе, и наш метод хорошо подходит.
- При резюмировании текста модели следует использовать для отражения основных идей более длинных текстов, но не для создания грамматически правильного текста.
Короче говоря, концепция перевода - ›использование предварительно обученных моделей английского языка -› обратный перевод - полезный метод для выполнения различных задач обработки естественного языка на небольших и непопулярных языках.