Какую модель данных можно использовать для "значения" страницы или текста

Я много раз читал в Интернете по этому вопросу:

Как вы извлекаете смысл страницы.

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

Но благодаря силе воображения давайте предположим, что я написал окончательный сценарий, который делает именно это. Например, я ввожу этот текст:

Воображение привело человечество через темные века к его нынешнему состоянию цивилизации. Воображение привело Колумба к открытию Америки. Воображение привело Франклина к открытию электричества.

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

Способность людей думать заставляет их открывать новые вещи.

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

Обратите внимание, что у меня может быть другой текст, который использует другую аналогию, но все еще имеет то же значение, сформулированное по-разному, например:

Воображение помогает человечеству продвигаться вперед.

Теперь я могу ввести поисковый запрос о важности воображения, и появятся эти 2 результата. Но как они будут сопоставлены? Будет ли это сравнение строк? Некоторые целые числа с плавающей точкой? Может быть, даже двоичный?

В чем будет сохранен смысл? Я хотел бы услышать от вас.

Обновление: позвольте мне переформулировать вопрос просто.

Как вы представляете смысл в данных?

7 ответов

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

Если вы хотите представить значение лексических сущностей (например, концепций, действий), вы можете использовать распределенные модели, такие как модели векторного пространства. В этих моделях значение обычно имеет геометрическую составляющую. Каждое понятие представлено в виде вектора, и вы помещаете понятия в пространство таким образом, чтобы похожие понятия были ближе друг к другу. Очень распространенный способ построить такое пространство - это выбрать набор часто используемых слов (базовых слов) в качестве измерений пространства и просто подсчитать, сколько раз целевой концепт наблюдается вместе в речи / тексте с этими базовыми словами. Подобные понятия будут использоваться в сходных контекстах; таким образом, их векторы будут указывать аналогичные направления. Кроме того, вы можете выполнить ряд методов взвешивания, нормализации, уменьшения размерности и рекомбинации (например, tf-idf, http://en.wikipedia.org/wiki/Pointwise_mutual_information, SVD). Немного связанный, но вероятностный, а не геометрический подход - это латентное распределение Дирихле и другие генеративные / байесовские модели, которые уже упоминались в другом ответе.

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

Грамматические формализмы могут помочь включить синтаксис и привести структуру к значению и отношениям между понятиями (например, грамматика структуры фраз, управляемая головой). Если вы создадите двух агентов, которые имеют общий словарный запас и грамматику и заставляют их общаться (т.е. передавать информацию от одного к другому) с помощью этих механизмов, вы можете сказать, что они представляют значение. Это скорее философский вопрос, где и как представляется значение, когда робот говорит другому выбрать "красный круг над черным ящиком" с помощью встроенной или появившейся грамматики и словаря, а другой успешно выбирает предполагаемый объект (см. это очень интересный эксперимент по заземлению словарного запаса: Talking Heads).

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

Говоря о здравом смысле, Cyc - это еще один амбициозный пример проекта, который пытается овладеть знаниями здравого смысла, но делает это совсем не так, как Concept Net. Cyc использует четко определенный символьный язык для представления атрибутов объектов и отношений между объектами недвусмысленным образом. Используя очень большой набор правил и концепций и механизм логического вывода, можно придумать выводы о мире, ответить на такие вопросы, как "Могут ли лошади болеть?", "Принесите мне картину грустного человека".

Я работал над системой, которая пыталась сделать это в предыдущей компании. Мы были более сосредоточены на том, "какие неструктурированные документы больше всего похожи на этот неструктурированный документ", но важной частью было то, как мы определили "значение" документа.

Мы использовали два разных алгоритма, PLSA (вероятностный скрытый семантический анализ) и PSVM (вероятностные машины опорных векторов). Оба извлекают темы, которые значительно более распространены в анализируемом документе, чем в других документах коллекции.

Сами темы имеют числовые идентификаторы, и существует таблица внешних ссылок от документа к теме. Чтобы определить, насколько близки были два документа, мы посмотрим на процент тем, которые имеют общие документы.

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

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

Давайте предположим, что вы нашли окончательный алгоритм, который может обеспечить смысл текста. В частности, вы выбрали строковое представление, но, учитывая, что ваш алгоритм правильно нашел значение, тогда он может быть однозначно идентифицирован алгоритмом. Правильно?

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

Таким образом, в основном, чтобы сохранить значение, нам сначала нужен уникальный идентификатор.

Смысл может существовать только в отношениях с субъектом. Это значение предмета. Чтобы этот предмет имел значение, мы должны что-то о нем знать. Чтобы субъект имел уникальное значение, он должен быть однозначно представлен наблюдателю (это алгоритм). Например, утверждение "2 = 3" будет иметь значение false из-за стандартизации математических символов. Но текст, написанный на иностранном языке, не будет иметь для нас значения. Ни то, что мы не можем понять. Например "в чем смысл жизни?"

В заключение, чтобы построить алгоритм, который может извлечь абсолютное значение из любого случайного текста, мы, как люди, должны сначала знать абсолютный смысл чего-либо.:)

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

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

