Авторы: Клеман Частаньол, руководитель отдела науки о данных, Лоик Пети, старший инженер по обработке данных, и Цзе Лу, специалист по анализу данных в Sidetrade.

Вы пользуетесь многоязычным встраиванием слов MUSE в Facebook? Если да, то у нас для вас хорошие новости: теперь вы можете загружать их в свой код в 100 раз быстрее с файлами, которые в 5 раз меньше!

А что насчет моделей MUSE?

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

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

Да, но можно ли заставить их загружаться быстрее?

Оптимизируя часть нашего кода, используя предварительно обученные вложения MUSE (которые можно скачать здесь для 30 языков), мы задавались вопросом, как ускорить время загрузки моделей. Каждая модель весит 600 МБ на диске и загружается примерно за 15 секунд.

После попытки изменить код, предоставленный Facebook в демонстрационной записной книжке без каких-либо значительных изменений, мы поняли, что вместо того, чтобы использовать точные файлы из Facebook, мы могли бы изменить формат файла на двоичный формат.

Поскольку данные находятся в формате значений, разделенных пробелами, мы сразу подумали об использовании msgpack для эффективной загрузки. У нас уже есть опыт использования библиотеки msgpack в Python в нашем коде, после того как мы обнаружили ее в очень подробном сообщении в блоге Uber о сжатии данных, в котором подчеркивалась ее впечатляющая производительность.

Итак, наше решение очень простое:

  1. скачать модели
  2. проанализировать их, используя исходный код Facebook
  3. сериализуйте их в двоичном формате с помощью msgpack
  4. повторно использовать их позже

Загрузка недавно созданных моделей двоичного формата теперь занимает всего 150 мс, что означает 100-кратное улучшение!

Да, но можно ли сделать их легче?

Мы также добавили преобразование на шаге 3 выше, используя 16-битные числа с плавающей запятой вместо стандартного 64-битного представления с плавающей запятой. В результате модели на диске имеют вес около 117 МБ вместо 600 МБ, т.е. размер уменьшается на 80%.

Это связано с небольшими затратами с точки зрения точности, поскольку float не является точным представлением. Однако, глядя на распределение ошибок преобразования ниже, мы считаем его приемлемым. Более того, в одной из наших основных задач с использованием этих моделей (классификация текста с использованием примерно пятнадцати классов) не было абсолютно никакой разницы в предсказаниях.

Да, но можете ли вы сделать их доступными?

Конечно можем! Вы можете найти модели для 30 доступных языков прямо здесь: https://gitlab.com/sidetrade-oss/binary-muse-embeddings

Удачи в MUSEing!