Search
Write a publication
Pull to refresh
1
0
Штясек Матей @matthew_shtyasek

User

Send message

Рейтинг русскоязычных энкодеров предложений

Reading time9 min
Views37K

Энкодер предложений (sentence encoder) – это модель, которая сопоставляет коротким текстам векторы в многомерном пространстве, причём так, что у текстов, похожих по смыслу, и векторы тоже похожи. Обычно для этой цели используются нейросети, а полученные векторы называются эмбеддингами. Они полезны для кучи задач, например, few-shot классификации текстов, семантического поиска, или оценки качества перефразирования.

Но некоторые из таких полезных моделей занимают очень много памяти или работают медленно, особенно на обычных CPU. Можно ли выбрать наилучший энкодер предложений с учётом качества, быстродействия, и памяти? Я сравнил 25 энкодеров на 10 задачах и составил их рейтинг. Самой качественной моделью оказался mUSE, самой быстрой из предобученных – FastText, а по балансу скорости и качества победил rubert-tiny2. Код бенчмарка выложен в репозитории encodechka, а подробности – под катом.

Читать далее

Делаем параллельный корпус из книг с помощью sentence embeddings

Reading time8 min
Views10K

Parallel trucks (image by Unsplash


При поиске параллельных корпусов для своих нужд, — это может быть обучение модели машинного перевода или изучение иностранного языка, можно столкнуться с тем, что их не так уж и много, особенно, если речь идет не об английском, а каком-то редком языке. В этой статье мы попробуем создать свой корпус для популярной языковой пары русский-немецкий на основе романа Ремарка "Три товарища". Любителям параллельного чтения книг и разработчикам систем машинного перевода посвящается.


Задача


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


  • Использовать эвристики. Можно считать количество предложений в текстах, количество слов в них и на основе этого производить сопоставление. Такой способ не дает хорошего качества, но может тоже быть полезным.
  • Использовать sentence embeddings. Наверняка вы слышали про модели типа word2vec или sent2vec или видели такой пример их использования — "король" + "женщина""мужчина" = "королева". Если коротко, то суть в том, чтобы перевести слова (предложения, тексты) в векторное пространство с сохранением семантического расстояния между ними. Такой подход открывает перед нами замечательные возможности по оценке близости текстов и их кусочков по смыслу.
Читать дальше →

Самые криповые случаи с ИИ: что пугает в нейросетях? Часть 1

Level of difficultyEasy
Reading time11 min
Views41K

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

Каким окажется будущее уже через 5–10 лет благодаря повсеместному внедрению нейросетей — вряд ли сможет предсказать даже самый мудрый футуролог и прогнозист: скорее всего, влияние будет обширным, крайне разнообразным и очень комплексным. Достаточно сказать, что нейросети уже есть, а буквально напрашивающегося жанра нейропанка всё ещё почти что нет. Прогресс, ещё недавно казавшийся притормозившим, снова опережает фантазии — как уже не раз бывало в истории человечества.
Читать дальше →

Обзор методов создания эмбедингов предложений, Часть1

Reading time18 min
Views13K

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


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


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


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


Можно привести аналогию с картинкой ниже. По шкале от кекса до собаки они находятся на разных концах, а по количеству чёрных точек и цвету объекта на одном.


https://cdn-media-1.freecodecamp.org/images/1*bt-E2YcPafjiPbZFDMMmNQ.jpeg

Читать дальше →

Обзор методов создания эмбедингов предложений, Часть2

Reading time20 min
Views7K

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


Часть1 обязательна для ознакомления


4. BERT


from deeppavlov.core.common.file import read_json
from deeppavlov import build_model, configs
from deeppavlov.models.embedders.elmo_embedder import ELMoEmbedder
# ссылка для скачивания моделей http://docs.deeppavlov.ai/en/master/features/pretrained_vectors.html

4.1 rubert_cased_L-12_H-768_A-12_pt


class RU_BERT_CLASS:
    def __init__(self, name):
        bert_config = read_json(configs.embedder.bert_embedder)
        bert_config['metadata']['variables']['BERT_PATH'] = os.path.join('./.', name)
        self.m = build_model(bert_config)

    def vectorizer(self, sentences):
        return [sentence.split() for sentence in sentences]

    def predict(self, tokens):
        _, _, _, _, sent_max_embs, sent_mean_embs, _ = self.m(tokens)
        return sent_mean_embs

bert = RU_BERT_CLASS('rubert_cased_L-12_H-768_A-12_pt')
get_similarity_values = similarity_values_wrapper(bert.predict, bert.vectorizer, distance_function=cosine_distances)
evaluate(get_similarity_values, 'rubert')

'rubert: 2895.7'

Читать дальше →

Как уменьшить количество измерений и извлечь из этого пользу

Reading time10 min
Views54K
Сначала я хотел честно и подробно написать о методах снижения размерности данных — PCA, ICA, NMF, вывалить кучу формул и сказать, какую же важную роль играет SVD во всем этом зоопарке. Потом понял, что получится текст, похожий на вырезки из опусов от Mathgen, поэтому количество формул свел к минимуму, но самое любимое — код и картинки — оставил в полном объеме.
Читать дальше →

Погружаемся в статистику вместе с Python. Часть 3. Тестов много, принцип один

Reading time18 min
Views32K

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

О чем мне следует вас предупредить перед погружением на такую глубину? Во-первых, я предполагаю, что вы уже почитали книгу Сары Бослаф "Статистика для всех", а еще покопались в официальной документации модуля stats библиотеки SciPy. Уж простите меня за мое следующее предположение, но мне кажется, что вы скорее всего были немного ошарашены огромным количеством тестов, которые там имеются, и были ошарашены еще больше, когда поняли, что это на самом деле только верхушка айсберга. Ну, а если вы еще не столкнулись со всеми прелестями этого чудесного "пубертатного периода", то рекомендую раздобыть книгу Александра Ивановича Кобзаря "Прикладная математическая статистика. Для инженеров и научных работников". Ну, а если вы "в теме", то все равно загляните под кат, почему? Потому что изложение и интерпретация фактов порой важнее и интереснее самих фактов.

Ну что, погружаемся еще глубже?

Погружаемся в статистику вместе с Python. Часть 2. Распределение Стьюдента

Reading time18 min
Views40K

Доброго времени суток, хабраледи и хабраджентельмены! В этой статье мы продолжим погружение в статистику вместе с Python. Если кто пропустил начало погружения, то вот ссылка на первую часть. Ну, а если нет, то я по-прежнему рекомендую держать под рукой открытую книгу Сары Бослаф "Статистика для всех". Так же рекомендую запустить блокнот, чтобы поэкспериментировать с кодом и графиками.

Как сказал Эндрю Ланг: "Статистика для политика – все равно что уличный фонарь для пьяного забулдыги: скорее опора, чем освещение." Тоже самое можно сказать и про эту статью для новичков. Вряд ли вы почерпнете здесь много новых знаний, но надеюсь, эта статья поможет вам разобраться с тем, как использовать Python для облегчения самостоятельного изучения статистики.

Продолжить погружение!

Погружаемся в статистику вместе с Python. Часть 1. Z-статистика и p-value

Reading time19 min
Views54K

Не знаю как вам, а мне статистика далась очень не просто. Причем "далась" - это еще громко сказано. Да, оказалось что можно довольно долго ехать на методичках, кое как вникая в смысл четырехэтажных формул, а иногда даже не понимая результатов, но все равно ехать. Ехать и не получать никакого удовольствия - вроде бы все понятно, но ощущение, что ты "не совсем в теме" все никак не покидает. Какое-то время пытался читать книги по R и не то что бы совсем безрезультатно, но и не "огонь". Нашел наикрутейшую книгу "Статистика для всех" Сары Бослаф, прочитал... все равно остались какие-то нюансы смысл которых так и не понятен до конца.

В общем, как вы догадались - эта статья из серии "Пробую объяснить на пальцах, что бы самому разобраться." Так что если вы неравнодушны к статистике, то прошу под кат.

Начать погружение

Необычные модели Playboy, или про обнаружение выбросов в данных c помощью Scikit-learn

Reading time7 min
Views129K
Мотивированный статьей пользователя BubaVV про предсказание веса модели Playboy по ее формам и росту, автор решил углубиться if you know what I mean в эту будоражащую кровь тему исследования и в тех же данных найти выбросы, то есть особо сисястые модели, выделяющиеся на фоне других своими формами, ростом или весом. А на фоне этой разминки чувства юмора заодно немного рассказать начинающим исследователям данных про обнаружение выбросов (outlier detection) и аномалий (anomaly detection) в данных с помощью реализации одноклассовой машины опорных векторов (One-class Support Vector Machine) в библиотеке Scikit-learn, написанной на языке Python.
Читать дальше →

Fine-Tune модели основанной на трансформерах (Rubert) для классификации текстов

Reading time7 min
Views19K

Задача классификации текста уже давно является устоявшейся во многих компаниях. Она используется для определения настроения клиентов, разделение документов на заранее известные темы, детекции фейковых новостей и т.д. Сегодня я представлю state of the art подход для решения задачи бинарной классификации, а именно детекция сообщений, в которой присутствует жалоба на сотрудника.

А также сравню по точности два подхода - Fine-Tune Bert и получение предобученных эмбеддингов и их классификация с использованием полносвязной нейронной сети.

Читать далее
2

Information

Rating
10,340-th
Location
Курган, Курганская обл., Россия
Date of birth
Registered
Activity

Specialization

Data Analyst, Data Scientist
Intern
Python
Django
PostgreSQL
SQL
OOP