Pull to refresh
142
-2
Давид Дале @cointegrated

Разработчик / Аналитик / Data Scientist / NLPшник

Send message

Фильтруй базар! Как мы параллельный русско-башкирский корпус чистили

Level of difficultyHard
Reading time6 min
Views2.9K

Чтобы обучать нейросети понимать и генерировать человеческие языки, нужно много качественных текстов на нужных языках. «Много» – не проблема в эпоху интернета, но с качеством бывают сложности. В этом посте я предлагаю использовать BERT-подобные модели для двух задач улучшения качества обучающих текстов: исправление ошибок распознавания текста из сканов и фильтрация параллельного корпуса предложений. Я испробовал их на башкирском, но и для других языков эти рецепты могут оказаться полезны.

Читать далее
Total votes 17: ↑17 and ↓0+17
Comments1

Первый нейросетевой переводчик для эрзянского языка

Reading time10 min
Views12K

Эрзянский язык из финно-угорской семьи – один из официальных в республике Мордовия, и на нём говорят сотни тысяч людей, но для него до сих пор не было почти никаких технологий машинного перевода, кроме простых словарей.
Я попробовал создать первую нейросеть, способную переводить с эрзянского на русский (и с натяжкой ещё на 10 языков) и обратно не только слова, но и целые предложения.

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

Читать далее
Total votes 70: ↑69 and ↓1+68
Comments20

Восстанавливаем предложения из эмбеддингов LaBSE

Reading time8 min
Views6.6K

На прошлой неделе меня дважды спрашивали, как восстановить текст предложения из его LaBSE эмбеддинга. Я дважды отвечал, что никак. Но на самом деле, конечно, можно обучить декодер генерировать текст по его эмбеддингу. Зачем? Например, чтобы переводить с 100 языков на русский, перефразировать предложения, модифицировать их смысл или стиль.

Модель для восстановления предложений из эмбеддингов опубликована как cointegrated/rut5-base-labse-decoder, а подробности – под катом.

Читать далее
Total votes 12: ↑12 and ↓0+12
Comments31

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

Reading time9 min
Views21K

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

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

Читать далее
Total votes 26: ↑26 and ↓0+26
Comments19

Нейросети для Natural Language Inference (NLI): логические умозаключения на русском языке

Reading time9 min
Views17K

NLI (natural language inference) – это задача автоматического определения логической связи между текстами. Обычно она формулируется так: для двух утверждений A и B надо выяснить, следует ли B из A. Эта задача сложная, потому что она требует хорошо понимать смысл текстов. Эта задача полезная, потому что "понимательную" способность модели можно эксплуатировать для прикладных задач типа классификации текстов. Иногда такая классификация неплохо работает даже без обучающей выборки!

До сих пор в открытом доступе не было нейросетей, специализированных на задаче NLI для русского языка, но теперь я обучил целых три: tiny, twoway и threeway. Зачем эти модели нужны, как они обучались, и в чём между ними разница – под катом.

Читать далее
Total votes 24: ↑24 and ↓0+24
Comments3

Многозадачная модель T5 для русского языка

Reading time7 min
Views22K

Модель T5 – это нейросеть, которая уже обучена хорошо понимать и генерировать текст, и которую можно дообучить на собственную задачу, будь то перевод, суммаризация текстов, или генерация ответа чат-бота.

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

Читать далее
Total votes 16: ↑16 and ↓0+16
Comments5

Лучшие навыки Алисы и советы от их разработчиков

Reading time8 min
Views46K

Я уже довольно давно разрабатываю навыки для Яндекс.Алисы, но пока не создал ни одного популярного. Недавно мне стало интересно: а какие навыки становятся самыми популярными, и кто те люди, которые их создают? Чтобы ответить на этот вопрос, я проанализировал каталог Алисы и опросил 20 разработчиков, чьи навыки набрали наибольшее количество оценок "пять". Похоже, что к их советам стоит прислушаться.

Читать далее
Total votes 15: ↑15 and ↓0+15
Comments8

Перефразирование русских текстов: корпуса, модели, метрики

Reading time13 min
Views19K

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

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

Читать далее
Total votes 16: ↑16 and ↓0+16
Comments5

Маленький и быстрый BERT для русского языка

Reading time9 min
Views54K

BERT – нейросеть, способная неплохо понимать смысл текстов на человеческом языке. Впервые появившись в 2018 году, эта модель совершила переворот в компьютерной лингвистике. Базовая версия модели долго предобучается, читая миллионы текстов и постепенно осваивая язык, а потом её можно дообучить на собственной прикладной задаче, например, классификации комментариев или выделении в тексте имён, названий и адресов. Стандартная версия BERT довольно толстая: весит больше 600 мегабайт, обрабатывает предложение около 120 миллисекунд (на CPU). В этом посте я предлагаю уменьшенную версию BERT для русского языка – 45 мегабайт, 6 миллисекунд на предложение. Она была получена в результате дистилляции нескольких больших моделей. Уже есть tinybert для английского от Хуавея, есть моя уменьшалка FastText'а, а вот маленький (англо-)русский BERT, кажется, появился впервые. Но насколько он хорош?

Читать далее
Total votes 57: ↑57 and ↓0+57
Comments17

Cross-nested ordered probit: мой первый разработческий проект, ML и эконометрика

Reading time13 min
Views4.3K

В далёком 2014 я ещё учился на экономиста, но уже очень мечтал уйти в анализ данных. И когда мне предложили выполнить мой первый платный разработческий проект для моего университета, я был счастлив. Проект заключался в написании кода эконометрической модели для пакета Stata. Стату я с тех пор люто возненавидел, но сам проект научил меня многому.

