У рубриці DOU Проекторвсі охочі можуть презентувати свій продукт (як стартап, так і ламповий pet-проект). Якщо вам є про що розповісти — запрошуємо взяти участь. Якщо ні — можливо, серія надихне на створення власного made in Ukraine продукту. Питання і заявки на участь надсилайте на editors@dou.ua.
Ідея
Всі ми шукаємо інформацію в пошукових системах, і деякі з них видають дуже якісні результати. Однією з умов якісного пошуку в текстових масивах є наявність інформації про відмінювання. Скажімо, на запит «живий та легітимний» пошукова система може видати результат із фразою «живого та легітимного».
Добре, коли комерційна (закрита) система вміло працює з українською мовою, але є багато застосувань, де використати комерційний двигун неможливо. Тут на допомогу приходять відкриті програмні засоби опрацьовування природних мов (NLP). Для популярних мов таких засобів, включно з відкритим ПЗ, досить багато. Для української ж до недавнього часу засобів було обмаль.
Ідея полягає в створенні відкритих проектів базового аналізу українських текстів, на яких можна будувати складні рішення NLP для української мови.
Команда
Андрій Рисін — програміст, засновник проекту ВЕСУМ;
Василь Старко — лінгвіст, кандидат філологічних наук, доцент Східноєвропейського національного університету ім. Лесі Українки, перекладач;
Дмитро Чаплинський — програміст, співзасновник ініціативи lang-uk;
Команда БрУК — у створенні словника також брали участь багато учасників проекту побудови Браунського корпусу української мови (див. r2u.org.ua/corpus).
Реалізація
Словник
Основою більшості засобів NLP є словник тегів частин мови (англ. POS tag dictionary). Такий словник містить дані про відмінювання слів та має відповідні теги для кожної форми слова. Скажімо, слово різав матиме базову форму (лему) різатиі теги дієслова минулого часу, однини, чоловічого роду.
Така інформація дозволяє шукати слово за будь-якою його формою, а також проводити аналіз речень: шукати узгодження відмінювання між словами в реченні, фільтрувати слова за родом, відмінком тощо.
Великий електронний словник української мови (ВЕСУМ) бере початок з проекту ispell-uk, який в
До проекту долучилася команда створення відкритого корпусу української мови БрУК. Але навіть для досвідчених лінгвістів багато питань, які поставали перед проектом, стали неабияким викликом. Робота зайняла значно більше часу, ніж очікували, з багатьох причин:
- відкритої інформації про парадигми українських слів не існувало;
- наявні орфографічні словники містили помилки та суперечили один одному;
- словники не встигали за розвитком мови;
- засади парадигм, запропоновані в теоретичних працях з мовознавства, не завжди відповідали практичній орієнтації 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 для української мови.
Результати
Створені проекти можуть слугувати основою в багатьох напрямках лінгвістичного аналізу. Вже сьогодні їх використовують в низці проектів:
- Перевірка орфографії (зокрема словники для браузера Firefox та офісного пакета LibreOffice.org).
- Повноцінна підтримка української мови в популярному відкритому двигуні повнотекстового пошуку Lucene. Цей модуль вже використовується в таких проектах, як declarations.com.ua. Невдовзі український модуль будуть використовуватидля пошуку в українській Вікіпедії (раніше цю функцію виконував модифікований російський аналізатор з відповідною якістю пошуку).
- Лематизація: окрім повнотекстового пошуку лематизація також використовується для побудови деяких моделей NLP, наприклад, word embeddings. Зокрема ці засоби використано для побудови векторів слів (word vectors) для проекту lang-uk.
- Перевірка граматики та стилю: на базі цих засобів створено модуль перевірки граматики та стилю для української мови. Модуль вже містить понад 300 граматичних правил, складність аналізу яких варіюється від простого пошуку леми до надскладних умов узгодження відмінку/роду/числа частин речення.
- Інші застосування:
- укладання тлумачних, термінологічних, перекладних та інших типів словників (зокрема пошук прикладів вживання);
- різноманітні мовознавчі дослідження;
- дослідження і розробки у галузі комп’ютерної лінгвістики (зокрема побудова моделей мови, отримання статистичної інформації);
- довідкові функції та редагування.
Плани
Наявні засоби пройшли довгий шлях від загального задуму до потужного інструментарію для розв’язання серйозних задач. Але існує велика кількість потенційних нових напрямків його застосування, і ми сподіваємося, що відкритість проекту надасть змогу що професіоналам, що ентузіастам створювати нові цікаві рішення в галузі українського NLP. Також є сподівання, що ця відкритість стане запорукою ефективного зворотного зв’язку й сприятиме дальшому вдосконаленню цих базових проектів.
- Наповнення словника: найближчим часом сподіваємося довести обсяг до 300 тис. лем і додати інформацію про перейменовані населені пункти.
- Вдосконалення модуля перевірки граматики LanguageTool (наявні правила відкриті для перегляду ось тут, можна навіть спробувати створити свої).
- Покращення повнотекстового пошуку, зокрема, покращення пошукового рейтингу слів.
- Завершення укладання та анотування відкритого мільйонного корпусу української мови.
Якщо ви хочете долучитися до розвитку проектів, найпростіше це зробити на відповідних сторінках GitHub’у:
- github.com/brown-uk/dict_uk
- github.com/languagetool-org
- github.com/brown-uk/nlp_uk
- github.com/brown-uk/corpus
Докладніше
Докладніше про ВЕСУМ та LanguageTool
Сторінка ВЕСУМ та українського модуля LanguageTool у Фейсбуці