среда, 26 января 2011 г.

Самые большие промахи современной компьютереальности

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

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

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



* Компьютерный поиск может найти всё

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

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

Решение: Точный семантический поиск

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



* Семантика, ограниченная экспертами, машинами, форматами и технологиями

Семантика частично уже давно доступна людям, причастным к программированию: по сути, объекты и действия приложения и составляют семантику некой предметной области. Эта семантика может использоваться людьми только при помощи пользовательского интерфейса, который связывает объекты и действия с образами или словами естественного языка. Семантический Веб сделал семантику еще более доступной. Однако, к сожалению, только для экспертов и машин. Его стандарты слишком сложны для восприятия обычным пользователем (и сами эксперты отмечают, что Семантический Веб не имеет удобного представления для пользователя). Другая проблема заключается в том, что, по сути, Семантический Веб только продолжает то, что начали бинарные форматы и XML: он представляет данные в более универсальном формате. Это касается именно данных, которые обычно упорядочены. Но в мире достаточно много и неупорядоченной информации, что делать с ней?

Отдельные технологии и форматы пытаются представить семантику собственными средствами, но это еще больше ограничивает ее. Так EXIF может содержать дополнительные "метаданные" для изображения, набор которых всегда ограничен. Онтология Семантического Веба может хорошо описывать определенную предметную область, но мы часто легко пересекаем границы областей (например, онтология музыкальных дисков может подразумевать имена артистов, но кто может гарантировать, что нам не понадобится выборка артистов, которые жили в определенном городе, в определенный период времени?). Metaweb (который сейчас является частью Google) предлагает автоматическое определение сущностей, каждой из которых может соответствовать множество различающихся написаний. Однако на их сайте написано, что они оперируют немногим больше дюжины миллионов таких сущностей. При этом сейчас живет несколько миллиардов людей (каждый из которых и является такой "сущностью"), мы используем несколько миллионов географических названий, произведений искусств, и т.п. и т.п. Готова ли данная технология к миллиардам сущностей и готова ли она предоставить алгоритм, который сможет точно отличать совпадающие имена в автоматическом режиме?

Решение: Доступная семантика

Нам необходима форма, которая сделает семантику доступной обычным пользователям. Эта форма должна связывать представления, понятные простому пользователю, с семантикой. Сейчас подобные связи устанавливают, в основном, приложения, но ведь для каждой идеи не создашь отдельное приложение. Более того, семантика должна представлять собой не набор ограниченных форматов, а, скорее, быть набором атомарных форматов, которые связаны между собой. На самом деле, каждое слово естественного языка является таким атомарным форматом. Именно поэтому вы можете знать, что такое "заяц" без углубленных познаний в зоологии или физиологии.



* Ложная аналогия для представления информации

Обычно, файловая система сравнивается с документами или книгами в офисе (поэтому мы используем такие термины как файл/папка/каталог). Однако эта аналогия соответствует внутреннему механизму управления документами, когда вы должны знать в какой папке находится та или иная информация. Но ситуация меняется, когда вы находитесь извне системы: тогда вы просто запрашиваете информацию и получаете ее (также, как ум не знает в какой части мозга расположена нужная информация). Этой "внешней" схеме запроса информации соответствует поиск, однако он несовершенен и быстро перенаправляет нас к внутренней схеме, предоставляя URI или пути файлов, которыми мы должны оперировать в последствии. В Интернете мы пользуемся все той же схемой: Веб серфинг по сути представляет собой простое копирование файлов.

Решение: Идентификация

Роль имен файлов и URI заключается в идентификации информации. Но так как эта идентификация ставит целью уникальность в пределах определенной компьютерной сущности (каталога или системы доменов), и на нее не накладывается никаких семантических ограничений (вы можете положить музыку в папку "Видео"), она становится бессмысленной. Вместо этого нам нужна идентификация, которая будет не только совпадать с той идентификацией, которую мы используем в реальной жизни, но также и расширять ее (так например, в реальной жизни у нас просто нет возможности идентифицировать отдельные эпизоды фильма или отдельные части приложения, которые мы обычно описываем при помощи нескольких предложений). Главная цель идентификации: отвечать на вопрос "Что это?" по отношению к любой информации, будь это веб страница или файл. Причем, результаты идентификации не должны теряться при копировании на другой компьютер, а, следовательно, она должна давать результаты, которые будут поняты на любом другом компьютере.