В этом посте я расскажу про Cross-Nested Ordered Probit, забавную модель для предсказания порядковых величин, покажу её код на PyTorch, и порассуждаю о различиях и сходствах машинного обучения и эконометрики.

Читать далее
Total votes 7: ↑6 and ↓1+5
Comments3

Культурные рекомендации: опыт московского хакатона

Reading time5 min
Views1.8K

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

Читать далее
Total votes 3: ↑3 and ↓0+3
Comments2

Как предсказать гипероним слова (и зачем). Моё участие в соревновании по пополнению таксономии

Reading time8 min
Views12K

Как может машина понимать смысл слов и понятий, и вообще, что значит — понимать? Понимаете ли вы, например, что такое спаржа? Если вы скажете мне, что спаржа — это (1) травянистое растение, (2) съедобный овощ, и (3) сельскохозяйственная культура, то, наверное, я останусь убеждён, что вы действительно знакомы со спаржей. Лингвисты называют такие более общие понятия гиперонимами, и они довольно полезны для ИИ. Например, зная, что я не люблю овощи, робот-официант не стал бы предлагать мне блюда из спаржи. Но чтобы использовать подобные знания, надо сначала откуда-то их добыть.


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


Читать дальше →
Total votes 25: ↑24 and ↓1+23
Comments5

Хакатон в Симферополе, Яндекс.Диалоги и законы чат-бото-техники

Reading time6 min
Views1.9K

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


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



На фотографии пара участников хакатона и затылок Сегаловича

Читать дальше →
Total votes 23: ↑12 and ↓11+1
Comments4

Как сжать модель fastText в 100 раз

Reading time12 min
Views21K

Модель fastText — одно из самых эффективных векторных представлений слов для русского языка. Однако её прикладная польза страдает из-за внушительных (несколько гигабайт) размеров модели. В этой статье мы показываем, как можно уменьшить модель fastText с 2.7 гигабайт до 28 мегабайт, не слишком потеряв в её качестве (3-4%). Спойлер: квантизация и отбор признаков работают хорошо, а матричные разложения — не очень. Также мы публикуем пакет на Python для этого сжатия и примеры компактной модели для русских слов.


Читать дальше →
Total votes 43: ↑43 and ↓0+43
Comments4

Создание stateful навыка для Алисы на serverless функциях Яндекс.Облака и Питоне

Reading time7 min
Views9.5K

Начнём с новостей. Вчера Яндекс.Облако анонсировало запуск сервиса бессерверных вычислений Yandex Cloud Functions. Это значит: ты пишешь только код своего сервиса (например, веб-приложения или чатбота), а Облако само создаёт и обслуживает виртуальные машины, где он запускается, и даже реплицирует их, если возрастает нагрузка. Думать вообще не надо, очень удобно. И плата идёт только за время вычислений.


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


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


image
Читать дальше →
Total votes 10: ↑10 and ↓0+10
Comments8

Сэмплирование с температурой

Reading time3 min
Views4.3K

Недавно натолкнулся на вопрос в чате ODS: почему алгоритм, генерирующий текст буква-за-буквой, сэмплит буквы не из p (вектор вероятностей следующей буквы, предсказанный языковой моделью), а из p'=softmax(log(p)/t) (где t — это ещё какой-то непонятный положительный скаляр)?


Быстрый и непонятный ответ: t — это "температура", и она позволяет управлять разнообразием генерируемых текстов. А ради длинного и детального ответа, собственно, и написан этот пост.

Читать дальше →
Total votes 15: ↑15 and ↓0+15
Comments0

Создание простого разговорного чатбота в python

Reading time7 min
Views49K
Как вы думаете, сложно ли написать на Python собственного чатбота, способного поддержать беседу? Оказалось, очень легко, если найти хороший набор данных. Причём это можно сделать даже без нейросетей, хотя немного математической магии всё-таки понадобится.

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

Этот туториал подойдёт тем, кто уже немножко трогал пальцем Python, но не особо знаком с машинным обучением. Я намеренно не пользовался никакими nlp-шными библиотеками, чтобы показать, что нечто работающее можно собрать и на голом sklearn.



Читать дальше →
Total votes 30: ↑29 and ↓1+28
Comments20

How linear algebra is applied in machine learning

Reading time5 min
Views14K

When you study an abstract subject like linear algebra, you may wonder: why do you need all these vectors and matrices? How are you going to apply all this inversions, transpositions, eigenvector and eigenvalues for practical purposes?


Well, if you study linear algebra with the purpose of doing machine learning, this is the answer for you.


In brief, you can use linear algebra for machine learning on 3 different levels:


  • application of a model to data;
  • training the model;
  • understanding how it works or why it does not work.

drawing
Read more →
Total votes 49: ↑37 and ↓12+25
Comments39

Машинное обучение и экструдер полипропилена: история 3 места на хакатоне Сибура

Reading time7 min
Views12K
Хакатон "Цифровой завод", организованный Сибуром и AI Community, состоялся на прошлых выходных. Одна из двух задач хакатона была на тему predictive maintenance — нужно было предсказывать проблемы в работе экструдера. Её мы и решили. Рассказ сосредоточен в основном на data science'ной части решения, и о том, как нам удалось научиться неплохо прогнозировать довольно редкие события.


Читать дальше →
Total votes 25: ↑25 and ↓0+25
Comments11

Нужно ли бояться несбалансированности классов?

Reading time3 min
Views29K

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


Читать дальше →
Total votes 22: ↑19 and ↓3+16
Comments4
1

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity