CFA LogoCFA Logo Computer
Новости Статьи Магазин Драйвера Контакты
Новости
RSS канал новостей
В конце марта компания ASRock анонсировала фирменную линейку графических ускорителей Phantom Gaming. ...
Компания Huawei продолжает заниматься расширением фирменной линейки смартфонов Y Series. Очередное ...
Компания Antec в своем очередном пресс-релизе анонсировала поставки фирменной серии блоков питания ...
Компания Thermalright отчиталась о готовности нового высокопроизводительного процессорного кулера ...
Компания Biostar сообщает в официальном пресс-релизе о готовности флагманской материнской платы ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2002 ГОД

Я твой слуга, я твой работник

Дмитрий САХАНЬ Karina@st.lg.ukrtel.net

(Продолжение, начало см. в МК № 6—7, 9 (177—178, 180))

Строим словарный запас робота.

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

Как-то я проходил мимо футбольного поля, где ребята играли в футбол. Один из мальчиков, получив мяч, начинает двигаться к воротам противника. Перед ним появляется несколько защитников противника. В этот момент с другой половины поля его товарищ по команде кричит: «Сергей, открытый!» Сергей пасует крикнувшему — действительно, ведь он один из всей команды нападающих никем не заблокирован.

Мне, наблюдавшему эту сцену со стороны, был понятен смысл произнесенной фразы. В данной ситуации слово «открытый» обозначало возможность свободного продвижения принимающего пас к воротам противника. А представьте, например, если бы мальчик крикнул: «Сергей, микросхема!» Никто бы не понял смысла этой фразы, поскольку никому невдомек, какое отношение имеет микросхема к футболу. Очевидно, для построения системы распознавания смысла важен как словарный запас робота, так и соотнесенность слов и словосочетаний с происходящими событиями. Я предлагаю вам следующую идею организации словарного запаса робота.

Итак, выделяется одна матрица, которая будет содержать весь словарный запас робота. Каждое слово (либо словосочетание) помещается в отдельную ячейку матрицы. Текст слова помещается в поле Name соответствующей ячейки. Чтобы нашему роботу не ударить в грязь лицом перед представителем культуры, пересыпающим слова сленгом, руганью или терминологией, реально включить в одно поле различные варианты данного слова, в том числе иноязычные (мы же понимаем фразы типа «Okay, я согласен»). Не забываем и о том, что поле Name в своем внутреннем подполе Description позволяет для каждого имени указать его описание — то есть, запросто можно расположить, например, соответствующую данному слову энциклопедическую статью (между делом — у нас уже получается что-то похожее на многоязычный энциклопедический словарь). Поле DataType и поле Content используете по своему усмотрению. Возможно, вы захотите прикреплять какую-то дополнительную информацию (картинки, данные, ссылки и т. п.) к каждому слову. Эти два поля как раз подходят для этих целей. Поле Catenation содержит список употреблений данного слова в разных областях знаний робота. Фактически, в это поле помещаются указатели на ячейки других матриц, содержащие известные роботу знания о нем. Одно слово в разных областях знаний может обозначать совершенно разные понятия. Поле Catenation перечисляет все варианты понятий данного слова в разных областях знаний робота. Каждый указатель на ячейку матрицы состоит из двух частей. Если левая часть указателя равна нулю (не указана матрица), значит, такой указатель обозначает, что данное слово не относится к какой-либо определенной области знаний, а его универсальный для всех областей смысл находится в ячейке некоторой предопределенной матрицы, где ячейка этой матрицы задана правой частью указателя. То есть, нуль будет подменяться каким-то реальным номером заранее предопределенной матрицы, а номер ячейки возьмется из правой части указателя. Если же левая часть указана, а правая равна нулю (нет номера ячейки, а матрица указана), тогда такой указатель обозначает лишь отношение данного слова к соответствующей области знаний, но не его трактовку (вспомните, например, как мы говорим: «Это что-то из области медицины, но не знаю, что точно»). Ну, а когда и левая, и правая части указаны, будем считать, что указатель отсылает к возможной трактовке данного слова.

