Критерии сопоставления двух фраз

antcatt77

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

Priss

какие метрики/показатели/критерии обычно используются (человек использует чтобы сравнивать два куска текста?
какие механизмы/мат. аппарат используется при этом (кроме нечеткой логики)?
для сравнения куска текста (определение близости между ними) хорошо подходят довольно неплохо развитые методы подсчета релевантности (начиная от обычных статистическии и заканчивая лингвистическими).
Но вот различить И.Петрова и Сергея Петрова они не помогут, тут надо отдельно затачивать алгоритм. Здорово в этом деле может помочь лингвистический анализ текста (это сама по себе нехилая задача, но есть открытые решения).
Математика здесь зашита самая разная - от векторных моделей текста до сопоставления семантических деревьев или сетей. (может быть именно в сторону них и стоит покопать)
А если ты хочешь обучать алгоритм на основе примеров - то это раздел ИИ "обучение с учителем".

antcatt77

> это раздел ИИ "обучение с учителем".
они кроме нейросетей что-то рассматривают?
ps
имхо, нейросеть - это тупиковый вариант.

Priss

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

antcatt77

Что такое "статистические методы подсчета релевантности"?
это строгое определение?
или это просто какой-то набор эвристик, которые считают какую-то релевантность?

Petrovich40

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

zuzaka

> это кажется универсальным для разных языков
нет

antcatt77

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

Petrovich40

если задача касается только имен и фамилий, то можно представить такой вариант.
- создать/найти базу данных имен, их возможных форм и аббревиатур. элементы базы могут выглядеть, например, так: "владимир; вова; вован; володя; вл-р; в.; вл.; вальдемар ..."
- создать объект "личность" с полями имя (массив имен, если предполагается также работа со сложными именами вроде john fitzgerald отчество, фамилия (массив фамилий, если фамилия составная или имеется информация о девичьей фамилии) и т.п. (дата рождения и др.)
- после этого имена, выделенные из обех фраз/обоих предложений разбить на слова (parse слова сравнить с имеющимися в базе, и создать соответствующие "личности".
- сравнить поля "личностей", но не напрямую, а через базу данных и отсюда установить однозначность/неоднозначность соответствия "личностей".

antcatt77

> создать/найти базу данных имен, их возможных форм и аббревиатур. элементы базы могут выглядеть, например, так: "владимир; вова; вован; володя; вл-р; в.; вл.; вальдемар ..."
да, именно что-то такое и хочется.
но хочется, чтобы такую базу составлял сам алгоритм, на основе данных, подаваемых во время обучения.
и хочется понять, как алгоритм должен определять какие слова можно считать одиннаковыми, а какие нет?
например:
ведь Маша может быть и Мариной, и Марией.

Petrovich40

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

antcatt77

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

Petrovich40

т.е. на вход подается:
что Саша Куравлев и Куравлев Александр - это одно и тоже,
что Мария Васильева и Маша Васильева - это одно и тоже
что Логинова Марина и Маша Логинова - это одно и тоже
куравлев = куравлев => саша = александр.
васильева = васильева => мария = маша.
логинова = логинова => марина = маша.
(хотя я никогда не слышал, чтобы марину машей называли. но из подобных пар: валя - валентин, валентина.)
в базе появляются записи:
куравлев
александр, саша
васильева
мария, маша, марина (надо отдельно пояснять, что марина и мария - разные имена)
логинова
что-нибудь такое.

antcatt77

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

resident

есть в SQL функция SOUNDEX хз как устроена, но скорее всего вычисляет хэш, который совпадает на одинаково звучащих словах.
Может по аналогии можно придумать алгоритм.

Petrovich40

завести частотные коэффициенты или просто записывать число употреблений. чем чаще имя встречается, тем оно менее информативно.
к примеру, в тестах имя олимпиада встретчалось только 1 раз, а фамилия иванова 99 раз.
олимпиада 1
иванова 99
(всего 100)
частотные коэффициенты (чк) соответственно: с1 = 0.01, с2 = 0.99.
пусть в нетестовом тексте встретилось "олимпиада" и "олимпиада иванова". очевидно, что чк сочетания "олимпиада иванова" меньше, чем соответствующие чк для отдельных слов (с1 и с2). определим чк сочетания "олимпиада иванова", например, так:
1/с3 = 1/с1 + 1/с2 => с3 = 0.0099.
осталось разобраться, как сравнить с1 и с3 (для "олимпиада" и "олимпиада иванова").
можно задать некоторое число delta, определяющее "уровень доверия". пусть, например, delta = 0.05. если |с1 - с3| < delta, то считать имена принадлежащими одному человеку.
(в примере с олимпиадой ивановой условие |с1 - с3| < delta при данном delta = 0.05 выполнено. т.е. здесь решающим оказалось редкое имя, а не фамилия.)

antcatt77

> определим чк сочетания "олимпиада иванова", например, так: 1/с3 = 1/с1 + 1/с2 => с3 = 0.0099.
почему именно так?

antcatt77

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

Sova74

Ответ - можно на глазок Берешь свои сортированные базы и смотришь с какого номера начинается ахинея. Это типа нулевое приближение. Дальше уж можно поварьировать его маленько. Посмотреть на производные по номеру итп... Короче уже задача на шумы... Впрочем не думаю, что точная оценка тут нужна - скорее нужно брать завышенную.. з запасом тексказать

antcatt77

> Ответ - можно на глазок
Дык, понятно, что на глазок можно.
но задача-то как раз стоит - определять эти пороги автоматом, чтобы можно сравнивать произвольные фразы (словари чтобы не надо было каждый раз эти пороги выверять руками.
Оставить комментарий
Имя или ник:
Комментарий: