×

Анонс lang-uk: створюємо умови для повноцінної обробки україномовних текстів

[Про автора: Всеволод Дьомкін — Technical Lead в Grammarly, більше шести років працював викладачем в КПІ — читав курс «Операційні системи & Системне програмування» та інші. Брав участь в организації шести заходів TEDxKyiv]

Усім відомий анекдот про те, що коли програмісти прийдуть до влади, то замінять цілі міністерства на маленькі скрипти. Але не всі знають тих особистостей серед нас, які наближають цей день як можуть. Один з них — це Дмитро Чаплинський, який вже два роки є двигуном проекту «Канцелярська сотня» і за цей час доклав чимало зусиль для того, щоб випотрошити з української бюрократії якомога більше суспільно-корисних даних. Діяльність цієї ініціативи почалася зі спроб відновити пошреджені документи Курченка і Януковича і продовжилася проектом масового оцифрування декларацій українських чиновників, сайтом «Гарна хата» та ін.

За останній рік чи два відбулось безпрецедентне в історії України відкриття даних, які збирає і опрацьовує наша держава. Але це тільки початок. Державна машина, бізнес і суспільство в цілому оперує текстами як одиницею сенсу і комунікації. Опрацювання текстів природною мовою — так званою NLP — це міждисциплінарна галузь знань, яка збирає методи розв’язання задач аналізу і опрацювання таких текстів.

І всім, хто має стосунок до цього напряму, добре відомо, що принциповою умовою його розвитку є наявність даних (які в цьому домені звуться словниками та корпусами). Дані потрібні для того, щоб будувати на них моделі розмітки чи визначення структури текстів. Вони потрібні для того, щоб оцінювати якість і порівнювати між собою різні підходи і алгоритми. Вони потрібні дослідникам (лінгвістам), щоб з наукового погляду вивчати мову, її розвиток і особливості. А без якісної NLP-бази навряд чи вдасться розробити майбутні скрипти, які зможуть прозоро і ефективно виконувати роботу сучасних бюрократів.

Корпуси українських текстів

До останнього часу українська мова, на жаль, була обділена лінгвістичними даними. Не те, щоб зовсім нічого не було, але більшість робіт виконували в закритому режимі, який притаманний нашим старим науковим кадрам, тож отримати доступ до якісних корпусів навіть базового рівня майже нереально. Є думка, що для української немає сенсу займатись широкомасштабним створенням таких даних (яке, як правило, є недешевим задоволенням) і що немає ринку для україномовних NLP-програм. Можливо. Але варто згадати, що українська мова — № 16 за популярністю мова Вікіпедії і № 32 Інтернету. Іншими словами, попит на користування українською на письмі є, а те, наскільки він великий, ми зможемо визначити емпірично, замість того, щоб робити безпідставні припущення... :)

Втім, нещодавно ситуація з даними почала змінюватись. І, як і інші зміни в нашому суспільстві, її рушієм були зусилля купки волонтерів. Що виглядає цілком очікувано для індустрії розробки, де open source і пов’язане з ним волонтерство є усталеним і зрозумілим явищем. Отже, за останній рік справа створення відкритих даних для українського NLP зрушила з мертвої точки. Група лінгвістів, лідером якої є моя колега з Grammarly Мар’яна Романишин, почала збирати відкритий український корпус-мільйонник — і за рік їм вдалось накопичити вже майже 40% потрібних текстів. Разом з Андрієм Рисіним, який є основним мейнтейнером української версії проекту LanguageTool, вони зарелізили найповніший і дуже якісний відкритий граматичний словник, який був інтегрований як до самого LanguageTool, що зараз надає можливість непоганої перевірки правопису, граматики і стилістики українських текстів, так і в ElasticSearch/Lucene (в процесі релізу), pymorphy2 та в інші місця (для прикладу, його попередню версію використали в російському проекті ДісерНет, який шукає плагіат в наукових роботах і з яким пов’язаний останній скандал про виведення на чисту воду дружини колишнього міністра культури).

Останньою подією в цій сфері на сьогодні є реліз NER-анотації до половини наявних текстів зі згаданого корпусу-мільйонника. Цей проект ми реалізували разом з Дмитром Чаплинським і трьома анотувальниками всього лише за місяць, використовуючи краудсорсинг (чи то, як він каже, «колхозну») платформу Вулик, яку Дмитро розробив для автоматизації завдань, пов’язаних з використанням праці волонтерів. Загалом, ми обробили тексти приблизно на 200 тисяч токенів, в яких було проанотовано понад 6 тисяч NER-сутностей. Детальна інформація про корпус є на сторінці проекту на гітхабі.

Ба більше, на створених даних та корпусі української Вікіпедії ми натренували модель з використанням бібліотеки MITIE, яка одразу досягла досить гарної якості 75-80%. Іншими словами, даних виявилось достатньо, у всякому разі на поточний момент. У демо-режимі ця модель скоро буде доступна як веб-сервіс, який буде здатний робити також деякі інші корисні речі з опрацювання українських текстів: визначати мову тексту, робити його токенізацію та тегування частинами мови (без зняття омонімії).