Теперь посмотрим, как все это работает. Робот играет в футбол. Считаем, что его система опознавания происходящих событий установила, что сейчас происходит событие, ну допустим, с номером матрицы 24 (предположим, ее имя «Играем в футбол»). В какой-то момент робот слышит фразу: «Сергей, открытый!» Сработала система распознавания произнесенной фразы. Опознала первое слово «Сергей», передала его на дальнейшую обработку системе распознавания смысла. Вот сейчас то место, где принимается за работу система опознавания. Она производит поиск в матрице словарного запаса той ячейки, в которой записано слово «Сергей». Найдя требуемую ячейку, система анализирует список указателей в поле Catenation этой же ячейки. Представим, что в этом списке есть только один указатель 0:8. При анализе игнорируются все указатели, идентификатор матрицы которых не равен содержимому, допустим, ячейки 24:5 (матрица «Играем в футбол», а имя пятой ячейки, предположим, будет «На какой области знания построен футбол»). Как можно догадаться, в ячейке 24:5 хранится номер матрицы, являющейся областью знания робота о футболе. Предположим, что в ячейке 24:5 хранится идентификатор матрицы 57 (допустим, ее имя «Знания о футболе»). В результате анализа наша система не нашла ни одного указателя на матрицу с номером 57. Значит, система уже может сделать один вывод: слово «Сергей» не относится к знаниям о футболе. Поэтому система выполняет второй раз анализ списка указателей. Но теперь она ищет первый указатель с левой частью, равной нулю. Помните, как было сказано, что нуль будет подменяться реальным идентификатором заранее предопределенной матрицы (предположим, это будет матрица 11, имя которой «Универсальные знания»). На второй стадии анализа система нашла указатель 0:8. Для себя подменяет нуль на 11, в итоге получается указатель 11:8 (матрица «Универсальные знания», а имя восьмой ячейки, предположим, будет «Имена людей»). Таким образом, система опознала смысл слова. Она выяснила, что слово «Сергей» принадлежит к классу имен людей и, вероятнее всего, этим словом к кому-то сейчас обратились. Более того, система владеет указателем на трактовку данного слова. А ведь распознавание смысла необходимо системе принятия решения. И она ждет этот указатель от системы распознавания — по этому указателю расположена очень важная для системы принятия решений информация (что предпринять, как это выполнить и т. д.). Теперь представьте, что система принятия решений находит в ячейке по указателю 11:8 такие инструкции к действиям: 1) определить, находится ли в вызывающей матрице объект с этим именем; 2) если он есть, тогда определить, принадлежит ли это имя самому роботу; 3) если имя принадлежит роботу, продолжать анализировать фразу дальше, иначе остановить распознавание.

Нашего робота зовут Сергей и обращались к нему, а значит, анализ выполняется дальше. Теперь опознано второе слово — «открытый» — и оно опять передается системе распознавания смысла. Все снова закрутилось по тому же сценарию. Нашли в словаре ячейку со словом «открытый». Анализируем список указателей поля Catenation этой ячейки. Допустим, там есть три указателя (15:67, 57:25 и 38:21). На первой же стадии анализа нашли указатель на ячейку 57:25 (матрица «Знания о футболе», а имя 25-й ячейки, предположим, будет «Неприкрытый игрок»). Полученный указатель передается системе принятия решений. И она с вопросом «что же мне предпринять?» смотрит на данные в указанной ячейке. А там хранятся следующие инструкции: 1) проанализировать вероятность дальнейшего продвижения к воротам противника; 2) если вероятность не превышает 80%, тогда отдать пас Рис. 1кричащему, иначе продвигаться к воротам самому.

На данной картинке изображен механизм выполнения описанных операций при работе системы распознавания смысла. Матрица 24 является вызывающей, поскольку в ней произошло внешнее событие (кричали), и именно для этой матрицы инициирована операция распознавания. Естественно, что матрица 24 не знает, где расположен словарный запас робота. Это знают внутренние функции системы распознавания программного движка. А в их обязанности тоже входит знать, какая матрица будет заранее предопределенной, а также выяснить, на какие дополнительные матрицы (знания) опирается матрица 24. И уже по этим данным провести распознавание.

Подключаем эмоции

Вот уж точно подмечено: «Словом можно и убить». Как иногда остро человек реагирует на произнесенную фразу! Всего лишь незначительная на первый взгляд подмена слова в предложении может в корне преобразить его смысл. И даже если с формальной точки зрения смысл предложения не меняется, эмоционально фраза может восприниматься совершенно иначе. Посудите сами, как меняется эмоциональная окраска, например, таких фраз: «Слышишь, ты, солнышко мое» и «Послушай, солнышко мое». И в первом, и в другом случае логически говорили об одном и том же. Но эмоционально фразы воспринимаются по разному. В первом случае начало «Слышишь, ты» придает окраску пренебрежительного обращения к человеку. Вторая фраза намного мягче первой. Отсюда делаем простой вывод: слова имеют свой эмоциональный вес и, в зависимости от него, могут придать негативное или позитивное отношение к тексту. Представьте, если бы вам кто-то сказал такое: «К пяти домажем три и будет восемь». Вы бы наверняка поняли смысл предложения, но отметили бы про себя грубость собеседника.