* Интерфейс, приложения, документация, коммуникации существуют в параллельных мирах

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

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

Мода на блоги, социальные сети является одним из главных трендов Веба 2.0. Однако, хотя они и задумывались для коллаборации чаще они, как и другие средства коммуникации становятся вещами в себе: мы используем их только для общения, а их коллаборационный аспект практически не осваивается. Если так, то уникален ли и сам тренд? А есть ли принципиальная разница между Вебом, электронной почтой, обменом сообщениями, блогами? На самом деле, во всех случаях идет обмен информацией разными способами между отправителем и получателем. Веб: получатель (машина) посылает запрос, отправитель (машина) посылает ответ (хотя можно сказать, что получателем выступает пользовательская сессия в браузере). Почта: отправитель (почтовый ящик) посылает сообщение, получатель (почтовый ящик) проверяет наличие обновлений. Обмен сообщениями: отправитель (аккаунт) посылает сообщение и получатель (аккаунт) сразу получает его. Блог: отправитель (аккаунт) публикует сообщение, получатель (сессия в браузере) читает сообщение по ссылке. Все эти способы являются лишь различными видами транспорта для информации, и чьи внутренние особенности должны нас волновать только поскольку они доставляют информацию разным способом (как телеграф, телефон и обычная почта).

Решение: Семантика, как движущая сила

Семантика является ядром любой информации, но этого недостаточно без ее представлений и коммуникации. Первый аспект мы традиционно называем интерфейсом (в качестве которого выступают как естественные языки, так и бинарные форматы, графический интерфейс пользователя, Веб страницы, так и программные интерфейсы, и т.п.), второй аспект является транспортом (куда входят гипертекстовый протокол, электронная почта, блоги, социальные сети, и т.п.). В целом же механизм может работать так: (1) вы обнаружили ошибку в программе, (2) первым делом, вы идентифицируете саму ошибку и область ее применения, (3) само описание ошибки может быть не достаточно точным, но идентификация на шаге 2 позволяет другим пользователям точно сопоставить эту ошибку с другими ошибками в данной области приложения, или с документацией для данной области приложения, (4) также вы можете послать описание ошибки другим людям и это описание будет автоматически слито с их персональным пространством фактов.

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



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

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

Поэтому ни одно из отдельных решений (как эффективный поисковик, система сущностей для идентификации, Семантический Веб, и т.п.) не могут решить все проблемы сразу. Необходим общий подход, который мы и описали выше. Конкретные же пути решения можно найти в статье "Как решить проблемы современного поиска?".

Great blunders of modern computereality

Human thinking is unseparable mix of simplification of multiple details of reality and reverse detailing of created generalizations. Two simple quotations express complexity of this process very well: "All models are wrong, but some are useful" (George Box) and "Make everything as simple as possible, but not simpler" (Albert Einstein). The very essence of intellect is constant balancing between simplicity and precision.

Similar balance concerns any technology too: it can be either simple enough and ignore some details, or precise enough and be complex. Therefore, any technology could have shortcomings (restrictions), which make its evolution almost infinite (restricted only with aspiration and abilities of human beings). But progress cannot be constant: evolution (both in technology and Nature) is alternating short periods of changes and quite long periods of stability. Changes cost some resources, therefore they result in a sort of chaos (because system becomes open for changes for a while), but which sooner or later lead to balance and stability.

Nowadays, we live in a periof of technological stability which borders with expectations of changes. Such expectations invoked by several causes: some technologies do not work as we want, some technologies still cannot work, some shortcomings could be ignored at the moment but our needs are growing every day. But the main cause is existing computer technologies have several fundamental contradictions, which will be considered further.



* Computer search can find everything

This statement can be true, if we restrict "everything". Machine searching works quite well with simple queries (which can be expressed with a few words and which are recommended to be used by search help) or which uniquely identifies something. But a search has problems as soon as it concerns ambiguous or quite complex queries. It is no wonder, because contemporary search deals with text. Using natural language, we always generalize and use ambiguous words, because we have no enough time for detailing all facts. A search cannot restore all lost information, therefore in some case it just cannot succeed.

