Обзор двух основных многоязычных моделей встраивания предложений

Почему многоязычные модели

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

Так как же работают многоязычные модели? Один из распространенных подходов - превратить любой входящий язык в не зависящий от языка вектор в пространстве, где все языки для одного и того же ввода будут указывать на одну и ту же область. Другими словами, любые входящие фразы с одинаковым значением будут отображаться в одной и той же области скрытого пространства.

Сегодня доступно несколько многоязычных встраиваний, они позволяют заменять любые слова векторами. Два основных - ЛАЗЕРНЫЕ вложения от Facebook (L anguage- A гностические SE ntence R презентации) и Многоязычные USE-вложения от Google (U универсальный S entence E ncoder). Вложения LASER охватывают 93 основных языка, в то время как USE охватывает только 16 языков. Давайте подробнее рассмотрим ЛАЗЕР.

Что такое ЛАЗЕР

LASER работает, заменяя (встраивая) любое входное предложение в вектор в 1024-мерном пространстве. Каждое предложение получает один раз такой вектор,

ЛАЗЕРНЫЕ векторные представления предложений являются общими как для входного языка, так и для задачи НЛП. Вот пример -

Слева несколько предложений, встроенных ЛАЗЕРОМ. Справа - предложения с немецкого языка. Как видите, векторы с одинаковым значением расположены очень близко.

Это позволяет нам использовать ЛАЗЕР в качестве входных функций для нашей модели НЛП ниже по течению для конкретной задачи, которая у нас есть, и не беспокоиться о языке ввода. Возможно, что-то столь же простое, как логистическая регрессия для встраиваний вывода LASER, и внезапно у нас есть не зависящий от языка классификатор, который работает на любом языке.

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

Настройка ЛАЗЕРА на сервере

Вот Github to LASER. Мы установим LASER в докере на нашем компьютере, запустив следующий код, следующие команды bash также заставляют докер прослушивать порт 8050 -

#!/bin/bash
git clone https://github.com/facebookresearch/LASER
cd LASER
docker build --tag=laser docker
docker run -p 8050:80 -it laser python app.py

Пробуем встраивать ЛАЗЕР на образец текста

Теперь мы готовы готовить на огне. В терминале python определите следующую функцию, чтобы вставлять предложения с помощью ЛАЗЕРА:

#!/bin/python
import requests
import numpy as np
def get_vect(query_in, lang = 'en', address = '127.0.0.1:8050'):
    url = "http://" + address + "/vectorize"
    params = {"q": query_in, "lang": lang}
    resp = requests.get(url=url, params=params).json()
    return resp["embedding"]

Давайте определим несколько предложений на разных языках. Определите следующий словарь -

input_dict = {
    "en":"Machine learning isn't as hard as people think.",
    "de":"Maschinelles Lernen ist nicht so schwer wie die Leute denken.",
    "fr":"L'apprentissage automatique n'est pas aussi difficile qu'on le pense.",
    "it":"L'apprendimento automatico non è così difficile come la gente pensa.",
    "es":"El aprendizaje automático no es tan difícil como la gente piensa.",
    "ru":"Машинное обучение не так сложно, как думают люди.",
    "ar":"التعلم الآلي ليس صعبا كما يظن الناس.",
    "pt":"O aprendizado de máquina não é tão difícil quanto as pessoas pensam.",
}

Теперь давайте отправим словарь, который мы определили, в докер, на котором запущена наша служба встраивания LASER -

embedded_dict = {}
for key in input_dict:
    embedded_dict[key] = np.array(get_vect(input_dict[key], lang = key))

А вот как выглядят наши вложения -

В то время как каждое вложение - это 1024-мерный вектор. Следует отметить, что сервис LASER усредняет вложения по предложениям в данном абзаце. Таким образом, отправка 5 абзацев текста даст 5 векторов по 1024 тусклых изображения каждый. Векторы внутренне вменяются для каждого предложения, однако выбранный ими дизайн усредняет указанные векторы -

Если вы заметили, мы отправили LASER предложение: «Машинное обучение не так сложно, как думают люди». на 8 разных языках. Давайте проверим утверждение, что векторы с одинаковым значением находятся в одном векторном пространстве. Для этого мы будем использовать косинусное сходство двух векторов, где сходство 1 означает, что векторы одинаковы -

from sklearn.metrics.pairwise import cosine_similarity
cos_lib = cosine_similarity(embedded_dict['it'], embedded_dict['es'])

И действительно, сравнение итальянского предложения с испанским дает сходство в 99 +%, показывая нам, что эти векторы указывают на одну и ту же область в нашем 1024-мерном пространстве.

Заключение

Как мы видели, в большинстве случаев одни и те же предложения имеют почти идентичные векторные представления. Это означает, что даже когда в примерах используются разные языки, смысл, стоящий за ними, один и тот же, и система встраивания LASER может передать это на компьютер.

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