Я вже кілька років працюю над технологією створення програми з штучного інтелекту, яка б дозволила людині спілкуватись з комп'ютером, як з іншою людиною. Зрозумів, що процес створення штучного інтелекту треба поділяти на етапи: 1 – створення програми, як б певним чином обробляла (запам'ятовувала) текст і давала відповіді на питання стосовно цього тексту (надає можливість мати доступ до необмеженого об'єму інформації), 2 – створення програми, яка б „мислила” немов людина, з якою можно б було спілкуватись як з людиною, щось обговорювати, давати їй завдання на вирішення якихось складних питань і т.і. – ну і далі наступні етапи, яких зараз торкатись не буду.
Зосередився на першому етапі. Окреслився досить чітко напрямок, як треба створювати програму (технологія). Зробив багато підготовчих „напрацювань” для створення програми, але реального продукту, хоча б в спрощеній формі створити не можу. Я навчався програмуванню самотужки і, мабуть, потрібного досвіду не маю. А може, такий проект не можливо створити самотужки.
Шукаю співпраці з досвідченими програмістами, які б бажали взяти участь у створенні цього проекту. Я є незаможня людина і шукаю іменно співпраці на якихось умовах. Чекаю пропозицій.
Тезово викладаю технологію створення програми для розуміння потужності і об'єму проекту. Наголошую, що це не є інструкцією для створення програми, а лише тезовою технологією. Вона наступна:
Людська мова є структурованою. Спілкуючись один з одним, ми передаємо її окремими блоками, сформованими за певними нормами та правилами, і пов`язаними між собою теж за певними нормами та правилами. На основі цих норм та правил можно створити комп`ютерну програму, яка, як людина, буде „розуміти” інформацію, „запам`ятовувати” і видавати її на запрос (запитання). Взаємопов`язані блоки інформації, якими ми обмінюємось, спілкуючись, можно назвати „подіями”. Події формуються із понять: „ім я”, „дія” (основні), та певної кількості допоміжних понять, використовуємих для зв`язку основних понять та, власне, подій, і для додаткових мовних окрас. Наприклад: „Щоб дійти до річки, треба спуститись у долину.” Тут „щоб” – поняття, використане для зв`язку подій, а „дійти до річки» і «треба спуститись у долину» - власне самі події.
Структура „події” у найбільш повному складі є така:
1) „Ядро події” – сформоване з: „дії”, „активного ім`я”, „пасивного ім`я” і „використовуємого ім`я”. Наприклад: «Людина рубає тополю сокирою.»
Тут „людина» - „активне ім`я”, „рубає» - „дія”, „тополю” – „пасивне ім`я”, „сокирою” – „ використовуєме ім`я”.
2) „Розширення ядра події” – „ім`я, для якого призначена дія”. Наприклад: «Людина рубає тополю сокирою для втіхи.» Тут « втіха» - „ім`я, для якого призначена дія”. Наприклад: «Поштар віддав листа адресату”. Тут „адресат” - „ім`я, для якого призначена дія”.
3) „Напрямок дії”. Наприклад: «Людина рубає тополю сокирою по стовбуру.» Тут „по стовбуру” – „напрямок дії”.
4) „Місце події”. Наприклад: «У лісі людина рубає тополю сокирою .» Тут „у лісі” – „місце події”.
5) „Час події” (поділяється на „власне, час події”, „протяжність події”, „протяжність події з виокремленням”, „протяжність події з обмеженням”). Наприклад: «Людина рубає тополю вранці.» Тут «вранці» - „власне, час події”. Наприклад: „Людина рубає тополю одну годину.” Тут „одну годину” - „протяжність події”. Наприклад: „Людина рубає тополю з ранку до півдня.” Тут „з ранку до півдня” - „протяжність події з виокремленням”. Наприклад: „Людина рубає тополю до півдня.” Тут „до півдня” - „протяжність події з обмеженням”.
Дуже рідко, висловлюючись, людина використовує конструкцію структури „події” у повній формі. Зачасту вживає лише обмежену кількість членів (навіть, може – лише окремі).
Виявлено окрім приведеного вище „ядра події” („дія”, „активне ім`я”, „пасивне ім`я”, „використовуєме ім`я”) також часто вживане так зване „”архаічне” ядро події” („дія”, „пасивне ім`я”, „використовуєме ім`я”, а „активне ім`я” – відсутнє). Наприклад: «Тополя зрубана людиною.» - „„архаічне” ядро події”. Тут „тополя” – „пасивне ім`я”, „зрубана” – „дія”, „людиною” – „використовуєме ім`я”; „активного ім`я” нема і не може бути.
Окремі „події” пов`язуються між собою по-різному. Одні мають близький (тісний) зв`язок, інші – віддалений. Дослідження довели, що є наступні події, тісно пов`язані з основною подією (їх можно назвати „підподіями”).
1) „Одночасна подія”. Наприклад: „Хлопчик бежить, підстрибуючи на ходу.” Тут „підстрибуючи на ходу” - „одночасна подія”.
2) „Попередня подія”. Наприклад: „Розставивши фігури, вони почали грати”. Тут «розставивши фігури» - „попередня подія”.
3) „Постподія”. Наприклад: „Письменник вирішив написати повість.” Тут «написати повість» - „постподія”.
4) „Подія, яка не відбулась”. Наприклад: „Він пішов додому, а не залишився з друзями.” Тут „не залишився з друзями” - „подія, яка не відбулась”.
5) „Подія – ознака ім`я”. Наприклад: «Мисливець побачив оленя, пасущегося у лузі.» Тут «пасущегося у лузі» - „подія – ознака ім`я”. Наприклад: „З дерева злетів жовтий по краях лист.” Тут „жовтий по краях” - „подія – ознака ім`я”. Наприклад: „Він зняв рушницю, яка висіла на стіні.” Тут „висіла на стіні” - „подія – ознака ім`я”.
6) „Подія з назвою-ім`ям цієї події”. Наприклад: „Тоді почалось повстання працівників проти гнобителів.” Тут „повстання” – назва-ім`я події „повстання працівників проти гнобителів”.
7) „Подія з назвою-ім`ям виконавця дії”. Наприклад: „Вперед вийшли стрілки з луку.” Тут „стрілки з луку” – „подія з назвою-ім`ям виконавця дії”.
„Включена інформація”. Поділяється на:
а) „Звичайне включення інформації”. Наприклад: «Він розповів про те, що відбулось на минулому тижні.» Тут «те, що відбулось на минулому тижні» - „звичайне включення інформації”.
б) „Включена інформація, з загальною назвою цієї інформації”. Наприклад: «Сусід розповів про випадок, який трапився учора.» Тут «випадок, який трапився учора» - „включена інформація”, „випадок” – „загальна назва цієї інформації”. Наприклад: „Він розповів казку про стародавніх героїв». Тут «казка про стародавніх героїв» - „включена інформація”, „казка” – „загальна назва цієї інформації”.
„Підподії” виокремлюються з загального потоку інформації (тексту) і пов'язуються за певними нормами та правилами, яким можно „навчити” комп'ютерну програму.
„Віддалений зв`язок подій” можно систематизувати наступним чином:
1) „Зв`язок по часу дії”. Наприклад: «Вранці пішов дощ. Тоді усі птахи принишкли.» Наприклад: «Він зайшов до хати після того, як там вщух шум.»
2) „Зв`язок за місцем дії”. Наприклад: «В лісі було прохолодно. Там росли гриби.»
3) „Зв`язок за напрямком дії”. Наприклад: «Чоловік зайшов до хати. Туди ж вбіг пес.»
4) „Зв`язок за ім`ям”. Наприклад: «Поштарка віддала листа господарю. Він був у запечатаному конверті.»
5) „Зв`язок за ознакою ім`я”. Наприклад: «Рибалка спіймав великого карпа. Такого жалко відпускати.»
6)„Причинно-наслідкові зв`язки”. Наприклад: «Він видерся на гору, щоб роздивитись навкруги.» Тут «роздивитись навкруги» - „ціль”. Наприклад: «Щоб бути дужим, треба гарно їсти.» Тут «треба гарно їсти» - „умова”; „бути дужим” - „ціль”. Наприклад: «Він йшов та посміхався, тому що все навкруги було до вподоби.» Тут «все навкруги було до вподоби» - «причина». Наприклад: «Довкола было тихо, тому його і зморило.» Тут «його зморило» - „наслідок”.
7) „Подія з посиланням на попередню подію”. Наприклад: «Він раптом впав. Це не залишилось непоміченим.» Тут подія „Це не залишилось непоміченим” зсилається на попередню подію „Він раптом впав” через зв'язуюче поняття „це”.
„Подія з „доповненням” попередньої події”. Наприклад: «Він стрімголов кинувся на ворога. Так вчиняють герої.» Тут «Так вчиняють герої» - „подія з „доповненням”, що „він” – це „герой”. Наприклад: «Кінь кружляв по колу. Так продовжувалось пів години.» Тут подія „Так продовжувалось пів години.” доповнює подію „Кінь кружляв по колу.” по часу дії.
9) „Подія з наданням назви попередній події”. Наприклад: „Він вдарив полоненого. Цей вчинок шокував усіх.” Тут в події „Цей вчинок шокував усіх” попередній події „Він вдарив полоненого” надано назву „вчинок”.
10) „Зв`язок за протиставленням”. Наприклад: „Небосхил посвітлішав, але небо было затянуто хмарами.”
11) „Зв`язок по неповній відповідності”. Наприклад: «Двоє пішли праворуч, а третій попрямував ліворуч.»
12) „Доповнення”. Наприклад: «Повз дороги росли дерева, також там траплялись і кущі.»
13) „Доповнення з смисловим контекстом”. Наприклад: „Я не хочу вставати. До того ж в мене нога болить.”
14) „Події” у „ланцюгу подій”. Наприклад: «Спочатку чоловік трохи відпочив. Потім він зайнявся ремонтом. Після цього став збиратись додому.”
„Події” виокремлюються з загального потоку інформації (тексту) і пов'язуються за певними нормами та правилами, яким можно „навчити” комп'ютерну програму.
У людській мові „втілені” такі „категорії мислення”:
1) „Приналежність ім`я іншому імені”. Наприклад: «Біля ріки стояло житло рибалки.» Тут «житло» - приналежність «рибалки».
2) „Пропуск поняття (не промовляється), конкретизація якого не є необхідним” Наприклад: «Гарно на вулиці.» Тут нема „дії”, може бути люба підходяча: „гуляти”, „працювати”, і т.і. Головне, що „гарно”, і, що „на вулиці”.
3) „Пропуск поняття (не промовляється) через „архаічність” структури (замість пропущеного поняття виступає поняття, якому воно належить)” Наприклад: «Радощам не було кінця.» Тут не вказано „пасивне ім я”, якого «не було», зате вказано, що воно належить „кінця”.
4) „Порівняльна міра, кратність порівняння” Наприклад: „Він знає краще за всіх.” Наприклад: „Тут удвічі глибше.”
5) „Порівняння”. Наприклад: «Він стрибав як заяць.» Наприклад: «Він сказав, як відрізав.»
6) „Умовне порівняння”. Наприклад: «По даху загрюкав град, немов хтось відбивав барабанний дріб.»
7) „Умовна можливість”. Наприклад: «Якщо б мені пощастило, я б знайшов клад.»
„Перелік імен чи дій”. Наприклад: «У лукошку лежали маслята, печериці та опеньки.» Наприклад: „Діти бігали, стрибали та бешкетували.”
9) „Перелік подій”. Наприклад: «По-перше, він був молодий. По-друге, йому ніхто не заважав.”
10) „Порядковість”. Наприклад: «Першим прийшов бігун із Нігерії.»
11) „Кількість”. Наприклад: «Рибалка спіймав дванадцять карасів.»
12) „Вибірка із кількості”. Наприклад: «Їй сподобались три сукні з десяти.»
13) „Кратність дії”. Наприклад: «Він тричі підстрибнув на місці.»
14)„Частота дії”. Наприклад: „Він приходить сюди дуже часто.” Наприклад: „Іноді таке трапляється.”
15) „Невизначеність”. Наприклад: «Вдалині паслись чи то корови, чи то коні.»
16) „Приблизність”. Наприклад: „Там було приблизно десятеро людей.” Наприклад: „ Я бачив десь біля сотні тварин.”
17) „Вибір”. Наприклад: «Візьми лопату або граблі.» Наприклад: «Він або піде, або залишиться.»
18) „Спільна участь у події або визначена відсутність спільності”. Наприклад: «Він з товаришем взявся за справу.» Наприклад: „Він їде без мети.”
19) „Багато – замало”. Наприклад: « Він пізнав багато щастя.»
20) „Присутність - відсутність”. Наприклад: «Тут є люди.» Наприклад: «У нього нема совісті.»
21) „Не підтвердження поняття”. Наприклад: «Він зустрів не тих.» Наприклад: «Він не повернувся додому.»
22) „Не підтвердження поняття, з вказівкою підтвердженого”. Наприклад: «Нам потрібні не білі, а чорні.»
23) „Згода-заперечення” Наприклад: „ – Ти підеш зі мною? –Так. – Треба брати сумку? – Ні.”
24) „Змінність час від часу”. Наприклад: „Я бачив то декілька, то цілу зграю птахів.”
25) „Надання додаткового ім`я, ознаки”. Наприклад: «Цей шахтар був бригадиром.» Наприклад: «Він став веселим.»
26) „Власне ім`я”. Наприклад: „Ріка Рось впадає в Дніпро.” Тут «Рось» и «Дніпро» - „власні ім`я”.
27) „Наголос”. Наприклад: «Вратарь пропустив аж два голи.»
28) „Імовірність (з точки зору розповідача) події”. Наприклад: «Мабуть, він прийде сюди.» Наприклад: «Він, безсумнівно, поверне борг.»
29) „Примітки розповідача, або висловлення їм свого ставлення до викладаємої інформації”. Наприклад: «Вони, як вже було сказано раніше, ненавиділи його.» Тут «як вже було сказано раніше» - „примітка розповідача”.
30) „Особливості використання абстрактних понятть”. Наприклад: «Він одружився через кохання.» Тут «кохання» - абстрактне поняття. Структура події з абстрактними поняттями нічим не відрізняється від структури події з реальними поняттями. В цьому прикладі „через кохання” – є членом події „напрямок дії”. Щоб відрізняти такий „напрямок дії” від реального напрямку дії, доречно вживати термін „умовний напрямок дії”.
„Категорії мислення” „втілені” у людську мову за певними нормами та правилами, яким можно „навчити” комп'ютерну програму.
Є такі „категорії висловлення”:
1) „Розповідь про себе (своє), нас (наше)”. Наприклад: «Я прийшов додому пізно. Мені хотілось спати.» Наприклад: «Ми будемо чинити опір. Наша справа чесна.»
2) „Розповідь про інших (інше)”. Наприклад: «Він йшов по камінцях. Ними був усипан увесь берег.»
3) „Звертання (до інших)”. Наприклад: «Миколо, сходи за водою.»
4) „Монолог (до інших)”. Наприклад: «Ви перейшли межу.»
5) „Наказ (прохання) (до інших). Наприклад: «Стійте!»
6) „Діалог: обмін думками (інформацією)”. Наприклад: « - Сьогодні повинен піти дощ. - Хотілося б.»
7) „Діалог: питання – відповідь”. Наприклад: « - Ти бажаеш їсти? - Ні.»
„Загальне питання (прохання чи вимога)”. Наприклад: «Роскажіть, як пройти на узбережжя.»
І, нарешті, діспут, спір, розмова, обговорення і т.і., в яких є всі вище перелічені категорії висловлення.
„Категорії висловлення” „втілені” у тексті за певними нормами та правилами, яким можно „навчити” комп'ютерну програму.
Тепер – до створення комп`ютерної програми на основі ціх знань.
Треба використовувати об`єктно-орієнтовані мови програмування. Дані (інформацію у вигляді тексту) краще залишати в незмінному (текстовому) вигляді (для збереження усіх особливостей), але за допомогою певних включеннь переробляти їх (данні) у таку форму, яка дозволить програмі швидко їх використовувати.
Інструментами для такої обробки є:
1) база (бази) даних з усіма поняттями, вживаємими у конкретній людській мові (якщо мова має змінні форми понять – в базі повинні бути поняття в усіх своїх змінних формах з вказаною, відповідно, нульовою), з необхідними атрибутами;
2) функції, об`єднані в класи, які у відповідності до атрибутів понять будуть обробляти інформацію (запам`ятовувати) і надавати відповіді на запитання.
Наприклад: «Мандрівники підішли до села, розташованого на березі річки. В ньому можно було б знайти відпочинок. »
Оброблена(запам'ятована) інформація буде виглядати приблизно так:
{ AI41Мандрівники GD40підішли NP00до NI32села, <O RD32розташованого MP00на MI16березі PI22річки.>} {I MP00В MM33ньому ND30можно GD30було UK00б <P GD00знайти PI11відпочинок.>}
Тут:
{ } – межі події;
< > – межі підподії;
{I – початок події з позначкою зв`язку цієї події з попередньою - „зв`язок за ім`ям”;
<O – початок підподії з позначкою зв`язку цієї підподії з основною – „ознака ім`я”;
AI41мандрівники – „поняття” з приміткою AI41 перед ним, яка складається з чьотирьох позначок:
A – „член події” – „активне ім`я”;
I – „статус члена” – „ім`я”;
4 – „код согласування „рід-число” – “чоловічий рід, множина”;
1 – „код согласування „відмінок” – „називний відмінок”;
Робитись це буде приблизно так:
Програма шукае у „базі понятть” поняття „мандрівники”, і у відповідності з вказаними там атрибутами ставить позначки: _I41 (перша позначка „член події” – не визначена).
Програма переходить до наступного поняття „підішли” і робить з ним так само. Виявивши „статус члена” – „G” („дієслово”), програма ставить позначку „члена події” - „D” („дія”) і шукає согласовані вже оброблені поняття (по позначкам в примітках). _I41 согласується з DG40 кодом согласування „рід-число” „4”. Функції програми з`ясовують, що такому согласуванню відповідає „член події” – „активне ім я”, і, відповідно, ставиться позначка „А”.
Програма переходить до наступного поняття „до”. У відповідності з атрибутами цього поняття у „базі понятть” проставляються позначки у „примітці”: NР00 („N” – „напрямок дії” („член події”), „Р” – „привід” („статус члена”), „0” – согласування „рід-число” немає, „0” - согласування „відмінок” немає). У відповідності з атрибутами цього поняття вмикаеться функція очикування поняття-ім`я, яке буде согласоване по коду согласування „відмінок” – „2”.
Програма переходить до наступного поняття „села”. У відповідності з атрибутами цього поняття у „базі понятть” проставляються позначки у „примітці”: „_I32” (перша позначка „член події” – не визначена). По коду согласування „відмінок” – „2” функція очикування встановлює, що поняття „до” і „села” – согласовані і, відповідно, „села” – є „членом події” – „напрямок дії”. У зв`язку з цим проставляється позначка „N”.
І так далі.
Знайшовши наступне поняття-„дію”, програма робить висновок, що вже почалось описання іншої події, і вмикає функцію очикування, яка по виявлених членах цієї іншої події, відповідно з правилами, з`ясує – чи є це „підподія” попередньої події, і встановить вид зв`язку; чи це – подія з „віддаленим зв`язком”, і встановіть вид зв`язку. В результаті проставляються позначки меж події і зв`язку цієї події з попередньою.
І так далі.
Додатково програма заповнює таблицю „адреси понять” (імен і дій).
Поняття Статус Адреси
мандрівники I ........., ........, ........, .........., ..........
підійти D ........., ........, .........
.......... .......... ........., ........
.......... .......... ........., ........
Тепер можно отримувати відповіді на питання.
Наприклад: «Хто підійшов до села, розташованого на березі річки?»
Програма сприймає питання, як завдання на пошук інформації. Вона знаходить в таблиці „адреси понятть” адреси дії „підійти” і за цими адресами перевіряє кожну подію, в якій є ця дія (якщо адрес декілька) на відповідність „напрямку дії” – „до села” разом з „підподією-ознакою” – „розташованого на березі річки”. Ототожнивши необхідну подію, знаходить відповідь на питання „хто?” – „мандрівники”, і надає або повну відповідь: «До села, розташованого на березі річки, підішли мандрівники.», або – коротку: «Мандрівники.» в залежності від програмних уставок.
Такі питання, в основному, задають в діалозі, обговорюючи недавні події. Тому таку „таблицю адрес понятть” нема сенсу зберігати довгий час, бо через деякий час питання про подробиці ніхто задавати не буде (може, лише, запитають, якщо він запам`ятається, про „головного (головних) героя”). Тому через певний час програмі доцільно знищувати такі „таблиці адрес понять”, завчасно переносячи адреси „головних героїв” (власні назви людей, держав, місцевостей, міст і т.і.; або ім'я, яке приймає участь у певній великій кількості взаємопов'язаних подій) в „глобальну таблицю власних, класифікованих або означених імен”. До цієї таблиці програма буде звертатись, щоб відповісти на такі питання (завдання): „Розкажи про Тараса Шевченко.”, або „Де знаходиться місто Ліверпуль?”, або „Коли почалась Перша Світова війна?”, або „Що ти знаєшь про білих ведмедів?” і т.і. Доцільно, щоб додатково програма заповнювала також таблицю „час дії”(подій, які конкретно датовані).
Для відповіді на складні (філософські) питання програмі не достатньо знайти відповідь у „запам ятованій” інформації. Вона повинна уміти робити з цією інформацією певні дії – переробляти („переосмислювати”) її певним чином. Надання програмі таких можливостей – це вже є друга фаза створення штучного інтелекту (здатного мислити).
Ця технологія не є догмою. Тільки створення реально діючої програми покаже спроможність даного підходу.
Чекаю пропозицій. З повагою.