Pull to refresh
195
0
Александр Кукушкин @alexanderkuk

Лаборатория анализа данных Александра Кукушкина

Send message

Проект Natasha. Набор качественных открытых инструментов для обработки естественного русского языка (NLP)

Reading time34 min
Views88K
Два года назад я писал на Хабр статью про Yargy-парсер и библиотеку Natasha, рассказывал про решение задачи NER для русского языка, построенное на правилах. Проект хорошо приняли. Yargy-парсер заменил яндексовый Томита-парсер в крупных проектах внутри Сбера, Интерфакса и РИА Новостей. Библиотека Natasha сейчас встроена в образовательные программы ВШЭ, МФТИ и МГУ.

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

Для новостных статей качество на всех задачах сравнимо или превосходит существующие решения. Например с задачей NER Natasha справляется на 1 процентный пункт хуже, чем Deeppavlov BERT NER (F1 PER 0.97, LOC 0.91, ORG 0.85), модель весит в 75 раз меньше (27МБ), работает на CPU в 2 раза быстрее (25 статей/сек), чем BERT NER на GPU.

В проекте 9 репозиториев, библиотека Natasha объединяет их под одним интерфейсом. В статье поговорим про новые инструменты, сравним их с существующими решениями: Deeppavlov, SpaCy, UDPipe.

Total votes 57: ↑55 and ↓2+53
Comments25

Yargy-парсер и библиотека Natasha. Извлечения структурированной информации из текстов на русском языке

Reading time12 min
Views83K
В 2020 году библиотека Natasha значительно обновилась, на Хабре опубликована статья про актуальную версию. Чтобы использовать инструменты, описанные в этом тексте, установите старую версию библиотеки pip install natasha<1 yargy<0.13.

Раздел про Yargy-парсер актуален и сейчас.


Есть стандартная задача извлечения именованных сущностей из текста (NER). На входе текст, на выходе структурированные, нормализованные объекты, например, с именами, адресами, датами:



Задача старая и хорошо изученная, для английского языка существует масса коммерческих и открытых решений: Spacy, Stanford NER, OpenNLP, NLTK, MITIE, Google Natural Language API, ParallelDots, Aylien, Rosette, TextRazor. Для русского тоже есть хорошие решения, но они в основном закрытые: DaData, Pullenti, Abbyy Infoextractor, Dictum, Eureka, Promt, RCO, AOT, Ahunter. Из открытого мне известен только Томита-парсер и свежий Deepmipt NER.

Я занимаюсь анализом данных, задача обработки текстов одна из самых частых. На практике оказывается, что, например, извлечь имена из русского текста совсем непросто. Есть готовое решение в Томита-парсере, но там неудобная интеграция с Python. Недавно появилось решение от ребят из iPavlov, но там имена не приводятся к нормальной форме. Для извлечения, например, адресов («ул. 8 Марта, д.4», «Ленинский проезд, 15») открытых решений мне не известно, есть pypostal, но он чтобы парсить адреса, а не искать их в тексте. C нестандартными задачами типа извлечения ссылок на нормативные акты («ст. 11 ГК РФ», «п. 1 ст. 6 Закона № 122-ФЗ») вообще непонятно, что делать.

Год назад Дима Веселов начал проект Natasha. С тех пор код был значительно доработан. Natasha была использована в нескольких крупных проектах. Сейчас мы готовы рассказать о ней пользователям Хабра.
Natasha — это аналог Томита-парсера для Python (Yargy-парсер) плюс набор готовых правил для извлечения имён, адресов, дат, сумм денег и других сущностей.
В статье показано, как использовать готовые правила из Natasha и, самое главное, как добавлять свои с помощью Yargy-парсера.
Читать дальше →
Total votes 87: ↑86 and ↓1+85
Comments33

1 000 000 жилых домов России

Reading time2 min
Views68K
Есть прекрасный сайт www.reformagkh.ru. На нём можно найти, управляющую компанию, закреплённую за домом, сколько денег, на что тратится и всё такое. Но кроме этого можно узнать разные интересные вещи о нашей стране в целом, например, для каждого дома на сайте указана дата его постройки, поэтому можно посмотреть, как строилась Москва с 1900 года:



Ещё более эпичная картинка получается, если посмотреть на Россию целиком:


Читать дальше →
Total votes 86: ↑78 and ↓8+70
Comments118

