Опубликован: 23.10.2009 | Доступ: свободный | Студентов: 2818 / 107 | Оценка: 4.28 / 4.22 | Длительность: 17:27:00
Специальности: Программист
Лекция 9:

Грамматика

< Лекция 8 || Лекция 9: 12 || Лекция 10 >
Аннотация: Целью данной лекции является ознакомление студентов с современными программами и алгоритмами вывода, применяемых при выводе утверждений и "доказательств целей" в алгоритмах искусственного интеллекта. Также в ней даётся описание некоторых "моделей" искусственного интеллекта применительно к символьным вычислениям, в частности, разбора предложения на английском языке.

"ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ, раздел информатики, включающий разработку методов моделирования и воспроизведения с помощью ЭВМ отдельных функций творческой деятельности человека, решение проблемы представления знаний в ЭВМ и построение баз знаний, создание экспертных систем, разработку т. н. интеллектуальных роботов"

Электронная библиотека Кирилла и Мефодия, 2005 год

Цель лекции:

  1. Дать читателю представление о дисциплине: "искусственный интеллект";
  2. Ознакомить его с понятиями: "логический вывод", "продукция", "правила подстановки";
  3. Ознакомить читателя с основными положениями формальной грамматики, понятиями: "однозначная грамматика" и "синтаксическое дерево";
  4. Научить его пользоваться регулярными выражениями;
  5. Дать базовые знания для последующего изучения языков логического программирования.

До сих пор мы занимались простейшими операциями со строками - комбинацией строк и их выводом. Если бы все символьные вычисления ограничивались этим набором операций, то не пришлось бы писать эту книгу. На самом деле, "настоящие" символьные вычисления включают в себя синтаксические деревья, деревья вывода, грамматический разбор, поиск и замену текста, синтез текста и другие задачи "искусственного интеллекта". В этой части автор слегка "коснётся" этой темы в плане теории и простейших реализаций.

9.1. Введение

К символьным операциям относят:

  1. Операцию ввода-вывода строк;
  2. Конкатенацию (объединение) строк;
  3. Поиск по шаблону;
  4. Замену в тексте строки по заданному образцу;
  5. Грамматический, синтаксический и др. разбор текста;
  6. Прямой вывод;
  7. Обратный вывод;
  8. Построение "деревьев вывода";
  9. Семантический анализ текста;
  10. Построение фреймов и семантических сетей;
  11. Синтез "связной речи";
  12. И многое другое.

Эти задачи гораздо сложнее, чем численные расчёты на ЭВМ. К тому же научно они менее разработаны, чем численные методы. Но именно за символьными вычислениями - будущее отрасли высоких технологий.

Символьные операции могут применяться, например:

  1. При подготовке и рассылке электронной корреспонденции;
  2. При поиске во всемирной сети;
  3. При наборе и вёрстке текста;
  4. При проверке орфографии и стиля документа;
  5. При переводе текста с языка на язык (имеются в виду как "человеческие", так и "машинные" языки);
  6. При осуществлении "теста Тьюринга";
  7. В датамайнинге;
  8. При автоматической коррекции текста и перевода его из формата в формат;
  9. При разработке языков программирования и написании их трансляторов и компиляторов для них;
  10. и т.д.

Это - пример тех немногих областей человеческой деятельности, где применяются символьные вычисления искусственного интеллекта. Основы этих вычислений будут рассмотрены в этом разделе.

9.2. Построение деревьев вывода

Для начала рассмотрим игру "Животные", приведённую в [64]. Вот диалог работы с этой программой:

[Пример 01]

  • "Это кот?" - "Нет".
  • "Сдаюсь, кто это?" - "кит".
  • "Чем отличается кот от кит?" - "плавает в море".
  • "Сыграем ещё?" - "Да".
  • "Он плавает в море?" - "Нет".
  • "Это кот?" - "Нет".
  • "Сдаюсь, кто это?" - "студент".
  • "Чем отличается кот от студент?" - "ходит на лекцию".
  • "Сыграем ещё?" - "Да".
  • "Он плавает в море?" - "Нет".
  • "Он ходит на лекцию?" - "Да".
  • "Это студент?" - "Нет".
  • "Сдаюсь, кто это?" - "профессор".
  • "Чем отличается студент от профессор?" - "читает лекции".

Этот диалог формирует следующее дерево (см. рисунок 9.1):

Дерево вывода примера 01

Рис. 9.1. Дерево вывода примера 01

В этом дереве имеется "корень" - название игры ("животные"). От него исходят так называемые "бинарные ветви" - ветви, которым соответствуют ответы: "Да" или "Нет". Это дерево является моделью, полностью описывающее состояние игры: "Животные". С помощью этого дерева можно ответить на вопросы:

  1. Сколько необходимо задать вопросов, чтобы получить ответ: "студент"?
  2. Кто является "соседней ветвью" ответа: "студент"?
  3. Присутствует ли ответ: "студент" - в дереве вывода?
  4. Много ли не заполненных ветвей дерева (обозначенных: "Кто это")?

Для ответа на эти вопросы необходимо обойти дерево вывода в любой последовательности. Порядок (алгоритм обхода) не влияет на результат, но определяет эффективность работы программы.

Вот другой пример дерева вывода, вид которого представлен на рисунке 9.2. Рассмотрим грамматический разбор английского предложения: "The big elephant will eat pineapples tomorrow". ("Большой слон будет есть ананасы завтра").

Синтаксическое дерево при разборе английского предложения