А теперь попробуем научить робота получать эмоции от услышанной речи. Я предлагаю следующую идею. Обратите внимание, что в предыдущем разделе мы не использовали поле DataWeight ячеек словарного запаса робота. Если в это поле для каждого слова занести некое число, характеризующее его как приятное или неприятное для слушающего, то для любой фразы можно получить какое-то количественное положительное или отрицательное отношение к ней. Рассмотрим это на примере предложенных ранее фраз.

Допустим, слову «слышишь» мы присвоим негативный вес в -100 единиц, слову «ты» — негативный вес в -10 единиц, слову «солнышко» — положительный вес в +50 единиц, слову «мое» — вес в +25 единиц и слову «послушай» — вес в -10 единиц. Теперь сложим все значения для каждой фразы отдельно. Для фразы «Слышишь, ты, солнышко мое» мы получим негативный вес в -35 единиц. А вот для фразы «Послушай, солнышко мое» этот вес уже будет положительным и равен -10+50+25=65 единиц. Таким образом, робот получает числовое выражение эмоционального отношения к сказанному. Уже на основании этих чисел он может судить, как ему отнестись к чужой речи. Диапазон значений поля DataWeight позволяет варьировать эмоциональную окраску предложения в достаточно больших пределах (от неприязни до симпатии и т. п.)

Как научить догадываться

В одной из передач «Поле чудес» был вопрос (к сожалению, я уже не помню его точную формулировку) о том, что изготовляли в прошлом в некой стране из водорослей. Причем, что немаловажно, это нечто изготовлялось именно для человека. Сначала никто не мог понять, что имелось ввиду. После того, как Якубович жестами постарался подсказать игрокам отгадку, стало ясно, о чем шла речь. Он намекнул на длину водорослей, их структуру и цвет. А игрокам осталось только догадаться, что это был парик.

В данном случае весь процесс догадки выглядит приблизительно так. Игрок по подсказанным признакам (длина, структура, цвет) выделил из данных о человеке все, что имеет сходные признаки. Далее, сравнив названия выделенных признаков с уже открытыми буквами, игрок догадался об ответе. У игроков разный объем накопленных данных о человеке, поэтому один игрок успевает догадаться, а другой и до конца игры не поймет, о чем речь.

Чтобы научить робота догадываться, необходимо по возможности каждое желаемое для догадывания свойство снабдить указателями на сходные свойства других объектов. Естественно, глупо пытаться связать все с всем. Робот изначально может иметь только какой-то базовый набор связок, а остальные вдруг понадобившиеся свойства связывать уже в процессе своей эволюции — так же как маленький ребенок развивается постепенно, а не сразу в момент рождения знает все.

Поле для указателей у нас уже есть. Это поле Catenation ячейки матрицы. Но нам нужен не просто указатель, а указатель с возможностью задания величины схожести одного свойства с другим. Ведь, к примеру, длина водорослей может полностью совпадать с длиной волос, или не совсем, или частично, и т. д. По отношению к длине руки она совпадает на столько-то и столько, по отношению к ноге — на столько-то и вот столько. У кого величина схожести больше, тот и ближе к результату догадки.

Поскольку поле Catenation включает в себя помимо полей указателя поле Relation, то мы можем поместить в него величину схожести данного свойства с другим свойством, определяемым указателем поля Catenation.

Что мы получили в результате? Ячейка матрицы с данными о водорослях снабжается серией указателей схожести с разными объектами. Обратите внимание, что указатели могут быть перемешаны с другими типами указателей. Вспомните пример со словарным запасом робота. Ведь поле Relation может трактоваться по вашему собственному принципу. Например, если в нем 0, то это указатель словарного запаса, 1 — указатель чего-то еще, 2 отсылает еще к чему-то, а все остальные значения — указатель с соответствующей величиной схожести. Теперь робот анализирует список указателей. Есть схожесть с длиной такого цветка. Нет, не подходит. Есть схожесть с цветом такой птицы. Нет, опять не то. Есть схожесть с чем-то еще ... и так далее. Ага, робот ничего не нашел, а значит, не смог догадаться, о чем речь. Потом ему сказали ответ, и он вносит в данные о водорослях, что из них когда-то делали парики. Но еще он обязан в поле указателей ячейки данных о водорослях добавить указатели схожести водорослей с волосами по длине, цвету и структуре. Естественно, каждый указатель должен быть снабжен своим значением величины схожести.