Анализ результатов выборов в Госдуму. Готовимся к голосованию 2016 года

Reading time3 min
Views35K
Выборы в Государственную думу только осенью, но мы уже начинаем готовиться. Если повторится история 2011 года, будет очень интересно. Наверное, многие помнят, как сразу после тех выборов появилась куча статистических исследований, намекающих на фальсификации и как все узнали, как выглядит распределение Гаусса. Я хотел бы рассказать, где искать данные про выборы и как с ними работать. Кроме хорошо известных графиков я покажу некоторые другие прикольные картинки, которых раньше в паблике не видел. Так, например, выглядит распределение голосов за Единую Россию по стране, хорошо видны регионы с максимальной поддержкой партии власти — Северный Кавказ и Татарстан:


Есть такой замечательный сайт izbirkom.ru. Его здесь даже недавно упоминали в контексте, что, типа, на него потратили слишком много денег. Но лично мне не жалко, сайт прекрасный:

Читать дальше →
Total votes 68: ↑60 and ↓8+52
Comments114

Хабр умирает?

Reading time2 min
Views108K
Я люблю писать тексты по мотивам проектов, которыми занимаюсь. За последний год я разместил на Хабре больше 20 постов. Меня постоянно удивляло, как мало толковых комментариев удаётся здесь получить. Просмотров много, а комментариев мало и большинство не по делу. Недавно я начал замечать, натыкаясь на старинные посты за 2012, 2013 годы, что в них обсуждение, как будто, более содержательное. Решил проверить это количественно. Скачал инфу по всем постам за все годы и построил несколько простых графиков. То что я увидел меня удивило и даже немного испугало. Решил разместить наблюдения здесь, чтобы проверить правильные ли я делаю выводы и всё ли учёл.

Для всех опубликованных на Хабре постов я собрал даты публикаций, число просмотров, число лайков и дислайков, число звёздочек и комментариев, список хабов и названия блогов компаний. В ходе прокачки узнал, что число плюсиков и минусиков может быть дробным и даже отрицательным, пост может быть опубликовал в блоги нескольких компаний и может не иметь автора. Если что, таблицу можно скачать из репозитория: github.com/alexanderkuk/analyze-habr/blob/master/data/posts.csv



Первым делом я посмотрел как менялось общее число постов со временем. Оно перестало расти в 2013 и немного падает с 2014, что уже немного тревожно:



Потом я построил такой же график для суммарного числа просмотров и испугался. С 2014 оно упало в 3.5 раза:


Это серьёзное утверждение, поэтому я решил свериться с Similarweb.
Читать дальше →
Total votes 331: ↑311 and ↓20+291
Comments802

Мониторинг выполнения задач в IPython Notebook

Reading time2 min
Views36K
Хотел бы поделиться простым, но полезным инструментом. Когда много работаешь с данными, часто возникают примитивные, но долгие операции, например: «скачать 10 000 урлов», «прочитать файл на 2Гб, и что-то сделать с каждой строчкой», «распарсить 10 000 html-файлов и достать заголовки». Долго смотреть в зависший терминал тревожно, поэтому долгое время я использовал следующий гениальный код:
def log_progress(sequence, every=10):
    for index, item in enumerate(sequence):
        if index % every == 0:
            print >>sys.stderr, index,
        yield item


Эта функция прекрасна, больше года она кочевала у меня из задачи в задачу. Но недавно я заметил в стандартной поставке Jupyter виджет IntProgress и понял, что пора что-то менять:

Читать дальше →
Total votes 42: ↑39 and ↓3+36
Comments11

Решение головоломки Галакуб на Питоне

Reading time9 min
Views31K
На новый год купил племяннику головоломку Галакуб. Задача собрать из разных деталей куб размером 4х4х4. Суммарный объём деталей, как раз, 4х4х4. Прежде, чем дарить надо было собрать головоломку. Красивое симметричное решение нашлось достаточно быстро. Но стало интересно единственное это решение или нет. Интуиция подсказывала, что единственное, но хотелось проверить.


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

Код получился на удивление красивый и понятный. Его удобно объяснять. Может быть, текст будет полезен, например, изучающим Питон.
Читать дальше →
Total votes 51: ↑47 and ↓4+43
Comments31

Анализ резюме с HeadHunter. Кто сколько зарабатывает и в каких отраслях работает

