У цій статті розглянуті деякі питання розробки програмного комплексу для вирішення ряду лінгвістичних завдань. Описуються сучасні лінгвістичні, математичні і комп'ютерні засоби, використовувані для їх вирішення. Приведені способи реалізації наведених вище завдань з використанням сучасних баз даних.
Одним з найважливіших завдань штучного інтелекту (ШІ) є спрощення взаємодії людини з комп'ютером за рахунок створення ефективних способів спілкування на природній мові. Для реалізації цього завдання необхідно розробити програмний комплекс, що дозволяє розпізнавати будь-яке текстове повідомлення природної мови (аналіз) і або кодувати його в певну формальну мову (переклад), або виконувати якусь дію згідно з результатом аналізу прийнятого повідомлення (діалог). Подібний програмний комплекс складатиметься з досить складних уніфікованих компонент, які призначені для виконання поетапного розпізнавання і обробки тексту за допомогою лінгвістичних методів, що використовують одну або декілька баз даних і словників. Найважливішими компонентами цього комплексу є продукційна компонента, необхідна для обробки продукційних правил, визначуваних лінгвістичними правилами, а так само словникова компонента, яка реалізує роботу з базами даних і словників.
Багато прикладних лінгвістів нині [1,2] працюють над завданнями створення систем побудови різних природньо-мовних інтерфейсів, які орієнтовані на класифікацію текстів в структурованій певним чином предметній області, і на підтримку запитів до баз даних. Подібні системи використовують семантичний аналіз природної мови, де розуміння ґрунтоване на змістовній інформації, яка характеризує цю предметну область. Для вирішення цього завдання необхідно розробити і реалізувати алгоритми морфологічного і синтаксичного компонентів лінгвістичного процесора природної мови (ПМ). Лінгвістичний процесор (ЛП) є комплексом програм, що забезпечують аналіз і синтез тексту природною мовою. Завданням такого процесора є розбір і обробка що поступає в ЛП інформації у вигляді окремих фраз природною мовою (при аналізі) або побудова фрази ПМ, яка відповідає формальному опису її сенсу (при синтезі).
Лінгвістичний процесор складається, як правило, з трьох компонентів: лінгвістичного, математично-алгоритмічного, і програмного. Тобто для того, щоб машина могла сприйняти природну мову, вона повинна розпізнати сенс тексту, а це можна здійснити за допомогою набору словників і граматик. Сам текст можна визначити, як надмірну багаторівневу систему зберігання і передачі інформації [1].
Зазвичай в ПМ виділяють декілька мовних рівнів: синтаксичного, морфологічного, семантичного. І на кожному з цих рівнів використовуються свої структури даних, що обробляються і формовані відповідними компонентами ЛП.
Морфологічний компонент ЛП є набором програм, які виконують морфологічний аналіз і синтез слів ПМ. Морфологічні моделі, які існують нині, розрізняються в основному за результатами функціонування морфологічних аналізаторів, по повноті покриття лексики і за способом розчленовування словоформ. Лексеми у базі даних можуть містити усі словоформи. Такий спосіб представлення є дуже зручним і ефективним для малофлективних мов, де різні граматичні категорії реалізуються не завдяки варіації флексій, а певним граматичним способом (наприклад, за допомогою прийменників). Прикладом малофлективної мови є англійська. Крім того, у базі даних можуть зберігатися основи лексем і переліки флексій, які приєднуючись до основи, дають нову словоформу. Такий спосіб представлення лексем підходить для флективних мов, де різні граматичні категорії реалізуються за допомогою варіації флексій. Російська і українська мови є флективними.
База даних повинна містити усю інформацію, потрібну для морфологічного аналізу і синтезу, для тих лексем, з якими працюватиме ЛП. У базі даних, що розробляються, необхідно передбачити можливість зберігання значної кількості різноманітних іменників (чоловічий, жіночий і середній рід, живі і неживі), прикметників, дієслів (зворотні і незворотні, доконаного і недоконаного виду, перехідні і неперехідні), прийменників, займенників, прислівників, і сполучників. Окрім цього, в морфологічній базі даних повинні міститися лексеми (включаючи омонімічні лексеми). Окремим питанням, яке істотно ускладнює виконання завдання, є наявність в мові так званих «псевдоформ».
Створюючи синтаксичний компонент, необхідно розробити синтаксичну модель певної природної мови. Для цього треба визначити спосіб представлення синтаксичної структури одиниці (речення або тексту), спосіб опису синтаксису мови, метод аналізу і синтезу природною мовою.
Синтаксичний аналізатор природної мови побудувати значно складніше, ніж морфологічний, внаслідок відсутності доки чітких лінгвістичних алгоритмів, які б описували будь-яку природну мову. Граматика природної мови украй неоднозначна, синтаксис різноманітний, складний і неструктурований (особливо в розмовній мові). Звичайні для природної мови явища, такі як еліпсис, інверсія, парцеляція та інше, є важким для автоматичної обробки. Тому до роботи синтаксичного аналізатора деякі складні мовні структури часто необхідно обробляти спеціальними процедурами. До таких процедур відноситься обробка фразеологізмів, перевірка знаків пунктуації, правильності розставляння дужок, і т.ін. Окрім цього, автоматичне дроблення тексту на окремі речення є доволі складним завданням і теж проходить попередній синтаксичний аналіз.
Синтаксичні аналізатори відмінні один від одного типом текстів (науковий текст, художня література), правильністю аналізованого ряду словоформ, здатністю аналізувати окреме речення (чи його частину), що складається більше ніж з одного речення, типом аналізу.
Існує декілька типів формальних граматик, які використовуються для того, щоб описати синтаксис природної мови. Це граматика залежностей, контекстно-вільні граматики, орієнтовані контекстно-вільні граматики, і мережеві граматики. Основні типи формальних граматик описані в [2], [3].
Край важливим завданням ШІ є побудова семантичної мережі. Найчастіше для її опису використовують концептуальні графи Дж. Соува і блокові структури Г. Хендрикса. Блокові структури детально описані в [4].
Також семантичні мережі описують у вигляді концептуальних графів. Вершинами концептуального графа є об'єкти (поняття) предметної області, або їх відносини. Дуги концептуального графа сполучають поняття-вершини-поняття і відносини-вершини-відносини між собою. Тоді дуги можуть виходити з вершин-понять і закінчуватися у відносини-вершині-відносини, або ж навпаки. Для того, щоб розрізняти вказані типи вершин, на концептуальних графах їх зображують прямокутником і еліпсом, відповідно [5].
Однією з переваг виділення відносин в самостійні вершини концептуального графа полягає в спрощенні представлення парних відносин. Таке співвідношення є відносини-вершина-відносини з n-ребрами. Зазвичай кожен концептуальний граф фіксує одне речення. Тоді база знань представлятиметься у вигляді сукупності таких графів. Графи можуть використати відмінкові зв'язки дієслів і демонструвати можливості концептуальних графів для представлення речень природною мовою.
Кожне поняття-верх-поняття концептуального графа може мати мітку типу (тип означає клас приналежності вершини). На концептуальному графові мітку типу вершини відділяють двокрапкою від конкретного імені вершини. Можна вводити індивідні поняття-вершини-поняття з однаковими іменами на концептуальних графах. Для відмінності екземплярів об'єктів (понять) з такими ж іменами, використовується спеціальний числовий маркер, перед яким записаний символ #. Окрім числового маркера, на концептуальних графах можуть застосовуватися узагальнені маркери, які позначаються знаком *. У поєднанні зі змінною, яка записується після цього знаку, узагальнений маркер виявляється корисним в ситуаціях, коли дві різні вершини графа є одним і тим же об'єктом. Тоді як числові маркери, вживані для виділення в семантичній мережі індивідних об'єктів, узагальнені маркери дозволяють виділяти той же узагальнений об'єкт заданого типу.
На концептуальних графах вводяться операції, що дозволяють виконувати їх перетворення. Нові графи виходять за допомогою чотирьох операцій: копіювання, спеціалізації, об'єднання і спрощення. Операція спеціалізації полягає в заміні узагальненої вершини її індивідним (конкретним) варіантом. При цьому може бути два випадки: 1) якщо вершина відмічена узагальненим маркером, то узагальнений маркер замінюють конкретним індивідним маркером (іменним або числовим). 2) тип вершини можна замінити відповідним підтипом, що має необхідні властивості. Операція об'єднання дозволяє отримувати з двох графів один. Операція спрощення дозволяє виключити на графах дублікати відносин. При цьому виключаються відносини-вершина-відносини і пов'язані з нею дуги. Дублювання стосунків часто виникає в результаті виконання операції об'єднання.
Операція спеціалізації дозволяє порівняти дві вершини концептуального графа і, якщо порівняння успішне, виконувати об'єднання. Спільне використання операцій спеціалізації і об'єднання забезпечує реалізацію механізму послідовності. Наприклад, замінивши узагальнений маркер індивідним, ми поширюємо властивості типу на конкретний індивідний об'єкт. Якщо в ході виконання операції обмеження відбувається заміна типу на його підтип, то має місце послідовність "підклас-клас-підклас".
Розглянуті вище прості операції не гарантують отримання правильних тверджень на основі перетворених графів. Конкретизація вершин-понять, що виконується в ході операцій спеціалізації і об'єднання, не завжди відповідає дійсності. Наприклад, якщо в ході виконання операції об'єднання з'єднуються два графи, агенти яких позначені тим самим поняттям, то це зовсім не означає, що не може статися так, що ці поняття відповідають двом різним індивідним об'єктам.
Концептуальні графи можуть містити вершини, що є реченнями. Такі вершини зображуються у вигляді прямокутного блоку, що містить підграф, відповідає реченню.
Концептуальний граф дозволяє природним чином виражати кон'юнкцію. Складніше з іншими логічними операціями: диз'юнкцією, логічним запереченням, кванторами.
Для представлення заперечення на концептуальних графах, застосовується унарний логічний оператор "ні". Оператор застосовують до речення. Твердження, яке фіксується реченням, вважається в цьому випадку помилковим.
Використовуючи заперечення і кон'юнкцію, можна представити на концептуальних графах диз'юнкцію. Проте для спрощення концептуальних схем диз'юнкцію представляють у вигляді спеціального бінарного відношення "або", аргументами якого є вершини-речення.
Існує можливість взаємного переходу від описів предметної області мовою числення предикатів в концептуальні графи, і навпаки. Вибирання тих або інших засобів визначається типом вирішуваних завдань і перевагами розробників систем штучного інтелекту.
Одним з простих засобів виведення на семантичних мережах є пошук по перетину. Інший потужний засіб виведення - порівняння із зразком. В цьому випадку відбувається порівняння окремих фрагментів мережі і запит до бази даних представляється у вигляді окремого підграфа, що будується за такими ж правилами, як і семантична мережа. За допомогою порівняння підграфа запиту з фрагментами мережі відбувається пошук відповіді на запит. Для цього на підграф накладається запит на відповідний фрагмент мережі. Позитивним стане таке накладення, в результаті якого фрагмент мережі буде ідентичним підграфові запиту. Для цього допускається використання в запиті змінних.
У загальному випадку в підграфі запиту можуть бути задані об'єкти, атрибути, імена відносин які не представлені у базі знань явно. Це вимагає виконання попередніх перетворень фрагментів семантичних мереж, які порівнюються. В результаті таких перетворень можуть бути отримані нові зв'язки. Вказані перетворення виконуються на основі простих базових операцій.
Методи виведення на семантичних мережах, що використовують ідею перетину або порівняння фрагментів мереж, мають істотний недолік. Він пов'язаний з комбінаторним зростанням числа порівнянь або перетинів в мережах досить великої розмірності.
У ряді систем, ґрунтованих на семантичних мережах, використовуються спеціалізовані правила виведення - методи дедуктивного виведення на семантичних мережах, ґрунтовані на поняттях розфарбовування графів і операторах перетворення мереж [7].
Перші спроби інтелектуальної обробки текстів природною мовою були зроблені в 60х-70х роках. З цією метою було створено багато експериментальних програм, які здатні "спілкуватися" з користувачем природною мовою. Для цього використовувалися концепції грамотного і структурного програмування. Грамотне програмування (ГП, Literate Programming), що іноді помилково називається літературним програмуванням, є методологією програмування і документування. Це словосполучення іноді помилково переводять як "літературне програмування". Цей термін і концепцію в 1981 році висунув Дональд Кнут. Грубо кажучи, ГП - це мова програмування, написана на "псевдокоді" - "людській мові". Текст програми на такій мові зрозумілий і легко сприймається програмістами, в той же час сам код важкий, а під однією фразою-"оператором" ховається безліч інших вкладених абстракцій або програмний код на безпосередньо машинній мові. Система грамотного програмування, яку Кнут запропонував як альтернативу "структурному програмуванню" в 1970-х роках, незважаючи на доведену ефективність, мало поширена сьогодні через нерозуміння: багато хто думає, що ГП - це усього лише система документування або форматування стандартних коментарів [7].
Загалом, широкого поширення програми, що використовують лінгвістичний процесор доки не отримали. Найчастіше причиною була невисока якість розпізнавання фраз, жорсткі вимоги до синтаксису "природної мови", великі тимчасові і ресурсні витрати, необхідні для якісного функціонування. Майже в усіх системах комп'ютерної обробки тексту використовується обмежена природна мова, оскільки доки не створено повній і строгій формальній моделі ні для якої природної мови.
Є доцільним формувати моделі великих фрагментів ПМ (статті, книги та ін.) у вигляді двох пов'язаних таблиць реляційної бази цих швидкохідних СУБД типу ORACLE. Рядки першої таблиці містять повний опис вершин (вузлів) семантичної мережі у вигляді об'єкту і його характеристик. Наприклад, об'єктом можуть виступати слова або пропозиції, а характеристиками є їх різні ознаки і додаткова інформація, яка використовується різними програмами для семантичного аналізу. Опорними об'єктами (вузлами) виступають слова, які використовуються в заголовку або анотації конкретного фрагмента ПМ. Ця таблиця по своїй структурі подібна до словника, що має гнучку можливість довільної деталізації об’єктів, що зберігаються.
Друга таблиця описує зв'язки вузлів першої таблиці у вигляді базових смислових фрагментів, лінгвістичних правил і призначена для вирішення завдань аналізу, перекладу або діалогу за допомогою бази знань, яка навчається.
Такий підхід реалізований автором при створенні програми автоматичної генерації реферативної інформації різних текстів і повідомлень енергетичного характеру на російській, українській і англійській мовах. Передбачається, що результати розробки також використовуватимуться в створенні нового покоління сучасних діалогових систем персональних комп'ютерів.
Підсумовуючи необхідно відмітити, що природні мовні засоби спілкування комп'ютера і людини продовжують розвиватися і є одним з найперспективніших способів, який дозволить створити складні інформаційні системи для спілкування людини і машини природною мовою.
СПИСОК ЛІТЕРАТУРИ
1. Волкова И.А. " Лингвистический процессор естественного языка. Морфологический и синтаксический компоненты. Задание практикума для студентов 3-го курса ЧФ МГУ (Методическое пособие)". Издательский отдел факультета вычислительной математики и кибернетики МГУ им. М.В.Ломоносова, 2002. -39 с.
2. Волкова И.А., Руденко Т.В. Формальные грамматики и языки. Элементы теории трансляции. — М., Изд-во МГУ, 1999.
3. Ахо А., Сети Р., Ульман Дж. Компиляторы — М., С-П, Киев, Вильямс, 2001.
4. Hendrix G.G. Encoding Knowledge in Partitioned Networks // Associative Networks: Representations and Use of Knowledge by Computers. – New York: Academic Press, 1979.
5. Інтернет-ресурс:http://knhelp.wordpress.com/2012/04/19/%D0%BB5-%D1%81%D0%B5%D0%BC%D0%B0%...
6. Інтернет-ресурс: http://ru.wikipedia.org/wiki/%D0%93%D1%80%D0%B0%D0%BC%D0%BE%D1%82%D0%BD%...
7. Інтернет-ресурс: http://en.wikipedia.org/wiki/Literate_programming