Создание или поиск функции предложения «релевантные термины» - PullRequest
8 голосов
/ 21 февраля 2009

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

Например, отправка "бейсбола" вернет

["shortstop", "Babe Ruth", "foul ball", "steroids", ... ]

Google Sets - лучший пример, который я могу найти для такого рода функций, но я не могу использовать его, поскольку у них нет общедоступного API (и я не буду идти против их TOS). Кроме того, ввод одного слова не приводит к очень разнообразному набору результатов. Я ищу решение, которое выходит за рамки касательных.

Самое близкое, с чем я экспериментировал, это использование API WikiPedia для поиска по категориям и обратным ссылкам, но нет способа напрямую отсортировать эти результаты по "релевантности" или " популярность ". Без этого список предложений огромен и повсеместен, что не сразу полезно и его очень трудно свести на нет.

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


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

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

Есть решение? Спасибо заранее!


ОБНОВЛЕНИЕ: Спасибо за невероятно насыщенные и информативные ответы. Я выберу победный ответ через 6–12 месяцев, когда, надеюсь, пойму, что вы все предложили =)

Ответы [ 3 ]

10 голосов
/ 21 февраля 2009

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

8 голосов
/ 21 февраля 2009

Питер Норвиг (директор по исследованиям в Google) рассказал о том, как они делают это в Google (особенно упоминание Google Sets) в Технической беседе Facebook . Идея состоит в том, что относительно простой алгоритм для огромного набора данных (например, для всей сети) намного лучше, чем сложный алгоритм для небольшого набора данных.

Вы можете посмотреть на коллекцию n-грамм Google в качестве отправной точки. Вы бы начали видеть, какие понятия сгруппированы вместе. Норвиг намекнул, что внутри Google есть до 7 граммов для использования в таких вещах, как Google Translate .

Если вы более амбициозны, вы можете скачать все статьи Википедии на желаемом языке и создать свою собственную базу данных n-граммы.

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

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

5 голосов
/ 21 февраля 2009

Взгляните на следующие две статьи:

Кластеризация пользовательских запросов поисковой системы [pdf] Определение темы по кластеризованным ключевым словам [pdf]

Вот моя попытка очень упрощенного объяснения:

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...