Релокейт-опрос 2017 (для тех, кто уже уехал). Собрано более 1500 анкет.
×Закрыть

DOU Проектор: словник ВЕСУМ та інші пов’язані засоби NLP для української мови

У рубриці DOU Проектор всі охочі можуть презентувати свій продукт (як стартап, так і ламповий pet-проект). Якщо вам є про що розповісти — запрошуємо взяти участь. Якщо ні — можливо, серія надихне на створення власного made in Ukraine продукту. Питання і заявки на участь надсилайте на editors@dou.ua.

Ідея

Всі ми шукаємо інформацію в пошукових системах, і деякі з них видають дуже якісні результати. Однією з умов якісного пошуку в текстових масивах є наявність інформації про відмінювання. Скажімо, на запит «живий та легітимний» пошукова система може видати результат із фразою «живого та легітимного».

Добре, коли комерційна (закрита) система вміло працює з українською мовою, але є багато застосувань, де використати комерційний двигун неможливо. Тут на допомогу приходять відкриті програмні засоби опрацьовування природних мов (NLP). Для популярних мов таких засобів, включно з відкритим ПЗ, досить багато. Для української ж до недавнього часу засобів було обмаль.

Ідея полягає в створенні відкритих проектів базового аналізу українських текстів, на яких можна будувати складні рішення NLP для української мови.

Команда

Андрій Рисін — програміст, засновник проекту ВЕСУМ;

Василь Старко — лінгвіст, кандидат філологічних наук, доцент Східноєвропейського національного університету ім. Лесі Українки, перекладач;

Дмитро Чаплинський — програміст, співзасновник ініціативи lang-uk;

Команда БрУК — у створенні словника також брали участь багато учасників проекту побудови Браунського корпусу української мови (див. r2u.org.ua/corpus).

Реалізація

Словник

github.com/brown-uk/dict_uk

Основою більшості засобів NLP є словник тегів частин мови (англ. POS tag dictionary). Такий словник містить дані про відмінювання слів та має відповідні теги для кожної форми слова. Скажімо, слово різав матиме базову форму (лему) різати і теги дієслова минулого часу, однини, чоловічого роду.

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

Великий електронний словник української мови (ВЕСУМ) бере початок з проекту ispell-uk, який в 90-х роках створили декілька ентузіастів для перевірки орфографії української мови у відкритій ОС Linux. Багато років цей словник мав єдину функцію — перевіряти орфографію текстів. Але декілька років тому в інший відкритий проект, програму перевірки граматики та стилю LanguageTool, було додано модуль української мови і стало зрозуміло, що для граматичного аналізу потрібно більше інформації: зокрема важливо знати зв’язок між лемою і словоформами, а також мати інформацію про те, що це за словоформа. Хоч двигун ispell мав базову підтримку відмінювання слів, повноцінна підтримка для української потребувала іншого підходу, тож було створено новий проект словника, де для кожної словоформи додано лему та теги.

До проекту долучилася команда створення відкритого корпусу української мови БрУК. Але навіть для досвідчених лінгвістів багато питань, які поставали перед проектом, стали неабияким викликом. Робота зайняла значно більше часу, ніж очікували, з багатьох причин:

  • відкритої інформації про парадигми українських слів не існувало;
  • наявні орфографічні словники містили помилки та суперечили один одному;
  • словники не встигали за розвитком мови;
  • засади парадигм, запропоновані в теоретичних працях з мовознавства, не завжди відповідали практичній орієнтації NLP.

Під час створення ВЕСУМ розробники використовували два основні джерела: «Граматичний словник української мови» з Лінгвістичного порталу та «Словники України» онлайн.

Наразі маємо унікальний проект, який:

  • налічує понад 288 тис. лем і постійно поповнюється;
  • містить інформацію про відмінювання слів;
  • подає нерекомендовані слова (активні дієприкметники, часто вживані невдалі кальки тощо) та заміну для них;
  • охоплює абревіатури та скорочення;
  • містить інформацію про деякі альтернативні правописні норми (дає змогу аналізувати тексти, написані не за чинним правописом, — це корисно, адже низка видавництв та медій користуються альтернативним написанням слів);
  • має велику базу власних імен (зокрема українських імен, по батькові та прізвищ, неукраїнських імен та прізвищ, українських та закордонних топонімів тощо);
  • синхронізований з КОАТУУ, зокрема містить назви, що з’явилися після декомунізації;
  • має дуже компактну систему позначення відмінювання та тегів для слів, що дає змогу легко додавати нові слова, групувати наявні тощо;
  • містить інформацію про деякі рідкісні та розмовні форми, наприклад, нестягнені форми прикметників (гарная) та розмовну форму інфінітиву (поїхать);
  • є відкритим проектом (розміщений на GitHub), тож кожен може долучитися до вдосконалення та використовувати його в своїй роботі.

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

Модуль NLP та перевірки граматики

Український модуль проекту LanguageTool.

Щоб якісно аналізувати текст, окрім словника тегів потрібно мати програмні засоби, що спочатку готують текст для тегування, а потім його тегують і проводять післяоброблювання.

