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

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

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

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

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

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

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

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

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


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


            Читать дальше →
            • +23
            • 4,7k
            • 5
          • Хакатон в Симферополе, Яндекс.Диалоги и законы чат-бото-техники

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


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



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

              Читать дальше →
            • Как сжать модель fastText в 100 раз

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


                Читать дальше →
                • +43
                • 13,2k
                • 4
              • Создание stateful навыка для Алисы на serverless функциях Яндекс.Облака и Питоне

                • Tutorial

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


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


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


                image
                Читать дальше →
                • +10
                • 5,3k
                • 8
              • Сэмплирование с температурой

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


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

                  Читать дальше →
                • Создание простого разговорного чатбота в python

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

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

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



                  Читать дальше →
                • How linear algebra is applied in machine learning

                    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 →
                  • Машинное обучение и экструдер полипропилена: история 3 места на хакатоне Сибура

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


                      Читать дальше →
                    • Нужно ли бояться несбалансированности классов?

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


                        Читать дальше →
                        • +16
                        • 14,9k
                        • 4
                      • Нужно ли пытаться полюбить математику?

                          Математика позволяет достигать успеха: запускать ракеты, обучать AI, и так далее. Самыми качественными кадрами считаются выпускники математических специальностей. Молодые работники, студенты и школьники, которые не идеально решают тренировочные задачи, часто комплексуют по этому поводу. Такие люди обычно переживают, что, если бы они могли полюбить и понять математику, то их жизнь изменилась бы к лучшему, но им этого, увы, "не дано".


                          Объясняю, почему переживать и насиловать себя не надо.


                          Читать дальше →
                        • Как обучть мдль пнмть упртые скрщня

                            Недавно я натолкнулся на вопрос на Stackoverflow, как восстанавливать исходные слова из сокращений: например, из wtrbtl получать water bottle, а из bsktballbasketball. В вопросе было дополнительное усложнение: полного словаря всех возможных исходных слов нет, т.е. алгоритм должен быть в состоянии придумывать новые слова.


                            Вопрос меня заинтриговал, и я полез разбираться, какие алгоритмы и математика лежат в основе современных опечаточников (spell-checkers). Оказалось, что хороший опечаточник можно собрать из n-граммной языковой модели, модели вероятности искажений слов, и жадного алгоритма поиска по лучу (beam search). Вся конструкция вместе называется модель зашумлённого канала (noisy channel).


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


                            Читать дальше →
                          • Как я парсил Хабр, часть 1: тренды

                              Когда был доеден новогодний оливье, мне стало нечего делать, и я решил скачать себе на компьютер все статьи с Хабрахабра (и смежных платформ) и поисследовать.


                              Получилось несколько интересных сюжетов. Первый из них — это развитие формата и тематики статей за 12 лет существования сайта. Например, достаточно показательна динамика некоторых тем. Продолжение — под катом.


                              Читать дальше →
                            • Как мы участвовали в хакатоне М.Видео

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


                                Читать дальше →
                                • +16
                                • 8,4k
                                • 6
                              • Как понять, что ваша предсказательная модель бесполезна

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


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


                                image


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


                                Какие модели и для чего?


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

                                Читать дальше →
                                • +34
                                • 19,5k
                                • 5