Почему робот обязан это сделать? А потому что если этого не сделать, то он будет обычной железкой, неспособной размышлять. Ему задают вопрос: «Что в прошлом в такой-то стране изготовляли из водорослей для людей?» Он отвечает: «Парики». Ему задают следующий вопрос: «Что в прошлом в соседней стране не захотели изготовлять из водорослей для людей?» Он отвечает: «Не знаю». Хотя с правильно написанной системой анализа, ориентирующейся на указатели схожести он должен был бы догадаться. Вот почему он обязан это делать.

Заключение

Роботы нужны везде. Естественно, они могут создаваться как во благо, так и во вред. Хотелось бы, чтобы было побольше хороших целей, но это уже вопросы этики разработчика. Просится намек, но он будет выражен необычной гипотезой. Думаю, вы поймете, насколько могут оказаться важны ваши усилия для развития человечества.

Жила-была одна цивилизация. Шло время. Цивилизация развивалась. И наконец, достигла того уровня, когда научилась делать искусственных живых существ. Прошло еще время, и было решено провести конкурс на лучших искусственных существ. Энное количество самых лучших существ было отправлено на корабле в далекий космос. Неизвестно почему, но именно Земля стала родным домом этих существ. Шло время. И уже новая цивилизация развивалась на Земле. Вот уже и эта цивилизация научилась делать искусственных существ. Вот уже и они проводят конкурс. И вот уже с Земли поднимается космический корабль, чтобы увезти новую жизнь в далекие просторы космоса. Возможно, ее создатели уже никогда не увидят своих детищ, как и не увидят величественный расцвет будущей цивилизации. А жизнь будет идти своим чередом, сквозь все цивилизации и эпохи.

Я не хочу навязывать вам каких-либо гипотез, но посмотрите на нашу цивилизацию глазами стороннего наблюдателя. Нет сомнения в том, что на Земле именно человек венчает эволюцию. Теперь представьте, что произойдет, когда человек научится делать по-настоящему живых существ. А я в этом уверен, он их сделает. Не сегодня и не завтра, пройдет еще очень много времени, но человек станет делать роботов, потому что они ему нужны. Будут совершенствоваться технологии изготовления, будет расти опыт создания искусственных существ, и когда-нибудь придет время, когда из под «скальпеля» робототехников выйдут те же Адам и Ева. Я не имею ввиду, что они будут похожи на библейских персонажей. По большому счету, это и не так важно. Важно лишь то, что они будут похожи на людей способностью воспроизводить себе подобных и существовать без посторонней помощи. И знаете, почему человек когда-нибудь это сделает? Потому что этого требует эволюция. Но эволюция не самого человека, а земной цивилизации — огромного живого организма.

Можно сколько угодно говорить, что из немыслимого количества планет Вселенной только на одной Земле случайно правильно легли друг к другу молекулы углерода, образовав когда-то первую клетку, из которой потом вышла вся земная цивилизация. Которая, в свою очередь, уже приближается к синтезу этой самой жизни искусственным путем. Неужели человек нарушает теорию эволюции? Ведь еще ни одно живое существо на Земле не порождало новую ветвь жизни таким образом. Неизбежно возникает вопрос: если человек произошел от какого-то существа на Земле, то почему между человеком и всеми земными существами такая пропасть в развитии? Разве кого-то из наших четвероногих друзей заботит мысль о существовании подобных им существ где-то еще во Вселенной? Кто из них пытался, например, помолиться Богу или создать себе помощника, который бы готовил еду, убирал жилище и т. д.

Мы не воспринимаем свою цивилизацию как живой организм. Но согласно той же теории эволюции, и он эволюционирует, и тоже способен порождать себе подобных —другие цивилизации. Человек — это как бы родильная часть цивилизации. Им создается зародыш (первые живые роботы), им же они развиваются (создаются более совершенные модели, их взаимосвязи между собой — грубо говоря, кто у кого будет на побегушках), и только потом происходят «роды» (не у себя же на планете, где уже есть жизнь, причем довольно агрессивная и жестокая — с ней человеку делать нечего, только «прогибаться»).

Да, все это гипотезы. Но согласитесь, они также неплохо объясняют разницу в развитии между человеком и другими земными существами. Одним словом, инопланетяне, боги и все такое.

(Продолжение следует)

Рекомендуем ещё прочитать:






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы или вычислите пример: *
captcha
Обновить





Хостинг на серверах в Украине, США и Германии. © sector.biz.ua 2006-2015 design by Vadim Popov