Содержание
Небольшое введение
Sence Cognition — это инновационный стартап, основанный лишь в конце сентября 2013 года. Но в основе производимых разработок лежат более чем 15-летние исследования в области сильного искусственного интеллекта.
В области распознавания делается все больше успехов, но, увы, компьютеры все еще не понимают что и зачем распознают.
Сегодня уже, пожалуй, все, кто интересуется распознаванием образов слышал про «нейрон бабушки» и трудно найти человека в теме, который бы не знал про задачу обобщения и каких-то подходах к ее решению.
В рамках данной статьи не предполагается рассматривать существующие подходы, а будет предложен лишь авторский подход.
Зачем же нам нужно обобщать и при чем здесь распознавание смысла?
На первую часть вопроса (зачем нужно обобщать) лучше всего ответить сугубо технически: обобщения сильно уменьшают трудоемкость распознавания. Если представить обобщения как некоторую многоуровневую структуру, то на высоких уровнях мы будем иметь самый общий контекст распознаваемой ситуации. И этот контекст обычно наименее изменчив. Его же изменения оказываются довольно тонким ручейком изменчивых признаков с более низких уровней иерархии.
И тут как раз возникает ответ и на вторую часть вопроса (при чем здесь распознавание смысла), потому что эта иерархия есть иерархия смысла.
Да, смысл, сколько бы в это слово ни было вложено многообразия идей и представлений, в своей рафинированной сути, есть всего лишь иерархическое представление об ситуации.
Язык — отражение сознания
Ум человека это непрерывно классифицирующий механизм, цель которого — совершенствовать понимание разнообразных ситуаций, переходов между ними и наиболее постоянных составляющих всех этих ситуаций. Ведь недаром людей так волнует вопрос о смысле жизни. Смысл жизни — это стремление найти такую опору представлений, которая наилучшим образом охватит все многообразие жизненных ситуаций.
Человек уже создал очень неплохую модель той самой иерархии смысла, и эта модель — язык. Если точнее — письменная форма выражения мыслей. До создания письменной речи эта структура не была так ясно и точно сформулирована и выражена.
Письменная речь имеет на самом нижнем уровне выражения смысла отдельные символы.
Эти символы складываются в слова.
Слова складываются в элементарные фразы (на уровне подлежащее — сказуемое)
Из фраз складываются предложения и целые абзацы
Абзацы складываются в главы или части
Главы и части складываются в тома, тома в серии, серии в библиотеки
Эта модель может быть классифицирована множеством способов, но идея иерархии сохраняется вполне. Могут вводиться разнообразные способы организации (по темам, по авторам, по персонажам и т.п.), и это все составляет отражение того, как работает механизм обобщения в сознании человека.
Тут нужно лишь уточнить пару моментов, когда заходит речь о сознании человека. Исследователи нередко делают одну и ту же ошибку, пытаясь смоделировать отдельную личность, как экземпляр искусственного интеллекта. Сама задача вполне корректна, но вот решая ее, исследователи сужают и рассматриваемую область — сознание — до эфемерной идеи личного сознания. А вот такового в действительности найти нельзя.
Сознание следует рассматривать во всей полноте его происхождения. Эта полнота включает в себя разбегающиеся круги общения каждого индивида и процесс восприятия им множества мыслей от самого рождения. Тогда обнаруживается, что элементарная единица смысла вовсе не принадлежность отдельного экземпляра ума, она охватывает множество поколений и имеет свою, довольно непростую форму существования в обществе.
Но не будем слишком глубоко заглядывать в философию.
Цель этого уточнения лишь в том, чтобы переключить представление о смысле, как о чем-то неизвестно как возникающем в отдельном мозгу на представление о смысле как о том, что вполне можно воспринимать и распознавать. Смысл вокруг нас и общение — и есть восприятие и выражение смысла.
Скажем больше: нас интересует именно тот смысл, который полезен в коммуникации. Почему так — это вопрос отдельной большой дискуссии на тему того как вообще появилась жизнь (например, как симбиоз органелл в образовании эукариотов) и какова роль коммуникаций в этом процессе.
Как же, собственно, распознавать смысл?
Начать хочется с хорошей новости. Если взять любой текстовый файл — в нем уже проделана огромная работа по распознаванию смысла. Текстовый файл состоит из символов, все символы хорошо закодированы и эта кодировка весьма устойчива к помехам.
У нас стоит лишь задача обобщения, начиная с этих самых символов, в этих самых текстах.
Представим себе второй уровень смысла, если за первый принять символы.
Конечно же, это — слова. Слова очевидно имеют вполне устойчивый смысл. Здесь может возникнуть довольно серьезный спор, в отношении частей слов (корень, предлог, суффикс, окончание и т.д.)
Да, несомненно, словообразование — это отдельная задача анализа, но в нашем случае для классификатора важен устойчивый смысл схожих слов в практике их применения. Поэтому обойдем пока эту дискуссию стороной и подумаем, что значит слова, как они обнаруживается и чем так вредны знаки препинания и особенно пробелы в задаче обобщения символов до слов.
Начнем с того, что чисто статистически, слова это часто встречающиеся сочетания символов. Эти сочетания встречаются вполне устойчиво и куда чаще, чем чуть-чуть другие сочетания символов.
И вот здесь есть важный момент, который нужно учитывать в моделировании. Текст в текстовом файле содержит очевидные разделители, в то время как единица смысла в устной речи, с которой человек сталкивается с рождения и очень-очень долгое время — целая фраза, без явных разделителей. Слитная речь не просто создает трудности для распознавания. Она содержит в себе и кое-что важное в работе восприятия, и если работать только с письменным текстом, это важное не будет замечено, реализовано и уже на следующем шаге придется придумывать алгоритм обобщения слов в фразы. А это уже — хак.
Поэтому, с самого начала, алгоритм обобщения не имеет никакой другой информации о символах, кроме их автономной и взаимной статистики появления в текстах.
Во взаимной статистике и кроется главная механика алгоритма. При условии появления некоторого символа, в его окрестности с разной вероятностью ожидаются другие символы.
Для упрощения примера, можно строить бинарное дерево. Для строки МАМА МЫЛА РАМУ у нас для каждой пары символов можно определить взаимную статистику подтверждений и опровержений.
Например М… А подтверждается 2 раза и опровергается 3 раза начиная с М и 2 раза начиная с А.
Каждой паре можно присвоить некий индекс и далее собирать статистику троек и четверок символов. Тройка получается если в двух парах один символ совпадает, например РА переходит в АМ или Р.М переходит в Р… У.
Так выстраивается статистика переходов до достаточно больших обобщений.
Можно обозначить схему переходов как X[уровень+1][индексK] = Переход(X[уровень][индексM],X[уровень][индексN]), и для каждого такого перехода у нас есть два дополнительных значения — количество подтверждений и количество опровержений.
В результате, любой текст и любой фрагмент текста будет определяться как некий X[A][i].
В каждый момент времени, любой вновь исследуемый текст будет достаточно быстро формировать гипотезы о том, что в нем идет речь о некотором множестве обобщений-кандидатов.
Проще говоря, новый текст не читается символ за символом, а из него выбираются символы в последовательности, определяемой наиболее быстрой проверкой этих кандидатов на актуальность.
Таким образом, мы получаем контекст из постоянно меняющегося набора кандидатов в актуальные обобщения, какой бы текст мы ни скармливали нашему классификатору. При этом, классификатор будет выражать вполне определенное поведение, по обработке текста, пытаясь догадаться, какие обобщения применимы к данному тексту из уже известных ранее.
Оценка сложности алгоритма
Если бы мы просто собирали статистику сначала всех пар, потом всех троек-четверок, потом всех шестерок-семерок-восьмерок, выстраивая уровень за уровнем, то такой алгоритм генерировал бы триллионы пар уже на втором уровне, считая каждую пару символов на дистанциях от начала текста и до его конца.
Однако, наш алгоритм жаден, и он уже на первых сотнях символов построит обобщения многосотенных уровней и по этой причине последовательного построения всех возможных пар символов попросту не будет никогда.
Оценить же реальную сложность алгоритма — первичная задача текущих исследований.
Об этом мы расскажем уже после новогодних каникул.