/NLP_Datasets

My NLP datasets for Russian language

Primary LanguageC#Creative Commons Zero v1.0 UniversalCC0-1.0

Русскоязычные NLP датасеты

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

Диалоги и обмены репликами

Диалоги с имиджборд - строго 18+, есть некоторое количество поломанных диалогов, так как отфильтровать их автоматически очень трудно:
часть 1 часть 2 часть 3 часть 4 часть 5 часть 6

Разметка реплик в этих диалогах оценками релевантности и специфичности, файл в формате jsonl, чтобы отбирать самые качественные диалоги:
часть 1 часть 2 часть 3 часть 4 часть 5 часть 6 часть 7 часть 8 часть 9 часть 10 часть 11 часть 12

Код для выполнения разметки: tinkoff_model_dialogues_scoring.py

Чтобы распаковать этот архив, нужно сначала объединить файлы в один:

cat chan_dialogues_scored.zip* > 1.zip

Затем распаковать его и получить 700 Мб json файл:

unzip 1.zip

Диалоги из анекдотов - около 90000 диалогов, собранных с разных развлекательных сайтов. Расширенная версия датасета с другим форматированием доступна тут inkoziev/jokes_dialogues.

Почищенные диалоги Cornell Movie Corpus - почищенные субтитры, много диалогов "с середины"

Диалоги из худлита (флибуста) - около 400 Мб после распаковки:
часть 1 часть 2

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

Пример кода для тренировки читчата на одном из вышеуказанных датасетов: train_chitchat_rugpt.py. В коде надо поправить пути к датасету и каталог, куда будет сохраняться модель, а также скорректировать batch_size.

Проверить натренированный читчат можно с помощью кода run_chitchat_query.py. Например, натренированный на "анекдотах" читчат для запроса "Дай денег в долг" выдаст примерно такие варианты ответа:

[1] -  Откуда у меня деньги?!
[2] -  А ты мне что, должен?
[3] -  А зачем?
[4] -  Что, опять?
[5] -  На себя и детей?
[6] -  У меня денег нет.
[7] -  Откуда у меня деньги?
[8] -  Нет.
[9] -  Не дам!
[10] -  Не дам!

Синтетические пары вопрос-ответ с арифметическими задачами: train test. Значительно расширенный вариант этого датасета с длинными диалогами можно найти в репозитории inkoziev/arithmetic.

Готовую модель генеративного читчата, обученного на части вышеперечисленных датасетов, можно найти здесь: https://huggingface.co/inkoziev/rugpt_chitchat

Перефразировки диалоговых реплик и строк стихотворений

Датасет доступен в репозитории inkoziev/paraphrases. Он используется для тренировки детектора перефразировок inkoziev/sbert_synonymy и для перефразировщика в проекте генеративной поэзии inkoziev/paraphraser.

Короткие предложения и словосочетания.

Датасеты используются для тренировки чат-бота. Они содержат короткие предложения, извлеченные из большого текстового корпуса, а также некоторые паттерны и словосочетания.

Шаблоны предложений с открытыми именными группами

В архиве templates.clause_with_np.100000.zip находится часть датасета с сэмплами следующего вида:

52669	есть#NP,Nom,Sing#.
25839	есть#NP,Nom,Plur#.
18371	NP,Masc,Nom,Sing#пожал#NP,Ins#.
17709	NP,Masc,Nom,Sing#покачал#NP,Ins#.

Первый столбец - частота. Всего было собрано примерно 21 миллион предложений.

Второй столбец содержит результат shallow parsing'а, в котором именные группы заменены подстановочными масками вида NP,тэги. Задается падеж, а также число и грамматический род в случаях, когда это необходимо для правильного согласования с глаголом. Например, запись NP,Nom,Sing описывает группу существительного в именительном падеже и единственном числе. Символ '#' используется как разделитель слов и чанков.

Словосочетания и неполные предложения

Архив PRN+PreposAdj+V.zip содержит сэмплы вида:

Я на автобус опоздаю
Я из автобуса пришел
Мы из автобуса вышли
Я из автобуса вышла
Я из автобуса видел
Я на автобусах езжу
Они на автобусах приезжают
Мы на автобусах объездили

Архив adv+verb.zip содержит пары наречие+глагол в личной форме:

ПРЯМО АРЕСТОВАЛИ
ЛИЧНО атаковал
Немо атаковал
Ровно атаковала
Сегодня АТАКУЕТ
Ближе аттестует
Юрко ахнул

Архив adj+noun.zip содержит сэмплы типа:

