Вероятностное поколение семантических сетей

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

Например, рассмотрите диалоговое окно:

"the man has a hat"
"he has a coat"
"what does he have?" => "a hat and coat"

Простая семантическая сеть, на основе парсинга дерева грамматики вышеупомянутых предложений, могла бы быть похожей:

the_man = Entity('the man')
has = Entity('has')
a_hat = Entity('a hat')
a_coat = Entity('a coat')
Relation(the_man, has, a_hat)
Relation(the_man, has, a_coat)
print the_man.relations(has) => ['a hat', 'a coat']

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

Как Вы разработали бы систему, которая "изучает" эти отношения между сегментами семантической сети? Я привык думать о проблемах ML/NL на основе создания простого обучающего множества пар атрибут/значение и питания его к классификации или алгоритму регрессии, но я испытываю затруднения при формулировке этой проблемы тот путь.

В конечном счете кажется, что я должен был бы наложить вероятности сверх семантической сети, но это решительно усложнит реализацию. Есть ли какое-либо предшествующее искусство вдоль этих строк? Я посмотрел на несколько libaries, как NLTK и OpenNLP, и в то время как у них есть достойные инструменты, чтобы обработать символическую логику и проанализировать естественный язык, ни у одного, кажется, нет вида proabablilstic платформы для преобразования одного к другому.

9
задан Cerin 9 July 2010 в 09:47
поделиться

3 ответа

За подобными задачами стоит довольно долгая история. Лучше всего начать с просмотра Вопрос-ответ .

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

Задача извлечения отношений из естественного языка называется «извлечением взаимосвязей» (как ни странно), а иногда и извлечением фактов. Это довольно обширная область исследований, этот парень защитил докторскую диссертацию по ней, как и многие другие. Как вы заметили, здесь существует большое количество проблем, таких как обнаружение сущностей, разрешение анафор и т. Д. Это означает, что, вероятно, будет много «шума» в сущностях и отношениях, которые вы извлекаете.

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

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

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

3
ответ дан 3 November 2019 в 07:12
поделиться

Я не совсем уверен, что это то, что вам нужно, но посмотрите на генерацию естественного языка wikipedia, "обратную" синтаксическому разбору, построение производных, которые соответствуют заданным семантическим ограничениям.

0
ответ дан 3 November 2019 в 07:12
поделиться

Интересный вопрос, я занимаюсь работой над сильно типизированным NLP движком на C#: http://blog.abodit.com/2010/02/a-strongly-typed-natural-language-engine-c-nlp/ и недавно начал подключать его к хранилищу онтологий.

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

Большинство синтаксических анализаторов НЛП, похоже, сосредоточены на разборе отдельных предложений или больших блоков текста, но реже на обработке разговоров. В моем собственном NLP-движке есть история разговоров, которая позволяет понять одно предложение в контексте всех предложений, которые были до него (а также разобранных, сильно типизированных объектов, на которые они ссылались). Поэтому я бы поступил так: понял, что "Он" в текущем предложении двусмысленно, а затем оглянулся назад, чтобы попытаться выяснить, кто был последним мужчиной, который упоминался.

В случае с моим домом, например, он может сказать вам, что вы пропустили звонок с номера, которого нет в его базе данных. Вы можете набрать "Это был Джон Смит", и он поймет, что "это" означает звонок, который только что был упомянут. Но если вы сразу после звонка напечатаете "Tag it as Party Music", он все равно решит, что это песня, которая играет в данный момент, потому что дом ищет то, что можно найти в ITaggable.

2
ответ дан 3 November 2019 в 07:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: