Других заметных игроков на этом рынке вопросно-ответных систем я что-то не вижу.
Но вполне возможно что есть незаметные. Сейчас модно делать stealth-mode startup :).
Хорошо бы еще сделать программу, которая бы распознавала подмножество английского и транслировала его в FOL/HOL/DL :).
Тут даже два варианта возможны:
- controlled English - т.е. формальный язык но близкий к натуральному с широкими синтаксическими вариациями, но строго транслируемый
- распознавание фрагментов обычного языка
Для целей создания спецификаций это было бы весьма полезно.
Впрочем генерилка английского из ФОЛ тоже весьма полезна.
Можно кстати оба варианта и совместить: т.е. программа может подсвечивать те фразы, которые она распознала, ну а другим цветом - то, что не распознала. А юзер соответственно редактирует, до тех пор пока программа не поймет.
Т.е. некий микс UIMA с распознаванием естественного языка и трансляцией в логики.
Дык CYC занимается ровно этим (только в других статьях это описывает): транслирует в свой CycL естественный язык, даже не controlled. Говорят, что этот парсинг потруднее будет, чем синтез естественного текста.
Там не редактирование (у CYC), а некоторый диалог с переспрашиванием (иногда очень нетривиальным, посколько при переспросе привлекается обширная база знаний). Опять же, при переспросе нужен синтез речи.
Не удивительно, но весьма мало используемо. Вспомним COBOL с его "почти английским". Народ до сих пор содрогается от его упоминания. Тут уж более надёжно "понималка естественного языка" с переспросами, и попытки при формулировании фраз писать попроще (а в случае невозможности -- опять же переспросы).
Ну генерация естественного текста вообще относительно простая задача. Т.е. тут конечно есть сложности, но они скорее эстетического характера, а теоретически тут принципиальных проблем нет.
А вот парсинг естественного текста - это задача ИИ, потому как парсить - часто зависит от смысла текста. Т.е. тут сперва надо создать ИИ :).
Генерация нормального текста на естественном языке -- сложная задача, иначе не было бы комментируемой статьи. Там ведь появляются всякие референтные индексы типа "там" (pun intended).
С точки зрения computer science создание ИИ и парсинг естественного текста - задача нерешаемая вообще :). Т.е. тут суровые эвристики.
А генерация текста - решаемая.
Грубо говоря, есть много косно-говорящих и пишущих людей, но другие люди их все равно могут понять. Поэтому даже если компьютер будет немного коряво генерить текст - то это не страшно. А вот понять косно-говорящих людей компьютеру крайне сложно, ибо нужно понимать контекст, т.е. нужна огромная база знаний типа Cyc, как минимум.
Для задач специфицирования натуральный формальный язык очень важен, ибо спецификации должны быть точными, а обычный язык многосмысленен. Это одна из основных проблем спецификаций. В то же время, спецификации должны понимать обычные люди, не-программеры.
Поэтому всякие компании даже пытаются внедрять controlled languages в документации.
Т.е. спецификации нужно по любому писать на точном языке, а не на произвольном. Переспрашивалка тут лишь помогает человеку писать точно, а на выходе-то все равно имеем controlled lahnguage.
Вот к примеру текст на Attempto Control English "The discount is a:five-percent if the customer is a:premium and the product is regular. The discount is a:seven-and-a-half-percent if the customer is a:premium and the product is a:luxury. A customer is a:premium if the customer's a:previous-year n:spending is at least 5000 n:euro. A n:Porsche is a:luxury. A n:Honda is regular. p:Peter-Miller's a:previous-year n:spending is at least 5000 n:euro."
Т.е. текст обычный английский, но там есть аннотации для того чтобы устранять двусмысленности. Типа a:premium означает что premium это не существительное, а прилагательное.
В принципе, тут можно довольно простую переспрашивалку, даже без смысла сделать. Типа встретилась неоднозначность, компьютер переспросил noun or adjective?
Ну и движки типа UIMA сюда интегрируются. Т.е. компьютер может распознать к примеру Peter-Miller как имя человека и пометить соответствующим образом. А человек может уточнить, если он ошибся.