• Stars
    star
    345
  • Rank 122,750 (Top 3 %)
  • Language
    C#
  • License
    Creative Commons ...
  • Created almost 7 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

My NLP datasets for Russian language

Русскоязычные 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 и может содержать некоторые артефакты.

Прочее

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

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

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

Корни слов

More Repositories

1

chatbot

Русскоязычный генеративный чатбот с профилем и фактами
Python
261
star
2

GrammarEngine

Грамматический Словарь Русского Языка (+ английский, японский, etc)
C++
75
star
3

rulemma

Лемматизатор для русскоязычных текстов
Python
41
star
4

MNIST_Boosting

Comparison of XGBoost, LightGBM and CatBoost on MNIST classification problem
Python
37
star
5

verslibre

Using transformers to generate Russian poetry
Python
33
star
6

rusyllab

Simple Python package for breaking Russian words into syllables
Python
28
star
7

rupostagger

Part-of-Speech Tagger for Russian language
Python
19
star
8

pushkin

Генеративные текстовые модели
Python
14
star
9

rutokenizer

Russian text segmenter and tokenizer
Python
14
star
10

LM-finetune

Код для файнтюна LM (rugpt, LLaMa, FRED T5) средствами transformers + deepspeed + LoRa
Python
13
star
11

StressModel

Neural model for prediction of stress position in Russian words
Python
11
star
12

paraphraser

Поэтический перефразировщик
Python
8
star
13

MLBootCampV

http://mlbootcamp.ru/round/12/sandbox/
Python
7
star
14

RussianDictionary

Russian Lexicon and Syntax Rules
Shell
7
star
15

CorpusSearch

Полнотекстовый поиск по текстовому корпусу с помощью Lucene.NET
C#
6
star
16

WordRepresentations

Сравнение нескольких способов представления слов для построения языковых моделей
Python
6
star
17

vector2text

Generate Russian text using GPT model given LaBSE text embedding vector
Python
4
star
18

ruword2tags

Морфологический анализатор слов для русского языка
Python
4
star
19

Word2Vec

Continuous word representation tools
Python
3
star
20

transcriber

Model to convert text to phonetic transcription and vice versa
Python
3
star
21

NGrams

Работа с n-граммами: сбор и использование для оценки текста
C#
3
star
22

LM-pretrain

Char-level language model pretraining code and scripts
Python
3
star
23

rupostagger2

Простая нейросетевая модель для частеречной разметки
Python
2
star
24

word2lemma

Эксперименты с лемматизацией
Python
2
star
25

word_embedders

Character-level autoencoder models for words
Python
2
star
26

word_is_noun

Binary classification of Russian wordforms using RNN/LSTM character language model
Python
1
star
27

math

Conversational data generator
Python
1
star
28

paraphrase_reranker

Paraphrase detection and reranking model
Python
1
star
29

NLP_Comp

Solutions for NLP competitions
Jupyter Notebook
1
star
30

ruchunker

NP chunker for Russian language
Python
1
star
31

MorphoRuEval2017

Part-of-speech tagger and lemmatizer for MorphoRuEval2017
Python
1
star
32

SentimentAnalysis

C# and Python tools and models for review sentiment analysis
PowerShell
1
star
33

MLBootCampIII

http://mlbootcamp.ru/championship/10/
Python
1
star
34

sent_embedders

Experiments with sentence embedding models
Python
1
star
35

QuoraQuestionPairs

Deep learning models for Kaggle NLP competition 'Quora Question Pairs'
Python
1
star