2009-03-04 5 views
15

Я пытаюсь найти слова (в частности, физические объекты), связанные с одним словом. Например:Поиск связанных слов (в частности, физических объектов) с определенным словом

тенниса: теннисные ракетки, теннисный мяч, теннис обуви

Snooker: снукер кий, бильярдный шар, мел

шахматы: шахматная доска, шахматы кусок

Книжный шкаф: книга

Я попытался использовать WordNet, в частности семантическое отношение меронимов; Однако, этот метод не соответствует, как результаты ниже показывает:

теннисного: служить, залпом, по колену вина, уставка, возврат, преимущество

Snooker: ничего

Шахматы: шахматный ход, шахматная доска (чьи собственные отношения меронимов показывают «квадрат» & 'диагональ')

Книжный шкаф: shelve

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

У кого-нибудь есть предложения по тому, как это сделать?


Просто обновление: закончено, используя смесь ответов Джеффа и Степча Курика.

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

Диапазон результатов из Википедии - лучшая часть. Программное обеспечение может соответствовать таким терминам, как (списки вырезанных для краткости):

  • гольфы: [мяч, утюг, чай, мешок, клуб]
  • фотографии: [камера, кино, фотография, искусство, образом ]
  • рыбалка: [рыба, сеть, крючок, ловушка, приманка, приманки, стержень]

Самая большая проблема классификации определенных слов как физических артефактов; default WordNet не является надежным ресурсом, так как в нем не существует много терминов (таких как «ipod» и даже «trampolining»).

+1

Привет, Я пробовал этот подход, но результаты часто были случайными и не связаны с поисковым запросом. Не могли бы вы рассказать о том, что вы сделали? Например, вы использовали обратные ссылки, ссылки и категории из Википедии? – Crashalot

ответ

13

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

  1. Semantic similarity algorithms. Эти алгоритмы обычно выполняют древовидный переход по отношениям в Wordnet, чтобы получить реальную оценку того, как связаны два термина. Они будут ограничены тем, насколько хорошо WordNet моделирует интересующие вас концепции. WordNet::Similarity (написанный на Perl) довольно хорош.
  2. Пробуйте использовать OpenCyc как базу знаний. OpenCyc - это версия Cyc с открытым исходным кодом, очень большая база знаний «реальных» фактов. Он должен иметь гораздо более богатый набор концепций, чем WordNet. Тем не менее, я никогда не использовал OpenCyc, поэтому я не могу говорить о том, насколько это полно, или как легко его использовать.
  3. n-gram frequency analysis. Как упоминал Джефф Мозер. Подход, основанный на данных, который может «обнаруживать» отношения из больших объемов данных, но часто может давать шумные результаты.
  4. Latent Semantic Analysis. Подход, основанный на данных, аналогичный анализу частоты n-грамм, который находит множества семантически связанных слов.

[...]

Судя по тому, что вы говорите, что вы хотите сделать, я думаю, что последние два варианта, более вероятно, чтобы быть успешным. Если отношения не в Wordnet, то семантическое сходство не будет работать, и OpenCyc, похоже, мало знает о snooker, кроме того, что он существует.

Я думаю, что сочетание как n-граммов, так и LSA (или что-то в этом роде) было бы хорошей идеей. N-граммовые частоты найдут понятия, тесно связанные с вашей целевой концепцией (например, теннисный мяч), и LSA найдет связанные понятия, упомянутые в том же предложении/документе (например, net, serve). Кроме того, если вас интересуют только существительные, фильтрация вашего вывода содержит только существительные или существительные-фразы (с использованием part-of-speech tagger), что может улучшить результаты.

+0

Большое спасибо, ваша информация дала мне много для расследования. – 2009-03-04 17:37:19

+0

Нет проблем, удачи в том, что вы пытаетесь сделать. Это не легко :) – Stompchicken

6

В первом случае вы, вероятно, ищете n-grams, где n = 2. Вы можете получить их из таких мест, как Google, или создать свои собственные из all of Wikipedia.

Для получения дополнительной информации ознакомьтесь с this related Stack Overflow question.

+2

n-граммы 2 - это просто все пары слов, которые обычно появляются вместе. Я думаю, что спрашивал плакат о семантических отношениях. – Avi

+0

Идея состоит в том, что если они появятся вместе, может возникнуть какое-то семантическое отношение, если это произойдет достаточно (например, «теннисная ракетка») имеет семантические отношения, подобные «играть в теннис». –

+0

Это правильная идея. Однако вопрос заключался в использовании WordNet для поиска семантических отношений, а не в использовании n-граммов. – Avi