Рис. 9.2. Синтаксическое дерево при разборе английского предложения

Как известно читателям, изучавшим английский язык, структура английского предложения является жёсткой и имеет следующий вид:

<Подлежащее><Сказуемое>[<Прямое дополнение>][<Обстоятельство>]
Листинг 9.1.

Подлежащее может быть только группой существительного, как и прямое дополнение, а сказуемое - основным и дополнительным глаголом. Группа существительных состоит из артикля, необязательного определения (прилагательного) и существительного (или местоимения). Обстоятельства являются группами существительного или наречиями.

В принципе, в этом предложении можно менять существительные и глаголы - это не должно влиять на правильность разбора предложения. Например, правильными также будут следующие предложения:

  1. An old man ate an apple yesterday.
  2. A small elephant is eating a ball now!

Однако второе предложение бессмысленно (кому-то оно может показаться даже непристойным). Это объясняется тем, что мы не рассматривали "осмысленность" предложения при выводе. Автор должен отметить, что задачи искусственного интеллекта понимания смысла текста и "осмысленного" генерирования предложений не решены уже более 50 лет (время появления первых ЭВМ с современной архитектурой). В основном из-за того, что до сих пор нет ответа на вопрос: "Что такое смысл"? Но это уже отступление от темы.

Итак, мы рассмотрели два дерева вывода, выяснили, насколько это "дерево" полезно при разборе и построении предложений, открыли новые возможности символьных вычислений. Однако построение всех деревьев вывода и анализ их человеком обычно очень трудная, если не сказать, "неподъёмная" задача. Нельзя ли оптимизировать выполнение этих задач? Можно! Об этом - в следующем подразделе.

9.3. Прямой и обратный вывод

Любой логический вывод основан на фактах, правилах (или продукциях). Факты могут быть представлены следующим образом:

[Пример 02]

/* Массиву строковых переменных names присвоены значения (язык Си плюс-плюс) */

names[0] = "Галя"; names[1] = "Нина"; names[2] = "Петя";

/* То же определение на языке Turbo Prolog */

names("Галя"); names("Нина"); names("Петя");

/* Определение массивов строковых переменных article (все возможные английские артикли) (C++) */

article[0] = ""; article[1] = "the"; article[2] = "a"; article[3] = "an";

Правила же определяются следующим образом:

[Пример 03]

/* Пример на C++ */

if( names[i] == "Галя" ) woman.name = names[i];

/* Пример на Turbo Prolog */

woman( N ) if N == "Галя" оr N == "Нина", name(N);

Выводом же будет автоматическое доказательство некоторого предположения, определённого как истинность одного из правил. Это правило называют "целью" вывода (по-английски: "goal"). При выборе цели возможно нахождение одного, нескольких или ни одного решения - списка значений переменных, участвующих в выводе.

Примечание. Множество решений - это, практически, множество предложений заданной грамматики, полученных в результате доказательства цели вывода. Определение грамматики см. раздел 2 лекции 10.

Когда написаны все факты и правила, необходимо написать алгоритм вывода. Он может быть одним из следующих:

  1. Вывод на основе системы продукций (или "нейронной сети");
  2. Вывод на основе правил (стандартный алгоритм вывода по прямой цепочке рассуждений);
  3. Вывод на основе правил (стандартный алгоритм вывода по обратной цепочке рассуждений).

Рассмотрим их поподробнее.

9.3.1. Система продукций (и "нейронные сети")

Вывод на основе системы продукций следующий:

  1. Определяются и вводятся "факты", на основе которых делается вывод;
  2. Описываются промежуточные переменные вывода и цель вывода;
  3. Составляется набор правил (продукций), последовательно задающие значения промежуточным переменным;

    Внимание! Порядок записи продукций имеет значение.

  4. В процессе написания продукций в текст вставляются операторы вывода значений переменных, когда это необходимо;
  5. В процессе работы системы продукций с реализацией "нечёткой логики" (по-другому: "нейронной сети") каждой продукции соответствует "коэффициент уверенности", который отражает степень доверия к этой продукции. Он вычисляется на основе коэффициентов уверенности доказанных фактов, правил, и коэффициента уверенности самой продукции.

После написания программы начинается этап её тестирования (или "настройки нейронных сетей" для нейронных сетей). На этом этапе можно менять порядок правил (продукций) и коэффициентов уверенности (для нейронных сетей). При этом новые правила не вносятся, а старые правила не удаляются, (это грозит целостности программы). Тестирование заканчивают, когда система продукций или нейронная сеть будет адекватно обрабатывать входные данные и выдавать приемлемые результаты.

Преимущества системы продукций и нейронных сетей:

  1. Высокая скорость работы, позволяющая обрабатывать данные в "реальном масштабе времени";
  2. Относительно простая реализация алгоритма в "процедурных" языках;
  3. Время работы программы пропорционально числу продукций в ней.

Недостатки этих систем:

  1. Они не подходят для кодирования "стандартным алгоритмом вывода". Программист должен реализовывать "с нуля" алгоритм нейронной сети или системы продукций.
  2. Невозможность предсказать поведение работающей программы;
  3. Сложность отладки. Для отладки необходимо при прогоне тестов менять только один параметр. Это делает отладку длительной по времени.
  4. Система продукций - это "чёрный ящик", не дающий пользователю объяснений о ходе своих рассуждений.
Примечание. Информацию о коэффициентах уверенности, их расчёту и применении смотри, например, в [57].
< Лекция 8 || Лекция 9: 12 || Лекция 10 >