Generalizing creates many problems of searching, but can page ranking solve these problems? Page ranking is generalizing of page importance, according with some algorithm. Of course, it won't work in some cases: for example, "drink" query can return "Cola" and "Pepsi" only because these drinks are important for many users. Some researchers hope personalization will be able to help in importance calculation basing on personal preferences. But these preferences are generalizations too: you can like orange juice but want apple one at this moment.

Solution: Precise semantic search

Larry Page once described the "perfect search engine" as one, which "understands exactly what you mean and gives you back exactly what you want". Ironically, search engines make everything possible to not match this definition. They based on sophisticated mathematical methods, which generalize things (and generalization is opposed to precision) and which could give incorrect result (for example, in some cases, any algorithm cannot deduct what "it" means). Namely therefore, a search should be based on exact meaning, which precision can be made mostly only by humans.



* Semantics restricted with experts, machines, formats, technologies

Semantics is available for programming long ago: in the essence, objects and actions of any application is semantics of some domain. This semantics may be used by humans only with the help of user interface, which links objects and actions with images or words of natural language. Semantic Web made semantics even more available. Unfortunately, only for experts and machines. Its standards are too complex for ordinary users (and experts underlines that Semantic Web has no usable representation for users). Also, you may note that Semantic Web just continues what was started by binary formats and XML: it is just yet another data format, though universal for whom accepted it. But it concerns only ordered data. What we should do with unordered information?

