Найти предложения с аналогичным относительным значением из списка предложений против примера одного - PullRequest
4 голосов
/ 01 мая 2011

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

Например, мое предложение запроса:

Пример: добавление(x) - (y) дает (z)

. Возможно, в моей базе данных уже существует список предложений, таких как: 1. сумма (x) и (y) равна (z) 2.(x) плюс (y) равно (z) 3. (x), умноженное на (y), не равно (z) 4. (z) является суммой (x) и (y)

.пример должен соответствовать предложениям в моей базе данных 1, 2, 4, но не 3. Также должен быть некоторый вес для соответствия предложения.

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

Спасибо!(тег является языковым, поскольку я не смог создать новый тег)

Ответы [ 4 ]

7 голосов
/ 01 мая 2011

Прежде всего: то, что вы пытаетесь решить, является очень сложной проблемой. В зависимости от того, что находится в вашем наборе данных, это может быть AI-complete .

Вам понадобится, чтобы ваша программа знала или выучила, что add , plus и sum относятся к той же концепции, в то время как умножает это другая концепция. Вы можете сделать это, измерив расстояние между наборами слов в WordNet / FrameNet, хотя вычисление расстояния должно быть достаточно точным, если вы не хотите найти умножение . В противном случае может потребоваться вручную установить некоторые сопоставления понятий слова (например, {'add' : 'addition', 'plus' : 'addition', 'sum' : 'addition', 'times' : 'multiplication'}).

Если вам нужна семантика полных предложений, вам, кроме того, придется анализировать предложения и извлекать значение из деревьев разбора / графов зависимостей. Stanford parser - популярный выбор для разбора.

Вы также можете найти вдохновение для этой проблемы в исследовании «Ответ на вопрос». Там общий подход состоит в том, чтобы анализировать предложения, а затем сохранять фрагменты дерева разбора в индексе и искать их с помощью общих методов поисковых систем (например, tf-idf, как реализовано в Lucene). Это также даст вам оценку для каждого предложения.

1 голос
/ 10 мая 2011

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

Cca:
1. «сумма (x) и (y) - (z) « => x + y = z
4.« (z) - сумма (x) и (y) » => z = x + y

Некоторые советы по преобразованию: опустите слова "the", преобразуйте термины из двух слов в одно слово "sum of"=> "sumof", найдите слово оператора и замените "и" на него.

1 голос
/ 10 мая 2011

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

0 голосов
/ 24 июня 2012

Не так просто ^^ Сначала вы должны использовать фильтр стоп-слов, чтобы извлечь из него слова, не содержащие информации. Вот несколько хороших

Тогда вы хотите обработать синонимы. Это на самом деле очень сложная тема, потому что для этого вам нужна некая двусмысленность слов. И большинство современных методов немного лучше, чем самое простое решение. Это значит, что вы принимаете наиболее употребляемое значение слова. Что вы можете сделать с WordNet . Вы можете получить синтаксис для слова, в котором есть все синонимы. Затем вы можете обобщить это слово (оно называется гиперонимом), принять наиболее часто используемое значение и заменить им поисковый термин.

Проще говоря, обработка синонимов довольно сложна в НЛП. Если вы просто хотите работать с различными формами слов, такими как, например, добавление и добавление, вы можете использовать стеммер, но ни один стеммер не поможет вам перейти от сложения к сумме (wsd - единственный выход)

И тогда в ваших предложениях есть разные порядки слов, которые не следует игнорировать, если вы хотите получить точные ответы (x + y = z отличается от x + z = y). Итак, вам также нужны зависимости от слов, чтобы вы могли видеть, какие слова зависят друг от друга. Stanford Parser на самом деле лучше для этой задачи, если вы хотите использовать английский язык.

Возможно, вам следует просто извлечь из предложения существительные и глаголы, выполнить всю предварительную обработку и запросить зависимости в вашем поисковом индексе. Зависимость будет выглядеть как

x (sum, y)
y (sum, x)
sum (x, y)

который вы можете использовать для поиска

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

...