Проект Natasha

Corus — коллекция русскоязычных NLP-датасетов

Библиотека Corus — часть проекта Natasha, коллекция ссылок на публичные русскоязычные NLP-датасеты + Python-пакет с функциями-загрузчиками:

>>> from corus import load_lenta

# Находим в реестре Corus ссылку на Lenta.ru, загружаем:
# wget https://github.com/yutkin/Lenta.Ru-News-Dataset/...

>>> path = 'lenta-ru-news.csv.gz'
>>> records = load_lenta(path)  # 2ГБ, 750K articles
>>> next(records)

LentaRecord(
    url='https://lenta.ru/news/2018/12/14/cancer/',
    title='Названы регионы России с\xa0самой высокой ...
    text='Вице-премьер по социальным вопросам Татьяна ...
    topic='Россия',
    tags='Общество'
)

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

Примеры

Корпус новостных статей

Хотим обучить языковую модель на новостных статьях, нужно много текстов. Первым приходит в голову новостной срез датасета Taiga (~1ГБ). Многие знают про дамп Lenta.ru (2ГБ). Остальные источники найти сложнее. В 2019 году на Диалоге проходил конкурс про генерацию заголовков, организаторы подготовили дамп РИА Новостей за 4 года (3.7ГБ). В 2018 году Юрий Бабуров опубликовал выгрузку с 40 русскоязычных новостных ресурсов (7.5ГБ). Волонтёры из ODS делятся архивами (7ГБ), собранными для проекта про анализ новостной повестки.

В реестре Corus ссылки на эти датасеты помечены тегом «news», для всех источников есть функции-загрузчики: load_taiga_*, load_lenta, load_ria, load_buriy_*, load_ods_*.

NER

Хотим обучить NER для русского языка, нужны аннотированные тексты. Первым делом вспоминаем про данные конкурса factRuEval-2016. У разметки есть недостатки: свой сложный формат, спаны сущностей пересекаются, есть неоднозначная категориям «LocOrg». Не все знают про коллекцию Named Entities 5 наследницу Persons-1000. Разметка в стандартном формате, спаны не пересекаются, красота! Остальные три источника известны только самым преданным фанатам русскоязычного NER. Напишем на почту Ринату Гарееву, приложим ссылку на его статью 2013 года, в ответ получим 250 новостных статей с помеченными именами и организациями. В 2019 году проводился конкурс BSNLP-2019 про NER для славянских языков, напишем организаторам, получим ещё 450 размеченных текстов. В проекте WiNER придумали делать полуавтоматическую разметку NER из дампов Wikipedia, большая выгрузка для русского доступна на Github.

Ссылки и функции для загрузки в реестре Corus: load_factru, load_ne5, load_gareev, load_bsnlp, load_wikiner.

Коллекция ссылок

Перед тем как обзавестить загрузчиком и попасть в реестр, ссылки на источники копятся в разделе Issues. В коллекции 30 датасетов: новая версия Taiga, 568ГБ русского текста из Common Crawl, отзывы c Banki.ru и Auto.ru. Приглашаем делиться находками, добавлять ссылки в Issues.

Функции-загрузчики

Код для простого датасета легко написать самому. Дамп Lenta.ru оформлен грамотно, реализация простая. Taiga состоит из ~15 миллионов CoNLL-U-файлов, запакованных в zip-архивы. Чтобы загрузка работала быстро, не использовала много памяти и не угробила файловую систему, нужно заморочиться, аккуратно на низком уровне реализовать работу с zip-файлами.

Для 35 источников в Python-пакете Corus есть функции-загрузчики. Интерфейс доступа к Taiga не сложнее, чем к дампу Lenta.ru:

>>> from corus import load_taiga_proza_metas, load_taiga_proza

>>> path = 'taiga/proza_ru.zip'
>>> metas = load_taiga_proza_metas(path)
>>> records = load_taiga_proza(path, metas)
>>> next(records)

TaigaRecord(
    id='20151231005',
    meta=Meta(
        id='20151231005',
        timestamp=datetime.datetime(2015, 12, 31, 23, 40),
        genre='Малые формы',
        topic='миниатюры',
        author=Author(
            name='Кальб',
            readers=7973,
            texts=92681,
            url='http://www.proza.ru/avtor/sadshoot'
        ),
        title='С Новым Годом!',
        url='http://www.proza.ru/2015/12/31/1875'
    ),
    text='...Искры улыбок...\n... затмят фейерверки..\n...
)

Приглашаем пользователей делать Pull request, присылать свои функции-загрузчики, короткая инструкция в репозитории Corus.

Использование