Some technologies and formats try to represent semantics by own means, which restricts it even more. Thus, EXIF may contain additional "metadata" for a picture, but a set of them is always restricted. Ontology of Semantic Web can describe some domain, but we often violate borders of domain (for example, ontology of musical albums may imply artists, but who can guarantee we won't need a query of artists which lived in certain city, in given period of time?) Metaweb (which is already a part of Google) offers automatic detection of entities, which may have multiple spellings. However, their site declares that they operates with dozens millions of such entities. At the same time, there is several billions people (each is such "entity"), we use millions of geographical names, names of art pieces, etc, etc. Is this technology ready to deal with billions of entities? Is it ready to provide an algorithm, which would exactly recognize similar names automatically? And do we need such algorithm if humans can easily do it explicitly?

Solution: Affordable semantics

We need a form, which will make semantics affordable for ordinary users. This form should link semantics with representations, which can be understood by an user. Today, such links are established mainly by applications, but we cannot create a separate application for each our idea. Moreover, semantics should be not a set of restricted formats, but rather a set of atomic formats, which can be linked with each other. Similarly, each word of natural language is such atomic formats. Namely therefore, we can know what "hare" is without deep knowledge in zoology and physiology.



* Implicit conventions

Usually, file system is compared with documents or books in office (therefore we use such terms as a file/folder). However, this analogy corresponds to internal mechanism of document exchange, when you should know which folder has concerned information. But the situation is different if we outside of the system: then, you request information (book) and just receive it (similarly mind does not know which part of brain contains requested information). A search corresponds to this "external" mechanism, however, it is not perfect and quickly redirects us to the same "internal" mechanism by providing URI or file path. We use the same mechanism in Internet too: Web surfing is, in fact, a mere file copying.

But the situation is even worse because each file identifier is just text. Which means, we cannot use it meaningfully, therefore we create names with some implicit conventions like "Braveheart (1995).avi". The same story is with all identifiers which used in applications, which cannot be extended: usually, then we use some additional signs of meaning like prefixes or suffixes like "[Ru] Braveheart (1995)".

Solution: Explicit identification

File name and URI is needed to identify information. But because this identification aims to make information unique only inside certain computer entity (like folder or domain system), and because it has no semantic restrictions (you can copy an audio file in "Video" folder), it is meaningless. Instead, we need identification which will coincide with that we use in real life, but also, which will extend it (for example, in real life, we cannot identify episodes of a movie or a part of an application, which usually identified with several sentences). The main goal of identification: to answer to "What is it?" relating to any information (an entire file or just a part of a web page). And results of this identification should be copied together with information to be shared. Therefore, identification mechanism should be equivalent and available at any computer system.



* Interface, applications, documentation, communicating live in parallel worlds

Interface is a part of semantics, it abstracts meaning in the form, which is convenient for an user or a developer, etc. But today user interface is not a part of semantics but it is rather linked by code with application semantics. Additionally, it has own shortcomings. For example, graphical interface has no problems only when a quantity of visual elements is restricted (and when we can memorize them). As soon as their quantity grows we confronts with that: (a) it is impossible to express everything with pure graphics, therefore natural language is used, (b) it is impossible to work with huge quantity of visual elements, therefore nested elements used, but which hide some elements, and which makes it difficult to find some application features, (c) it is impossible to reuse graphical interface elements. Simplicity of graphical interface is usually achieved by (1) decreasing of application features, (2) automatic handling (some "optimal" algorithm restricts available features by generalizing).

Documentation is a part of semantics too, which sometimes is forgotten by application creators. Though, it is not their fault there is no way to use semantics by different parts of an application.

Social networks are one of main trends of Web 2.0. However, though they were created for collaboration, often they used only for communicating, whereas collaboration is ignored. If so, is this trend unique? And is there big difference between Web, email, instant messaging, and social networks? In all cases, we may see different ways of information exchange between a sender and a recipient. Web: a recipient (browser session) sends a request, a sender (computer) responds. Email: a sender (mail box) transmits message, whereas a recipient (mail box) checks for updates. Instant messaging: a sender (account) transfers a message to a recipient (account). Blog: a sender (account) publishes a message, a recipient (browser session) reads a message by a link. All these ways are just different transports for information, and their internal features should be our concern only because they deliver information differently (as with real life telegraph, phone, or regular mail).

Solution: Semantic-driven system

Semantics is the core of any information, but it is not enough without its representation and communication. The first aspect is usually called as an interface (which includes both natural languages, and binary formats, graphical user interface, Web pages, programming interface, etc). The second aspect is a transport (which includes hypertext protocol, email, social networks, etc). Semantics and its aspects will work together, for example, as follows: (1) you detect an error in an application, (2) you identify the error and the area of occurence (which means, further you work with precise identifiers), (3) the error description can be not precise enough, but precise identifiers allows other users correspond the error with other errors in concerned area of an application, or with documentation for this application area, (4) you can send the error description to other people and this description will be automatically merged with their personal space of facts (it could be possible because you can share the same identifiers with equivalent semantic links).

But semantics would not work by itself: it should be supported by interface. One of key interface features is meaning restriction (for example, a word restricts information context, a combobox restricts possible values), which implies the conception of context (a part of information which affects the current situation). Personalization, a search, and file folder are particular cases of context. And namely context usage can solve the problem of the breadth of numerous facts, which confronts everyone who works with semantics.



As you may see, the most of existing problems relate to semantics this way or another. But strangely enough, today there is no way of dealing with semantics, similarly as programming deals with information in computer-oriented form (data) and process it (code), or as design which deals with human-oriented form (interface). Moreover, namely programming and design can delegate a part of own functions, to establish the conception of semantic composing. Indeed, any information (for example, a web page) can be envisioned as a mini-application, which may responds to input (queries or questions) with output (responses), which is similar to simple application for accessing database. But an application usually requires more effort, whereas identifying and establishing semantic links inside a piece of information can be much quicker. The same web page can have gorgeous graphical design, but represents terrific semantic mess, which can be resolved with more strict semantic composing.

Eventually, semantic developing can influence information technologies even more. Today, we are in the very beginning of semantics usage: usually, different web pages rival over possibility to represent some general information. This is the result of the nature of modern search engines, which can search only general information. The real development of semantics will start only when they will be able to find unique information. And this can make semantic development even more serious, because it will force us to develop any piece of information more strictly. You can imagine it as the process of design, development, and testing of even quite simple Web page as a black box, which should give (unique) answers to some (unique) questions.



Problems described above are mutually affected:
- Semantic composing depends on exact search, which should be equivalent in different systems
- Exact search depends on identification, which allows exactly compare a request and a content
- Efficiency of identification depends on usage of contexts, which restricts interface
- Context depends on semantic relations
- Usage of semantic relations should be affordable for an ordinary user with semantic composing

Namely therefore, none separate solution which affects only one problem area (as an efficient search engine, an entity system, or Semantic Web) may solve all problems. The integral solution is needed, which affects all points described above. More specific description of the solution can be found in "How to solve problems of contemporary search?".

вторник, 11 января 2011 г.

Critique of Semantic Web and Semantic Programming

Occasional surfing led me to Semantic Programming page, where I have found quite interesting "Introduction to Semantic Programming". A new paradigm in programming? It is always exciting, though not all proposals were finally embodied in real life language or approach. Have you heard about proposals of Victoria Livschitz: "The Next Move in Programming" and "Envisioning a New Language"? 5 years passed but unfortunately there is still no metaphor language, no metaphor approach. At that time, I've had my own "pattern" approach which in the essence was "semantic markup" of any programmming language to link the code with meaning.

But after several years of lukewarm activity I have understood that the accent of "semantic markup" should shift from programming rather to broader context (though I had such thoughts even before, but at first I've thought that the accent on programming is more necessary). Of course, this idea is not new and can be traced back to ancient philosophers, but only now, we have appropriate possibilities to implement it. The most severe problem for such language in the past was a paper which allows mainly linear arrangement of information. Computer allows much more, though only in 1990s hypertext proved to be successful. But it was clear that it does not fit well for representing data, which led to the raise of XML and Semantic Web. But even they have shortcomings which made me to propose the alternative (to XML at that moment) "Universal Abstract Language" back in 1999, but honestly it was not mature enough. My attempts continued and I've supported my page at GeoCities but after that it was closed and I have not restored it (though I kept it locally). Finally, in 2009 I've started my new period of activity in "On meaning..." blog. Now, my personal shift in paradigm concerns any information in general and programming in particular (as it is only one kind of information representation).

But you may ask why we need new paradigm if we already have Semantic Web (and microformats)? Semantic Web claims to be "Web of data" (and you can consider at the development of XML standards). But data is great for machines, what's about human beings? Semantic Web can help some company to create application for data but personal information is often too unique to create applications (or even ontology) for each kind of such information. Actually, namely therefore, Semantic Web still has no good representation of own data for humans, which only underlines its machine-oriented nature. Moreover, it is not clear if usage of triples is expedient at all. Creators of Semantic Web claims that triples can represent any sort of semantic data, which proven in AI researches long before the era of Internet. In fact, a triple is not only abstraction which may claim this, the same may relate to object-oriented or relational model which may represent just any data. Why to put a lot of efforts in creating, for example, new triple based databases if relational ones may represent any data too?

Why we need to transform unary, binary, and other kind of relations to triples? Only because usual order of natural language sentence is "subject-predicate-object"? But it is not true in natural language too: we can have a phrase with one word or quite complex sentences with more than three elements. But why namely "subject-predicate-object"? Why natural language order usually includes "subject" and "predicate" at least? This order reflects space-time dualism of our reality. But because any action, in fact, is an interaction, therefore usually we also have "object" (to which some action is applied). But actions can be complex therefore we may have more than one "object": "I've send a letter to my friend by email". Are Semantic Web triples reflects time-space dualism? Obviously, no. The example from Semantic Web specification includes "sky" as "subject", "has color" as "predicate", and "blue" as "object". But "has color" is not action it is a verb, it does not occur (during some time period). A verb needed here only because we should comply a sentence with language rules, therefore we use "has color" (but, in fact, in some language, like Russian, a verb can be omitted at all, so literally such sentence would sound like "Sky blue"). Why "blue" is an object? True is such triple just a sort of abstraction, which can be applied to any entity even ignoring its real life features (similarly in object-oriented programming, everything is "object": objects, actions, attributes, etc). Theoretically, there is a lot of abstractions which may represent any kind of data, but why triple is preferred? Because of semblance with natural language rules? Why then triples ignore all richness of natural language, and ignores natural language rules ("blue" should be "attribute" not "object", which are different). In fact, Semantic Web specification states that "Much of this meaning will be inaccessible to machine processing and is mentioned here only to emphasize that the formal semantics described in this document is not intended to provide a full analysis of 'meaning' in this broad sense; that would be a large research topic." [RDF Semantics, Patrick Hayes, Editor, W3C Recommendation, 10 February 2004, http://www.w3.org/TR/2004/REC-rdf-mt-20040210] Why then triples were chosen without full analysis of meaning?

Moreover, Semantic Web uses URI for identification. And again, we see not expedient usage of abstractions. URI uniquely identifies computer resources, why to use it for real life objects too? Computer identifiers is quite different in several aspects from natural language identifiers, because computer ones aimed to identify things precisely, whereas natural language ones can identifiy things as brief as possible, and precision is attained with the help of composite identifiers. At last, Semantic Web does not accentuate on abstracting (generalizing and specifying) which at least looks strange.

Shortcomings of Semantic Web are shown to prove there is a sense to have alternative way of handling meaning. But the next question is: can semantic programming propose such alternative? To answer this question we will examine "Introduction to Semantic Programming", starting from motivation indicated in it:
* Currently programs are thought of as text we could write with pen and paper.
* Programs are complex graphs we should manage with computers.
* Currently programs manage data in the local memory of one computer.
* All data should be managed as if it's persistent, remote data.
* Currently we're tempted to think about ever larger buckets of data.
* We should think of data as a graph distributed across many systems.
* Currently we mostly think of programs and data separately.
* Programs and data are just different parts of the same distributed graph.
* Currently we're tempted to build one ontology for the world.
* We should always expect to have to handle multiple ontologies.
Of course, all these points are reasonable but do they relate only to programming? All or almost all motivation items applied not only to programs but to any information. Therefore, we should think of not only programs and data separately, but also of information and programs too. Which means, for example, requirements, use cases, help, and other information should be parts of distributed graph too.

To understand what is semantic programming, we need to understand what is meaning. And the introduction gives the answer that "Meaning arises from the relationships between things and the behaviours of things" Correctness of this answer depends on meaning of words which it consists of. For example, what is "thing"? Is it only real world thing or conceptions and ideas included? In fact, there is real space-time and many layers of abstract space-times, which refer to other space-times (inlcuding real one), so, "thing" of real space-time is a thing, but any "thing" of other space-times is always a reference. Also, the introduction mentions "agents" similarly to Semantic Web, but isn't it evident that semantics is needed for real life human beings too (though later "agents" applied for humans too, but only abstractly)? Finally, there is no apparent statement that "relationship" is a reference too.

Further the article considers meaning as a set of more specific postulates:
  • A 'reference' has no atomic meaning in and of itself, but has meaning only in so far as an agent is able to manipulate, act upon or in some other way 'understand' the reference.
  • An agent understands the meaning of a reference if it is able to use it effectively.
  • The meaning of a given reference can depend on the context in which it's being used.
  • An agent can come to understand the meaning of a given reference in a given context in one of three ways:
    • Axiomatically, or in other words by having the meaning of the reference 'hard wired' for a given context.
    • Deductively, through the reference's relationships to other known references within the given context (e.g. if the agent knows that 'X is the same as Y' and already understand the meaning of 'Y' then it can derive the meaning of 'X')
    • Behaviourally, through the reference's behaviour in the given context (if we can probe the reference's referent and get responses back then we learn something new about the meaning of the reference)

This definition is not full (though it seems the author does not pretend to give full definition and call such notion "naive") and have some inexactitude behind:
- Axiomatic understanding is, in fact, identifying, which is the quickest way of understanding, by mere comparing by reference equality.
- Not all references indicate the exact meaning, "bird" can refer to a generalized representation of a bird, to the entire class of birds, etc. This is the main cause why meaning can be ambiguous, therefore a notion of generalizing/specifying and similarity (as a partial equality) should be a part of any (even naive) semantic theory.
- Any sentence (like natural language ones) is a set of references, which represents a composite reference (or a graph of semantic relations).
- There is no definition of a context. In fact, a context is also a composite reference (or a graph of semantic relations) by itself. And any agent is an fact is a set of contexts.

You may notice that at least third point creates a contradiction between how meaning is handled in natural language and in programming. Programming prefers unambiguous identifiers (like GUIDs), whereas humans would prefer composite identifiers which consists of ambiguous identifiers (words). But, in fact, the purpose of constructing composite identifiers is uniqueness too, though there it is not hard "global uniqueness" but rather a balance between uniqueness and brevity. Speaking with the author terminology, the more coinciding context two agents have, the less references should be provided for communicating meaning. Or in other words: even a part of composite identifier has meaning by itself. URI is the example of some middle ground between GUID and composite identifier, because it consists of identifiers which can have and have not meaning, but which is globally unique. What should be preferred? At least, it is clear that applications are created for humans, so we can't avoid the topic of composite identifiers. On the other hand, nothing prevents us from having translation between GUID and composite identifiers.

Further the introduction talks about specific traits of semantic programming, but we will stop here, because it is not quite clear if it is worthy to raise the problem of integration between programming and information. On this, depends how we see semantic programming: either it is yet another paradigm in namely programming or it should be a part of one semantic infrastructure, which should have broader vision:
- it should be the bridge between natural language and machine-oriented and optimized for domain formats/languages/protocols;
- we should use not only formats/ontologies which encompass the entire domains, but also atomic formats, which can be restricted with even one word, which implies usage of underrated identification (which understood by humans easier than even simple language of advanced search);
- semantics should be available not only for experts and machines, but also for general audience (but it also implies it should be accessible enough and supported by interface to be used by an ordinary user);
- semantics can be applied to any information (a web page, programming code or data, a binary file, etc);
- semantics should be supported in such way, it would provide testability of semantics for any information (that is, information of a web page can be tested with some questions, and a search engine or programming code should be able to find this information with equivalent queries in corresponding languages).

Can semantic programming satisfy this broader vision? It seems like no, but possible it even had not to intend to. Can Semantic Web satisfy it? Unfortunately, no. For that, it should shift from "intelligent agents" to "intelligent humans", which is so far not envisaged even in theory. The problem of semantics concerns not only everything which starts from "semantic" word, but also problems of a search, which is still efficient only in cases of simple and straightforward queries. But even here, we still see only quite humble attempts to implement parts of broader approach.

понедельник, 10 января 2011 г.

Is perfect search engine possible?

Did you ever think why a search retrieves million pages even for a quite simple query? The answer is generalization. We always generalize things because of many reasons: we have no time for details, we imply that others know what we know, we cannot make it more precise just because we are unable to do this, etc. A search cannot avoid generalizations, therefore it cannot magically "understands exactly what you mean and gives you back exactly what you want" (as Larry Page once described the "perfect search engine"). This is not a search fault it is just a guess, based on complex mathematical methods for finding words in database of billions pages. We cannot avoid generalizations and a search cannot avoid them too. Even if computers will be many times more powerful than they are today they won't be able to understand exactly what we mean and want, because generalization always lose a part of information, which cannot be recovered.

In the essence, generalization is simplification. No surprise, search engines try to avoid this problem by forcing users to make queries simpler and shorter. This follows the beginning of the famous quotation but not the ending: "Make everything as simple as possible, but not simpler". Only reaching a goal can determine if something was simpler than necessary or not. The goal for a search is to receive answer for any question. But how we can do it if we are advised to simplify queries? It is a way far from reality, where we ask as complex question as necessary. Such advices is similar to the situation when you ask someone with quite general words, he or she answers with general words too, everyone means something specific, which can coincide with other's specifics or contradict it completely. The bottom line: you have some chances to get correct answer, but it will always be only chances.

But what can be done with this situation? We need to be able to make information more precise (including questions like search queries). And solution should be both complex and simple simultaneously. In fact, it can be based on several simple ideas:

1. Anything has meaning.
2. Identified once, mean anywhere.
3. Generalize, specify, and combine information as necessary.

These ideas imply many things behind: (a) existing formats like email give meaning only to specific parts of information (subject, recipient, body), but there is meaning inside of a text in an email body too, (b) identification is simpler than specification, but it can matter more, for example, you know that a bird is a bird even without deep knowledge in ornithology, so "bird" as a name give you more information, than specifics like "it has one head and two wings", which is not always precise, can have exceptions, and other implications, (c) anything should be a part of one knowledge space vs. the current situation when information can be scattered in emails, information systems, files, etc, etc (d) reusing information is not less important concept than reusing code in programming.

More details can found at http://on-meaning.blogspot.com/2010/12/how-to-solve-problems-of-contemporary.html.