PHP SDK для Windows Azure
Очень своевременно, есть вероянтность что запущусь с AI модулем здесь. А пока учимся локально...
![]() | You are viewing Log in Create a LiveJournal Account Learn more |
Реализовал в search wave сервисе матмодель из AI блока, или другими словами применил базу знаний для поиска. По тому контексту которому система обучалась (или около того контекста), результат получается отличный. Так по запросу google (а система эту тему не проходила, только соседние, такие как Internet) она отыскала на второй или третьей странице поисковой выдачи сниппет:
Google search is a web search engine owned by Google Inc. and is the most-used search engine on the Web. Google receives several hundred million queries
А это для меня был коварный запрос т.к. гугл информацию о себе задвигает глубоко в выдаче.
Теперь нужно залить базу знаний на сервер, если хостер разрешит, и можно будет расшарить с AI движком. И учить систему, учить, учить.
Кстати придел кнопочку [next]: по ее нажатию на вход системы подается ее выход, т.е. сам результат, и система ищет новую информацию. Получается непрерывный генератор знаний в рамках заданной темы.
Что на сейчас плохого: результирующая информация бывает обрывается в неожиданных местах. Пока вижу один способ, но он затормозит немного выдачу. Буду еще думать.
В общем проект получается довольно интересный, может занять место поисковой системы завтрашнего дня. Но есть проблемка: даже с собственной базой знаний он все еще является надстройкой над поисковой системой (Яндекс, Гугл – неважно) и без нее не работает.
Основа положена, но качество, как справедливо заметили на одном форуме, хромает. Что не удивительно, из 40 результатов запросов сделать вывод системе с нулевыми знаниями о пригодности той или иной информации можно только с большой долей условности.
А что системе не хватает? А не хватает ей собственной базы знаний, т.к. гугл далеко. И вот тут сошлись звезды:
База правда не выжила после перестановки серевера, зато остались алгоритмы по ее формированию. Поэтому план такой:
шаги 2-3 повторять ежедневно, благо структура коллизий не предусматривает.
Любопытно что делать с фрагментарностью обучения. Скорость обучения порядка 100 запросов в сутки. Темы – связанные с первоначальным запросом. Т.е. имеем узкоспециализированное обучение. Варианты:
Наконец починил калькулятор в ботах q@ & agent@. Так что теперь можно снова приставать с вопросами вида: =2+2*2.
Идея возникла под влиянием двух сервисов: планируемого Google wave и недавно запущенного Wolfram alpha. Суть в следующем: организовать поиск информации в Интернет как волны - вводим запрос, получаем ответ. Есть поля ввода рядом с ответом и с новой строчки. В первом случае поиск производится в контексте ответа, во втором - в новом. Выглядит почти как деревовидный форум. Т.е. получаем форум с двумя участниками - пользователь и система. Вот такой:
Положил сюда: http://newisearch.com/wave
За ответы системы отвечает Google и несложный AI-алгоритм. Общение увы только на английском.
Текущий вывод системы:
internet | web | site | inform | servic | websit | web site | resourc | welcom | librari | onlin | access | contact | public | research | similar page | librarian | catalog | univers | refer | educ
Проблемы здесь:
По поводу 2-й проблемы, попробовать:
Что это даст? Подпитку уже активированных элементов + более полный контекст.
… Получается фигня и вот почему: мы активируем все козырные элементы, а потом считаем их уставшими. Дилема: отличить элементы стека КАТ от спонтанно активированных. {Думает}
Если на каждой итерации активировать по, скажем, 5 элементов, то геометрическая прогрессия через несколько циклов возбудит почти всю сеть! И никакая КВП не поможет. Можно, конечно, нормализовать активности, но это лишь уменьшит общий фон.
Собственно, проблема.
Неплохим вариантом бы было если возбужденными будут только активные элементы в стеке. Как бы это обыграть...
Так, ближе к корню - а зачем тогда вообще возбуждение? Затем что последующий элемент активируется основываясь на связях с активными элементами. Т.е. чтобы выбрать следующий активный элемент. Сейчас я это делаю искусственно-приближенно.
Хорошо, тогда другой вопрос: как строить проекцию? Хм...да также!
Ок, далее - как перестраивать проекцию. Очищать целиком/добавлять новые/оставлять только стек и связанные с ним/... ?
Пассивная модель выполнила свою задачу – послужила прототипом, на котором я смог отработать математическую модель. Дальнейшие шаги – создание активной модели, в которой элементы будут иметь возбуждения (активности).
Немного по текущей модели, все в кучу, но зато не вырубить топором:
Выделяем две области памяти – сознание и подсознание (подойдут любые другие названия, не суть):
| Подсознание | Сознание |
| Хранятся все связи системы, когда либо добавленные, своего рода архивная память только с командной insert | В сознании находятся активные элементы. После угасания сигнала элемент удаляется |
| RAW (исходная, сырая) сеть | Активная проекция подсознания |
| Все связи, устанавливаемые в области сознания, копируются в подсознание | Связи формируются по принципу – от активных элементов к текущему |
| На основании текущей структуры сознания выполняется построение проекции подсознания | Изначально элементы активируются извне. Далее согласно правилам распространения возбуждения в рамках проекции |
И так, на каждом такте работы системы анализируются текущие активные элементы, и на их основе перестраивается проекция. Что это значит? Мы получили внешнюю активность, согласно которой добавили элементы в сознание. Далее, на их основе построили проекцию – сеть. Перераспределили возбуждение.
Отлично, значит перестроение проекции есть добавление пассивных элементов в сознание, а далее на этапе пересчета, некоторые из них могут быть активированы. Не активированные элементы удаляются. Получаем трех-ступенчатый отбор – сначала отбираем пассивные элементы, релевантные текущему контексту. Затем активируем некоторые из них (а точнее все но в разной мере). Затем выбираем новый текущий элемент как имеющий максимальное возбуждение. Здесь все!
Динамика сети на бумаге вроде сложилась, теперь в код. А главное – данная модель удовлетворяет свойствам голографичности и абстрагируемости.
Смоделировал процесс мышления на примере чтения статьи об Интернет в Википедии. Полученный графический ряд загнал в видео, что и демонстрирую:
Легенда:
Внизу экрана – читаемый текст.
Серым – текущий элемент.
Бежевым – активные элементы.
Белым – связанные элементы.
Текст полностью:
The Internet is a worldwide, publicly accessible series of interconnected computer networks that transmit data by packet switching using the standard Internet Protocol (IP). It is a network of networks that consists of millions of smaller domestic, academic, business, and government networks, which together carry various information and services, such as electronic mail, online chat, file transfer, and the interlinked web pages and other resources of the World Wide Web (WWW).
А теперь собственно описание, что мы видим. Считывается фрагмент текста, в нем выделяются ключевые слова. На основании ключевых слов строится проекция сети. Читаются новые ключевые слова и проекция перестраивается.
Теперь о проекции. Именно данный мультик позволил мне понять очевидную вещь. Сеть и ее проекция есть подсознание и сознание! Причем свойства полностью совпадают. Так как же взаимодействуют между собой сознание и подсознание, и почему мне не подошел алгоритм нейроподобных сетей?
Сначала о различиях: ключевой момент здесь в том что вся активность производится на уровне сознания. Подсознание всегда пассивно, при этом в нем хранятся абсолютно все взаимосвязи. Сознание же временно и хранит только активные элементы.
Теперь к алгоритму:
Да, запись в подсознание – это, в терминах SQL, всегда INSERT, и никогда UPDATE. Своеобразная архивная таблица, в которую мы всегда добавляем знания, и никогда не изменяем. Изменения сказываются в сознании.
Так а в чем же отличие от классических НПС? В нейросетях активность новых элементов расчитывается на основании их связи с уже активными. В нашем же случае в проекции живут только активные элементы, а новые подтягиваются из сети.
Вывернув алгоритм наизнанку получил аналог процесса распространения сигнала в нейроподобных сетях, но на качественно ином уровне. Теперь модель мышления довольно сильно напоминает человека, любопытно наблюдать и сравнивать. Теперь следующий этап – нужно научить систему читать. Вопрос – чем отличается чтение сказки о колобке от теории большого взрыва? И там и там буквы да и сами слова известные. Однако можно прочитать и то и другое, но в памяти останется только колобок. В таких случаях говорят – не одолел. А что такое “Одолеть” и как научить информационную систему одолевать?
Собственно этим вопросом я провоцирую себя.
Так, раньше я добавлял связи основываясь на временном принципе: встретил подряд два элемента – связал. Теперь настала пора отменить этот принцип – сделать временную связь очень и очень слабой. Соответственно, в проекции, она станет сильной либо при частом повторении, либо при наличии данной связи в базе знаний.
В этом простом абзаце скрыт следующий виток развития сети, нужно обдумать.
Выскажусь ненаучно, но, как, всегда, для себя. Что общего у игры “Life”, теории динамических систем и фракталов? То что значение выхода подается на вход. Т.е. системы замкнуты сами на себя. В теории управления на лекциях нам это называли обратной связью. А если подать выход алгоритма округления на его вход? Здесь уже операции производятся не над скалярными величинами, поэтому связь не может быть положительной или отрицательной, она не имеет знака. Получим похожий эффект распространению сигнала в нейроподобных сетях для активации группы релевантных элементов. Но! Это принципиально новый алгоритм, который, если отбросить более высокое быстродействие, позволяет выделять группы элементов, релевантных заданным с одновременным абстрагированием.
Встает вопрос о выделении активной точки. Она должна опиратся на отношение с пассивными элементами и на отношения с масивом угасающих элементов. Так, в простейшем варианте, вес пасивных равен 0.1, активных = 1. В продвинутом – вводить модель угасания сигнала, и завязывать на него вес.
И важный вопрос, не забыть, результаты деятельности системы должны оставлять след.
В общем, конечно, пилить и думать, но шансы что данная, довольно простая модель, сможет удовлетворить критериям управления знаниями, есть. И надо их использовать.
Округление знаний удалось вывести на нужный уровень. Так, по запросу Internet, результат выглядит так:
Все ключевые слова на графике довольно релевантны. И так, чего удалось добиться: по любому запросу получаем округленную проекцию сети. Так сказать, взгляд сверху. Активировав любой элемент, можно перестроить проекцию.
Zoom in проекции должно постепенно привести к последовательности. Для этого нужно определить параметры приземления.
Засиделся чего-то я с jabber ботами…Пора назад, к основной и любимой теме – системе управления знаниями. Так подумал, а ну ее, эту озвучку. На сейчас ну. Гораздо интереснее поработать с динамикой сети, и с логическим выводом. Т.е. по некоторому запросу мы определяем контекст и строим проекцию, а далее начинаем с ней играться.
Пока поиграемся вокруг области “Internet”, на очереди “Universe”.
И так, мы построили некоторую проекцию знаний. Что можно сделать с ней дальше?
А сбоку вывести результаты поиска Гугл по текущему контексту либо непосредственно тексты с максимальной плотностью ключевых слов.
Получится инструмент, которому быстро придумываем имя – Knowledge Explorer. Идеальная реализация была бы конечно на MS Surface, но за неимением гербовой потаскаю пока знания мышкой.
И так, Knowledge Explorer. Назначение:
Недостатки:
Базы знаний можно делать тематическими, плюс они будут расти под манипуляциями пользователей. А можно корпоративными, натравить на корпоративное хранилище (например, портал). Эх, чей-нибудь бы поисковый индекс поближе (на расстоянии локала либо удаленно но на прямых запросах без парса) + кэш веб страниц…
В общем, делаю… Жаль в веб легко не выставить.
В настоящий момент сервисом изучения английского языка через Jabber пользуются около 300 активных участников (без учета выпусников и отчисленных), генерирующих суммарно около 10 сообщений в минуту. С нашей стороны было бы нечестно изолировать друг от друга такое количество человек, объединенных одной темой, поэтому мы решили создать английский клуб, что есть ничто иное как микроблогинг обучающихся с возможностью добавлять посты прямо из jabber клиента. Темы для записей:
Команды:
Адрес клуба en.clisearch.net
Личная просьба всем кому нравится сервис – поддержите начинание, разместите несколько постов по обозначенным темам. Пора добавить в сервис социальную составляющую, он к этому готов. Также приветствуются замечания/дополнения по описанию/наполнению сайта.
Ну и собственно все посты по английскому боту будут теперь там же (RSS для подписки есть).
Случилось. Мы таки починили неправильные глаголы, и теперь они в русском переводе именно глаголы а не существительные. Больше не будет заданий вида:
Введите пропущенную форму неправильного глагола ПОРОДА:
breed, ____ , bred
Все замеченные неточности в переводе глаголов присылайте на адрес yudinvs гав gmail.com. Там разберутся.
Частенько требуется словарик, перевести то или иное слово. Качество работы сервиса Google.Translate пока вызывает лишь улыбку, а ползать каждый раз на Яндекс.Словари надоело.
Думал что проще - уговорить Яндекс сделать J-сервис перевода или пропарсить Яндекс.Словари самому. Но вот блин осенило, у меня же есть готовый словарь на 30 000 слов, что для 80% случаев более чем достаточно! Добавляем к существующему англо-русскому еще русско-английский, словоформы (чтобы бежать и бежал одинаково воспринимались), немного программинга и - готово! Словари прямо с вашим любимым учителем (или учительницей, не знаю куда оно правильнее) английского.
Формат команды простой: =слово. Язык я уж как-нибудь сам угадаю, как и направление перевода. А равно нужно чтобы не спутать слово с ответом на домашнее задание.