Если вы используете модель векторного пространства, смысл / семантика может быть представлена ​​набором векторов, которые представляют определенные темы. Одним из способов извлечения таких шаблонов является http://en.wikipedia.org/wiki/Latent_semantic_analysis или http://en.wikipedia.org/wiki/Nonnegative_matrix_factorization. Но есть более сложные статистические модели, которые представляют семантику параметрами определенных распределений вероятности. Недавний метод - http://en.wikipedia.org/wiki/Latent_Dirichlet_allocation.

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

Структура описания ресурса - это одна из многих моделей данных, свойственных семантической паутине, доступных для описания информации.

RDF - это абстрактная модель с несколькими форматами сериализации (т.е. форматами файлов), и поэтому конкретный способ кодирования ресурса или тройки варьируется от формата к формату

а также

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

Содержимое RDF можно получить с помощью запросов RDF.


Тема Карты еще одна модель хранения и представления данных знаний.

Тематические карты - это стандарт представления и обмена знаниями с акцентом на поиск информации.

а также

В 2000 году тематические карты были определены в синтаксисе XML XTM. В настоящее время это широко известно как "XTM 1.0" и все еще широко используется.

Из официальной тематической карты данных модели:

Единственными атомарными фундаментальными типами, определенными в этой части ISO/IEC13250 (в 4.3), являются строки и нуль. Благодаря концепции типов данных в этой модели могут быть представлены данные любого типа. Все используемые типы данных должны иметь строковое представление пространства значений, и это строковое представление хранится в карте темы. Информация о том, к какому типу данных относится значение, хранится отдельно в виде локатора, идентифицирующего тип данных.

Предлагается много других форматов, вы можете посмотреть эту статью для получения дополнительной информации.

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


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

Наличие данных в понятном текстовом формате имеет несколько преимуществ, возможно, больше, чем недостатков.

Другие семантические методы, такие как нотация 3 (N3) или синтаксис Turtle, используют несколько разные форматы, но все же обычный текст.

Пример N3

@prefix dc: <http://purl.org/dc/elements/1.1/>.

<http://en.wikipedia.org/wiki/Tony_Benn>
  dc:title "Tony Benn";
  dc:publisher "Wikipedia".

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

Попробуйте превратить его в тип char* (строка c-style), он легко сохраняется в базах данных и прост в использовании, его длина 50 (10 слов) или 75 (15 слов)

РЕДАКТИРОВАТЬ: поместите оба слова в одно и то же слово (воображение), затем проверьте одинаковые индексы и присвойте им одно и то же слово

использование

SELECT * FROM Dictionary WHERE Index = "Imagination"

извините, я не слишком опытен с SQL

Другие вопросы по тегам