Библиотека 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 для русского языка, нужны аннотированные тексты. Первым делом вспоминаем про данные конкурса 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.