Улучшение результатов облачного поиска на основе частоты введенных терминов

Я конвертирую проект из solr в cloudsearch, и у меня возникла проблема, для которой я не могу найти обходной путь после довольно долгого поиска в документе и в Интернете. Я надеюсь, что кто-то еще может помочь.

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

Учитывая проиндексированный документ - скажем, страницу Tyrannosaurus в Википедии:

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

Затем появляется любительский документ:

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

По причинам, важным для проекта, я создаю распределение интересных слов, а не запрос с полным текстом, например:

carnivore: 2
tyrannosaurus: 1

И я хотел бы придать больше предвзятости слову «хищник» в статье в Википедии, чем слову «тираннозавр».

В solr я усиливаю запрос с помощью оператора «^», например. "хищник^2".

Из того, что я могу найти, cloudsearch выполняет повышение как «выражения ранга», но я не нашел ничего похожего на мою проблему.

Любые идеи?


person Alain Collins    schedule 26.05.2013    source источник


Ответы (1)


Ищите закон Ципфа (есть также аналогичный закон Ципфа-Мандельброта, но его сложнее реализовать), в основном он означает, что для любого языка (особенно в каждой конкретной области) распределение частоты слов подчиняется распределению Ципфа. Вы можете создать список частоты слов, упорядочив его для размещения в zipf-распределении, из него вы можете настроить параметры распределения и экстраполировать релевантность термина.

Основываясь на вашем вопросе, я понимаю, что вы реализуете какой-то td-idf, это более продвинуто, чем это. К сожалению, я думаю, что ваш вопрос больше связан с информатикой / лингвистикой и требует большего объяснения, чем то, которое я могу написать в этом посте.

Я не использую облачный поиск (я также работаю над проектом обработки естественного языка, но я не использую облачный поиск), но, проверив, я нашел это http://docs.aws.amazon.com/cloudsearch/latest/developerguide/rankexpressions.html

Вы можете создать дистрибутив zipf (или любую его настройку/разновидность) с этими операндами и определить порог для вашего ранжирования.

Это не ответ «чистый код», но я надеюсь, что он вам поможет.

person Ezequiel Gorbatik    schedule 12.06.2013
comment
спасибо за ответ, и указатели на некоторые термины. К сожалению, все показывает, что ранговые выражения требуют для работы существующее поле, поэтому я не смогу настроить оценку на основе входной частоты. Я до сих пор поражен тем, что solr может делать то, чего, казалось бы, не может cloudsearch, и что никто другой это не обсуждает... Еще раз спасибо. - person Alain Collins; 12.06.2013