Хоча ВЕСУМ є відкритим, загальним словником і має потенційно необмежену сферу застосування, він народився з потреб українського модуля LanguageTool, тому для аналізу текстів української мови він найкраще працює разом з аналізатором LanguageTool.

LanguageTool — відкритий програмний засіб для перевірки граматики та стилю, що підтримує понад 25 мов. Декілька років тому було додано модуль української мови, що його можна також використовувати для аналізу текстів.

Розвиток ВЕСУМ й українського аналізатора в LT вже декілька років йдуть разом в ітераційній послідовності, створюючи синергетичний ефект. Будь-які зміни в словнику тестуються засобами LT, щоб побачити, як вони впливають на аналіз. Своєю чергою, зміни в аналізаторі проходять регресійні тести на архіві українських текстів обсягом понад 100 млн слів, зібраних із друкованих медій, української літератури та інших джерел.

Допоміжні засоби

Проект допоміжних засобів використання LanguageTool для аналізу текстів.

В процесі роботи над основними проектами виникла потреба в засобах, що дозволяють опрацьовувати наявні тексти для покращення словника та модулів аналізу. Розроблені з цією метою утиліти дають змогу легко токенізувати, лематизувати, тегувати та перевіряти текст і показують можливості застосування українського модуля LanguageTool до аналізу текстів.

Утиліти написані мовою Groovy, але також наведено декілька скриптів-обгорток на Python.

Український аналізатор у двигуні повнотекстового пошуку Apache Lucene

Коли індексують текст й опрацьовують пошуковий запит, потрібно знайти всі форми слова. Для цього виокремлюють корінь (стем) або базову форму. В популярний відкритий двигун повнотекстового пошуку Apache Lucene нещодавно додано український аналізатор на базі ВЕСУМ. Після відфільтрування всіх шумових слів (stop words) за допомогою словника знаходять лему (базову форму слова). Версія ВЕСУМ-а для пошуку має свою специфіку: наприклад, через неунормованість написання літери ґ у багатьох власних назвах у словнику цю літеру замінено на г (тож для пошуку ці літери — взаємозамінні), а власні назви зведено до нижнього регістру, бо запити на них часто вводять у цьому регістрі.

Український корпус (проект БрУК)

Цей проект має на меті створити Браунський український корпус (БрУК) — відкритий, збалансований за жанрами та в майбутньому проанотований корпус сучасної української мови обсягом 1 млн слововживань. Корпус спирається на засади, покладені в основу відомого корпусу англійської мови Brown Corpus.

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

Результати

Створені проекти можуть слугувати основою в багатьох напрямках лінгвістичного аналізу. Вже сьогодні їх використовують в низці проектів:

  1. Перевірка орфографії (зокрема словники для браузера Firefox та офісного пакета LibreOffice.org).
  2. Повноцінна підтримка української мови в популярному відкритому двигуні повнотекстового пошуку Lucene. Цей модуль вже використовується в таких проектах, як declarations.com.ua. Невдовзі український модуль будуть використовувати для пошуку в українській Вікіпедії (раніше цю функцію виконував модифікований російський аналізатор з відповідною якістю пошуку).
  3. Лематизація: окрім повнотекстового пошуку лематизація також використовується для побудови деяких моделей NLP, наприклад, word embeddings. Зокрема ці засоби використано для побудови векторів слів (word vectors) для проекту lang-uk.
  4. Перевірка граматики та стилю: на базі цих засобів створено модуль перевірки граматики та стилю для української мови. Модуль вже містить понад 300 граматичних правил, складність аналізу яких варіюється від простого пошуку леми до надскладних умов узгодження відмінку/роду/числа частин речення.
  5. Інші застосування:
    • укладання тлумачних, термінологічних, перекладних та інших типів словників (зокрема пошук прикладів вживання);
    • різноманітні мовознавчі дослідження;
    • дослідження і розробки у галузі комп’ютерної лінгвістики (зокрема побудова моделей мови, отримання статистичної інформації);
    • довідкові функції та редагування.

Плани

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

  • Наповнення словника: найближчим часом сподіваємося довести обсяг до 300 тис. лем і додати інформацію про перейменовані населені пункти.
  • Вдосконалення модуля перевірки граматики LanguageTool (наявні правила відкриті для перегляду ось тут, можна навіть спробувати створити свої).
  • Покращення повнотекстового пошуку, зокрема, покращення пошукового рейтингу слів.
  • Завершення укладання та анотування відкритого мільйонного корпусу української мови.

Якщо ви хочете долучитися до розвитку проектів, найпростіше це зробити на відповідних сторінках GitHub’у:

Докладніше

Докладніше про ВЕСУМ та LanguageTool
Сторінка ВЕСУМ та українського модуля LanguageTool у Фейсбуці

22 комментария

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Важку та важливу справу робить команда ВЕСУМ для розвитку компьютерної лінгвістики. Років 8 тому цікавила тема лінгвістики і шукав інструменти для російської або української, щоб легше було робити експерименти на знайомих мовах. Знайшов багато матеріалів для англійскої мови. А от для російської, а тим більше для української — майже нічого не було у вільному доступі. З’ясував, що для російської мови Яндекс організував і простимулював науковців на створення корпусу російської мови. А потім використовував корпус для удосконалення свого пошуку в рунеті і у той час це була конкурентан перевага перед Google. У вільному доступі тоді був тільки стемер російської мови від одного із розробників Яндексу.

Тобто ВЕСУМ можне бути корисний не тільки науковцям, а й звичайним розробникам, бо надає можливість створення нових продуктів на його основі.

Така робота повинна мати державне фінансування. Але цій державі — до дупи, вона вмирає. Якщо подивитесь графік скорочення населення, то зрозумієте що скорочення дуже нерівномірне. І ті люди що залишаться — не потребуватимуть ваш продукт.

Лише констатація факта. При цьому на «розвиток мови» держава щороку витрачає шалені кошти. Звичайно ж на бюрократію — виключно дії, що не мають користі, або шкідливі. Бо лише так успішність 100% — якщо користі нема, то невдоволених провалом також нема.

Олексію, ти задрав своїм скигленням.

цій державі — до дупи, вона вмирає

Ти ж вже звалив? Ну й радій, а ми тут вмирати/замерзати/голодувати далі будемо. Бо снігурі разом з російськими немовлятами закінчилися.
Йди собі й не пиши свою маячню.

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

Така робота була пророблена! Сказати, що я у захваті — не сказати нічого. Дякую!
Тим не менш, найвищий ступінь наразі, наскільки я зрозумів, у базі відсутній? При кліку на «самий кращий» не пропонує виправлення на «найкращий».

Загалом, порівняльні форми є в сирцевому словнику, і навіть пов’язані між собою. Але в словник тегів цей зв’язок не потрапляє (формат не дозволяє), тож наразі LT не може пропонувати такі виправлення. Теоретично нескладно згенерувати ще додатковий словничок пов’язаних форм, щоб можна було пропонувати, але потрібно трішки вільного часу, а його поки бракує :)

Цікаво чи є у вас взаємодія та контакти з вітчизняними академічним середовищем? Бо наскільки розумію, такі словники для інших мов створювались здебільш в університетах і відповідно мали фінансування та ресурс(професора, студенти). А потім і поширення та практичне викоритання у середовиші, де вони власне створювались.

Маємо контакти і взаємодію з академічним середовищем, але на індивідуальному рівні.

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

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

А є опер-сорс дот нет проект, який використовує LanguageTool?

Теоретично є додаток для MSWord (github.com/...​nguagetool-msword10-addin), який використовує REST API від LanguageTool для перевірки граматики.
Також є відкритий проект, що надає REST API для лексемування, лемування та тегування: github.com/arysin/api_nlp_uk
Якщо потрібна тісніша інтеграція (через швидкодію або з інших причин), то варіанти два:
1) інтеграція через канали — дуже проста організація взаємодії процесів, зокрема вже є приклад такої інтеграції для Python (github.com/...​n/groovy/org/nlp_uk/tools), дуже швидко працює на гігабайтових обсягах
2) інтеграція класів Java в .NET через IKVM (wiki.languagetool.org/ikvm)
З усім, крім останнього (не працюю з .NET) можу допомогти. Якщо візьметеся за останнє, буду вдячний, якщо поділитися напрацюваннями.

Свого часу пробував

IKVM

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

Перепрошую, з .net не працюю, а через rest api не підійде?

В УКУ зараз лейблимо тексти естраговані з Wikipedia для тренування української моделі для binary relation extraction. Проект починався рік тому з подачі Дмитра Чаплінського, тому частково ми знайомі. Але все одно привіт :)

Деякий час займався технологією швидкого перекладу з російської на українську, використовуючи технологію самонавчання системи на паралельних текстах та на основі пам’яті перекладів. Альфа версію мого продукту можна помацати тут translate.articlestrade.com:8080
роблю у вільний час, тому просувається дуже повільно ((

Нічого собі! Круто! Я навіть не уявляю об’єму і складності вашої роботи.

Обсяг робіт досить серйозний, робота тривала декілька років і не дуже допомагало те, що працювали у вільний час, на громадських засадах. Але пощастило з командою, долучилася команда лінгвістів з групи БрУК, що дало добрячий поштовх у потрібному напрямку, ну й підганяло розуміння, що якщо це не довести до ладу, то якісних українських засобів NLP ще довго не буде. Тепер найголовніше поширити ці напрацювання серед програмістів та лінгвістів, щоб проект міг жити своїм життям. Вже потрішки долучаються й інші люди, хто підкидає нові слова до словника, хто пропонує нові правила для LT, тож користуйтесь, поширюйте, і приєднуйтесь! :)

не уявляю об’єму
Обсяг робіт

Дякую ;)

А я добре уявляю обсяг виконаної роботи та знімаю капелюха! Дуже гарна справа!

Дякуємо! :)

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