Uber-анонс

Разом з анонсом цього корпусу ми хочемо оголосити про більш загальну ініціативу. Перші успіхи дають нам впевненість у тому, що швидкими темпами (максимум за кілька років) можна довести корпуси для української мови до досить пристойного рівня, співмірного з тим, що створено для російської, польської, турецької чи, навіть, німецької. У нас є велика перевага: ми йдемо вже протореним шляхом, маємо у своєму розпорядженні більш просунуті інструменти і можемо не повторювати помилок попередників. Головне, ми можемо створити повністю відкриті і загальнодоступні набори даних і уникнути пастки, в яку потрапило, наприклад, англійське NLP, для якого комерційне використання більшості наявних корпусів високої якості є або суттєво ускладненим, або взагалі неможливим.

Отже, ми вирішили об’єднати під одним дахом всі ці споріднені ініціативи — в рамках спільноти lang-uk, яка побудована на єдиних і простих принципах і буде займатися підтримкою наявних і розвитком нових проектів по збору українських корпусів та інших текстових даних. Ядром цієї спільноти є перелічені вище «активісти», а також певна кількість волонтерів. Звісно, це тільки початок, і ми відкриті до приєднання нових учасників, які поділяють наші принципи.

Насправді, роботи багато вже, а далі її буде ще більше. Це робота і для програмістів, і для лінгвістів, і для дослідників з аналітиками, і для анотувальників, і, може, ще для когось. Найближчим часом ми плануємо працювати над:
— Прискоренням і доведенням до завершення проекту створення українського корпусу-мільйонника;
— Завершенням роботи над моделями NER-анотації;
— Створенням набору мікросервісів для NLP-опрацювання українських текстів;
— Публікацією моделей векторного представлення слів (word2vec та інших);
— Розміткою корпусу-мільйонника частинами мови;
— Розміткою корпусу зв’язків між сутностями в тексті.

Після успішного завершення цих проектів на нас чекає ще більший беклог. Хоча, звісно, якісь події можуть вплинути як на пріоритизацію поточних ініціатив, так і на появу на нашому радарі нових планів.

І, головне, якщо вам цікаво долучитись, то ось декілька способів, як це можна зробити:
— Якщо у вас є якісь набори текстових даних українською, які ви хотіли б відкрити і опублікувати, — ми з радістю додамо їх до нашого проекту (а також організуємо процес роботи з ними, якщо це потрібно).
— Якщо вам для роботи чи інших цілей потрібно створити певний корпус чи покращити наявний, і ви готові зробити цю роботу публічно доступною — ми можемо обговорити і допомогти в таких проектах як своєю експертизою, так і роботою учасників спільноти (яка може бути як волонтерською, так і оплачуваною, але, в будь-якому разі, якісною).
— Якщо ви хочете допомогти своїми мізками і руками — welcome. Найкраще, якщо ви готові волонтерити, але під деякі проекти ми також будемо шукати фінансування.
— До речі, про фінансування — нам можна допомогти пожертвою.
— Нарешті, ви можете просто розповсюджувати інформацію про цю ініціативу та передавати її тим, хто може бути зацікавленим.

Коротше, для того, щоб завтра ми могли замінити окремі міністерства на невеликі скрипти, сьогодні треба зробити трохи брудної підготовчої роботи. ;)

Все про українське ІТ в телеграмі — підписуйтеся на канал DOU

👍ПодобаєтьсяСподобалось2
До обраногоВ обраному1
LinkedIn

Схожі статті




46 коментарів

Підписатись на коментаріВідписатись від коментарів Коментарі можуть залишати тільки користувачі з підтвердженими акаунтами.

Друзі, проєктові lang-uk виповнилося п’ять років, і тепер ми б хотіли зрозуміти, наскільки корисними є дані та інструменти в lang-uk, а також як розвивати цей проєкт надалі.

Якщо ви коли-небудь користувалися компонентами lang-uk, заповніть, будь ласка, цей короткий опитувальник: cutt.ly/6vCJYxJ

Дякуємо за кожну відповідь!

lang.org.ua/uk

У статті ви пишите, що британці мали клопіт з тим, що корпус не можна використовувати у коменційних цілях. У вас, на гіті, теж ліцензія, яка передбачає тільки некоменрійне використання. Що мені робити, якщо мені потрібні тексти для створення ігри зі словами? Чи можу я використовувати github.com/brown-uk/corpus

Вітаю, я думаю, найкраще звернутись з цим питанням до Василя Старко, який є головним упорядником корпусу: www.facebook.com/vasyl.starko

Я розраховував на публічну відповідь. За контакт дякую.

Анонс корпусу БрУК сучасної української мови
dou.ua/forums/topic/18088

Про проект і можливості, які він відкриває, у студії idealist.media розповів волонтер ГО «Канцелярська сотня» Дмитро Чаплінський:
www.facebook.com/.../videos/1721865301409025

Подивився я ваш ґіт. github.com/lang-uk/ua-gazetteers
«Назви стран та юрісдикцій»
«нормально працюючей української версії»

What the heck?

Є субтитри до кільканадцяти серій аніме власного перекладу та ще більше не власного. Потрібно?

Суперовий проект! Я готовий поділитися корпусами, викладеними на corpora.pp.ua, вони у вигляді вертикальних файлів, лематизовані й морфологічно розмічені автоматично. Контактуймо через FB.

П.С. На початку є ...

Системне программування
, то «програмування» має бути з одним м )
«програмування» має бути з одним м

Дякую, виправив.

цікаво, а як краще всього зв’язатися?

Я Вам у FB у друзі напросився. Моя пошта також i.g.danyluk на джимейлі.

«Ба більше, на створених даних та корпусі української Вікіпедії». Можна детальніше, які та як використовувалися тексти з вікіпедії? Якщо не помиляюся, в дампах вікіпедії нема plaintext`ових версій статей, а тільки у вікірозмітці.

gensim + підкручена токенізація та чистка для української.
github.com/...sim/corpora/wikicorpus.py

Якщо цікаво, можу скинути на гіст примірник плейн-тексту.

Не знаю чи актуально, але можна брати рішення з судових реєстрів. Там просто прорва тексту.

www.reyestr.court.gov.ua/Rules
Забороняється при роботі з БД:
здійснювати автоматичні або автоматизовані запити на пошук та копіювання («викачування») БД, що можуть призвести до наслідків, передбачених розділом XVI Кримінального кодексу України (злочини у сфері використання електронно-обчислювальних машин (комп’ютерів), систем та комп’ютерних мереж і мереж електрозв’язку).

Проте:
www.kmu.gov.ua/...k/cardnpd?docid=248573101
ПЕРЕЛІК наборів даних, які підлягають оприлюдненню у формі відкритих даних
...
Єдиний державний реєстр судових рішень

Так вони ж пишуть що граббити не можна якщо це зловживання, а ви в наукових цілях.
Більше того, я скажу що є інші сайти які здійснюють повнотекстовий пошук по базі, тобто копія в них є.

заборонено, проте, можно звернутись з запитом-проханням. Клопот з цим може й буде, проте, вважаю, що щось-да вийде.

ще можна взяти rada.gov.ua (тільки за цей місяць 300 документів-законопроектів)

Дякую вам
Ми тут фігачимо в перших рядах ось уже більше року
localize.drupal.org/...sc&order=Overall progress

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

Круто. Да прибудет с вами сила.

До речі, про фінансування — нам можна допомогти пожертвою.

Не знайшов про це детальнішої інформації, типу номера картки.

а вже є бажання перевести гроші?

У мене є таке бажання, правда поки що я не можу пообіцяти великих сум чи якоїсь регулярності. Але проект виглядає корисним і перспективним, тому йому хочеться якось допомогти, для багатьох фінансова допомога буде найлегшим способом.

Маю 950000 новин українською за останні 9 років, якщо потрібно пишіть приватно.

А які джерела?
Бо в нас так само є десь близько мільйона, а може й більше вже.

О, це цікаво, залийте кудись будь ласка.

Українські тексти Korrespondent — це точно не Google translate?

Там всяке буває :)
Але для пошуку згадок про політиків та установи згодиться.

Для embeddings також.

Ясно, це я згадав, що Сич (який раніше керував Корреспондентом, а тепер НВ), пише таке:

Ми вже півроку маємо готову цифрову онлайн-версію журналу українською, проте вона працює лише у тестовому режимі. Для її випуску нам потрібні хороші програмісти, адже ми хочемо зробити нову двомовну цифрову версію. На відміну від україномовного сайту, де тексти перекладають машини, для журналу це роблять люди.

Ну базову редактуру вони роблять, але проблема має місце, не буду сперечатися.

Але ж виникає інше питання. Якщо в нас доволі багато текстів такої якості in the wild, то може має сенс їх включати до корпусу так само?

Коли вже український стеммінг буде в NLTK?

Коли його хтось напише, власне.

так а взагалі український стемінг є хоча б де-небуть open source?

There are few amateur stemmers which support RU (and partly UA) languages. So far the more robust in my opinion is a stemmer from Michael Korobov (github.com/kmike/pymorphy2) although it can’t be used for the serious tasks in practice. Actually, because of the algorithm behind the stemming (see tartarus.org/...tin/PorterStemmer/def.txt ) it is almost not applicable for the slovenian languages unless you are trying yo do smth very primitive. This is why it is mostly applicable for such languages as English, Spanish, French and other ’not-complex’ languages. Probably you need to look into lemmatisation.

І толку, немає довіри до аматорських стеммінгів. NLTK фігню не прийматиме, тому чекаю на українську саме там.

В lucene прийняли український лематизувальник: issues.apache.org/jira/browse/LUCENE-7287

The LanguageTool stack is much better for Ukrainian than pymorphy2 - it uses much newer dictionary, has quite elaborate tokenization (with good abbreviation support), has good dynamic tagging support, and even some basic homonyms resolution. It's also quite fast.
github.com/brown-uk/nlp_uk has some demo scripts for tokenization and tagging.

Підписатись на коментарі