ПОЧЕТНЫМ АБОНЕНТОМ
Вашим абонентом
Калининским абонентом
Калининградских аборигенов
Тунисских аборигенов
Байкальских аборигенов
Марсианских аборигенов
Голландские аборигены

Более новая и расширенная версия этого набора, собранная другим способом, находится в архиве patterns.adj_noun.zip. Этот датасет имеет выглядит так:

8	смутное	предчувствие
8	городская	полиция
8	среднеазиатские	государства
8	чудесное	средство
8	<<<null>>>	претендентка
8	испанский	король

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

Архив prep+noun.zip содержит такие паттерны:

У аборигенных народов
У аборигенных кобыл
Из аборигенных пород
С помощью аборигенов
На аборигенов
Для аборигенов
От аборигенов
У аборигенов

Архив patterns.noun_gen.zip содержит паттерны из двух существительных, из которых второе в родительном падеже:

4	французские	<<<null>>>
4	дворец	фестивалей
4	названье	мест
4	классы	вагонов
4	доступность	магазина

Обратите внимание, что если в исходном предложении у генитива были подчиненные прилагательные или PP, то они в этом датасете будут удалены. Токен <<>> в столбце генитива обозначает ситуацию, когда первое существительное употреблено без генитива. Эти записи упрощают маргинализацию частот.

Архив patterns.noun_np_gen.zip содержит паттерны из существительного и полного правого генитива:

окно браузера
течение дня
укус медведки
изюминка такой процедуры
суть декларации
рецепт вкусного молочного коктейля
музыка самого высокого уровня

Архив S+V.zip содержит образцы такого вида:

Мы абсолютно не отказали.
Мужчина абсолютно не пострадал.
Они абсолютно совпадают.
Михаил абсолютно не рисковал.
Я абсолютно не выспалась.
Они абсолютно не сочетаются.
Я абсолютно не обижусь...

В архиве S+V+INF.zip находятся такие образцы:

Заславский бахвалился превратить
Ленка бегает поспать
Она бегает умываться
Альбина бегает мерить
Вы бегаете жаловаться
Димка бегал фотографироваться

Архив S+V+INDOBJ.zip содержит автоматически собранные паттерны подлежащее+глагол+предлог+существительное:

Встревоженный аббат пошел навстречу мэру.
Бывший аббат превратился в настоятеля.
Старый Абдуррахман прохаживался возле дома.
Лопоухий абориген по-прежнему был в прострации.
Высокий абориген вернулся с граблями;
Сморщенный абориген сидел за столиком.

В архиве S+V+ACCUS.zip находятся сэмплы такого вида:

Мой агент кинул меня.
Ричард аккуратно поднял Диану.
Леха аккуратно снял Аленку...
Они активируют новые мины!
Адмирал активно поддержал нас.

Архив S+V+INSTR.zip содержит сэмплы:

Я вертел ими
Они вертели ими
Вы вертели мной
Он вертит нами
Она вертит тобой
Она вертит мной
Он вертит ими
Она вертит ими

Архив S+INSTR+V.zip содержит такие сэмплы:

Я тобой брезгую
Они ими бреются
Они ими вдохновляются
Мы ими вертим
Она тобой вертит
Он мной вертит
Он ими вертит

Остальные сэмплы - законченные предложения. Для удобства тренировки диалоговых моделей эти данные разбиты на 3 группы:

Предложения с глаголом в 1-м лице единственного числа

Я только продаю!
Я не курю.
Я НЕ ОТПРАВЛЯЮ!
Я заклеил моментом.
Ездил только я.

Предложения с глаголом в 2-м лице единственного числа

Как ты поступишь?
Ты это читаешь?
Где ты живешь?
Док ты есть.
Ты видишь меня.

Предложения с подлежащим-существительным и глаголом в 3-м лице

Фонарь имел металлическую скобу.
Щенок ищет добрых хозяев.
Массажные головки имеют встроенный нагрев
Бусины переливаются очень красиво!

Предложения в датасетах facts4_1s.txt, facts5_1s.txt, facts5_2s.txt, facts4.txt, facts6_1s.txt, facts6_2s.txt отсортированы с помощью кода sort_facts_by_LSA_tSNE.py. Идея сортировки следующая. Для предложений в файле сначала выполняем LSA, получая векторы длиной 60 (см. константу LSA_DIMS в коде). Затем эти векторы встраиваются в одномерное пространство с помощью t-SNE, так что в итоге для каждого предложения получается действительное число, такое, что декартово-близкие в LSA-пространстве предложения имеют небольшую разность этих tsne-чисел. Далее сортируем предложения согласно t-SNE значения и сохраняем получающийся список.

Предложения в остальных файлах отсортированы программой sort_samples_by_kenlm.py в порядке убывания вероятности. Вероятность предложения получается с помощью предварительно обученной 3-грамной языковой модели KenLM.

Отдельно выложен файл questions_2s.txt с вопросами, содержащими финитный глагол в форме 2 лица единственного числа. Эти вопросы собраны из большого корпуса с текстами, наскрапленными с форумов, субтитрами и так далее. Для удобства сэмплы отсортированы по финитному глаголу:


Берёшь 15 долларов ?
Берёшь денёк на отгул?
Берёшь отпуск за свой счёт?
Берёшь с собой что-нибудь на букву «К»?


Беспокоишься за меня?
Беспокоишься из-за Питера?
Беспокоишься из-за чего?

Вопросы отобраны автоматически с помощью POS Tagger'а и могут содержать небольшое количество ошибочных сэмплов.

Разрешение анафоры (Rucoref-2015)

Задача и датасет описаны на официальной странице соревнования. Исходный датасет, предоставленный организаторами, доступен по ссылке. С помощью скрипта extract_anaphora.py были раскрыты анафоры, в результате чего получился более простой для тренировки чатбота датасет. Например, фрагмент данных:

1	159	Кругом	кругом	R  
1	166	она	она	P-3fsnn	одинокую дачу  
1	170	была	быть	Vmis-sfa-e  
1	175	обнесена	обнесена	Vmps-sfpsp  
1	184	высоким	высокий	Afpmsif  
1	192	забором	забор	Ncmsin  

Видно, что местоимение "она" раскрывается в словосочетание "одинокая дача". Приведение раскрытого словосочетания к правильной грамматической форме оставлено для следующего этапа.

Ударения

Упакованный tsv файл.

Данные собраны для решения задачи конкурса ClassicAI. Использованы открытые данные - Википедия и Викисловарь. В случаях, когда ударение известно только для одной нормальной формы слова (леммы), я использовал таблицы словоизменения в грамматическом словаре и генерировал записи с отметкой ударности. При этом подразумевается, что позиция ударения в слове не меняется при его склонении или спряжении. Для некоторого количества слов в русском языке это не так, например:

р^еки (именительный падеж множественное число)
рек^и (родительный падеж единственное число)

В таких случаях в датасете будет один из вариантов ударения.

Статистика употребляемости слов в группах по 2, 3 и 4 слова

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

Сэмплы со сменой грамматического лица

Пары предложений в этих сэмплах могут быть полезны для тренировки моделей в составе чат-бота. Данные выглядят так:

Я часто захожу !	ты часто заходишь !
Я сам перезвоню .	ты сам перезвонишь .
Я Вам перезвоню !	ты Вам перезвонишь !
Я не пью .	ты не пьешь .

В каждой строке находятся два предложения, отделенные символом табуляции.

Вопросы и ответы для чат-ботов

Датасеты сгенерированы автоматически из большого корпуса предложений.

Триады "предпосылка-вопрос-ответ" для предложений длиной 3 слова
Триады "предпосылка-вопрос-ответ" для предложений длиной 4 слова

Пример данных в вышеуказанных файлах:

T: Собственник заключает договор аренды
Q: собственник заключает что?
A: договор аренды

T: Спереди стоит защитное бронестекло
Q: где защитное бронестекло стоит?
A: спереди

Каждая группа предпосылка-вопрос-ответ отделена пустыми строками. Перед предпосылкой стоит метка T:, перед вопросом метка Q:, перед ответом метка A:

Леммы

Датасет с леммами

В архиве - список словоформ и их лемм, взятый из Грамматического Словаря Русского Языка. Некоторое количество (несколько процентов) слов имеют неоднозначную лемматизацию, например РОЙ - глагол РЫТЬ или существительное РОЙ. В таких случаях нужно учитывать контекст слова. К примеру, так работает библиотека для лемматизации rulemma.

NP chunking

Датасет с разметкой

Датасет содержит предложения, в которых выделены NP-чанки. Первое поле в каждой записи содержит метку принадлежности слова:

0 - не принадлежит NP-чанку
1 - начало NP-чанка
2 - продолжение NP-чанка

Разметка получена автоматической конвертацией из dependencies и может содержать некоторые артефакты.

Прочее

Перестановочные перефразировки

Частоты слов с учетом частей речи

Приведение слов к нейтральной форме "штучка-штука"

Корни слов