Reading time11 min
Views98K
Недавно, на хакатоне от Petamelon нам в руки попал датасет с ~6 000 000 резюме с НН. Там, естественно, не было никаких персональных данных и контактов, но было много других интересных вещей: ожидаемая зарплата, возраст, пол, примерный адрес, образование и индустрии, в которых человек ищет работу. Было решено попробовать использовать эти данные в нашем проекте про выбор школ. Идея заключалась в том, чтобы определить в каких индустриях работают выпускники школ и сколько примерно зарабатывают. Но я, конечно, не удержался и построил кучу других бесполезных, но прикольных таблиц и графиков.

Распределение резюме по возрасту имеет интересную форму и как будто разделено на две части: до окончания института и после:


В Москве с возрастом ожидаемая зарплата выходит на плато в ~50 000 рублей:

Читать дальше →
Total votes 119: ↑106 and ↓13+93
Comments66

Исследование результатов ЕГЭ, ГИА и олимпиад для московских школ. Из каких школ в какие ВУЗы поступают

Reading time4 min
Views33K
Месяц назад я писал про наше участие в хакатоне по открытым данным.

После хакатона мы не остановились на достигнутом, как это обычно бывает, а продолжили работу. У нас на руках оказались данные, к которым раньше имели доступ, наверное, только сотрудники Министерства образования: результаты ГИА и победы на олимпиадах за 2014-2015 год для 90% московских школ. Для 55% школ удалось собрать данные по ЕГЭ за 2015 год. Прокачали все аккаунты московских школьников в Контакте, посмотрели, какие ВУЗы они указывают у себя в профайлах после окончания.

Естественно, было интересно поизучать такой датасет. Сначала тривиальные вещи, о которых люди из образования, наверное, хорошо знают:
  • Баллы по ЕГЭ по гуманитарным предметам выше, чем по техническим. История — исключение;
  • Естественно-научные дисциплины посередине.


Читать дальше →
Total votes 40: ↑39 and ↓1+38
Comments31

Тысяча и один блистер. Поиск лекарств с завышенной ценой

Reading time3 min
Views41K
Недавно Минздрав выложил таблицу с предельными ценами на жизненно необходимые лекарства, я неслабо заморочился и проверил как часто эти пределы в Москве превышаются.


Читать дальше →
Total votes 98: ↑94 and ↓4+90
Comments174

Как я участвовал в конкурсе Сбербанка про предсказание оттока клиентов

Reading time4 min
Views33K
В рамках ICBDA 2015 Сбербанк проводил конкурс про предсказание оттока своих клиентов. Я неслабо заморочился по этому поводу, ничего не выиграл и тем не менее хотел бы описать процесс решения.

Читать дальше →
Total votes 38: ↑36 and ↓2+34
Comments49

Карта дождей

Reading time2 min
Views62K
Я часто езжу на велосипеде и мотоцикле, поэтому вопрос «а будет ли дождь» беспокоит меня достаточно часто. Как оказалось, Центральная Аэрологическая Обсерватория регулярно выкладывает у себя на сайте снимки с метеорологических радиолокаторов. Чтобы ими пользоваться не хватает двух вещей: возможности приблизить карту и посмотреть как двигались облака за последний час. Если добавить эти две фичи, получается полезная штука:

Плохие новости: Росгидромет запретил ЦАО публиковать данные в реальном времени, теперь они доступны с задержкой в 24 часа. Ставьте лайки, возможно, получится в каком-то виде получить актуальные данные обратно.
Ничоси, про это даже петиция есть — "Вернуть открытый доступ снимков ДМРЛ (радары)". И в Росгидромет уже письма писали.
Читать дальше →
Total votes 105: ↑101 and ↓4+97
Comments114

Поиск похожих групп и пабликов Вконтакте

Reading time5 min
Views56K
На днях удалось провернуть интересную штуку. Для всех групп Вконтакте с числом подписчиков от 5000 до 10 000 (~100 000 групп) был построен полный граф, в котором веса рёбер равнялись пересечению аудиторий групп.


Читать дальше →
Total votes 32: ↑29 and ↓3+26
Comments34

Анализ звонков в колл-центры

Reading time3 min
Views7K
Для проверки технологии я записал несколько обращений в разные колл-центры. Дальше они будут фигурировать под кодовыми названиями: water, mosenergo, rigla, transaero и worldclass.


Первым делом нужно разбить запись на реплики...
Total votes 7: ↑4 and ↓3+1
Comments2

Information

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