Поиск родственных слов (в частности, физических объектов) к определенному слову
Вопрос
Я пытаюсь найти слова (в частности, физические объекты), связанные с одним словом.Например:
Теннис:теннисная ракетка, теннисный мяч, теннисная обувь
Снукер:снукерный кий, снукерный шар, мел
Шахматы:шахматная доска, шахматная фигура
Книжный шкаф:книга
Я попытался использовать WordNet, в частности семантическую связь меронима;однако этот метод не является последовательным, как показывают приведенные ниже результаты:
Теннис:подача, залп, ошибка ногой, заданное значение, отдача, преимущество
Снукер: ничего
Шахматы:шахматный ход, шахматная доска (отношение собственных меронимов которой показывает ‘квадрат’ и "диагональ")
Книжный шкаф:отложить на полку
В конечном счете потребуется взвешивание терминов, но сейчас это не вызывает особого беспокойства.
У кого-нибудь есть какие-либо предложения о том, как это сделать?
Просто обновление:В итоге я использовал смесь ответов Джеффа и Стомпчикена.
Качество информации, полученной из Википедии, превосходное, особенно то, что (неудивительно) в ней так много релевантной информации (по сравнению с некоторыми корпусами, где таких терминов, как "блог" и "ipod", не существует).
Диапазон результатов из Википедии - это лучшая часть.Программное обеспечение способно сопоставлять такие термины, как (списки сокращены для краткости):
- Гольф:[мяч, железо, футболка, сумка, клюшка]
- Фотография:[камера, фильм, фотография, искусство, изображение]
- рыбалка:[рыба, сеть, крючок, ловушка, наживка, прикормка, удочка]
Самая большая проблема заключается в классификации определенных слов как физических артефактов;WordNet по умолчанию не является надежным ресурсом, поскольку многих терминов (таких как "ipod" и даже "прыжки на батуте") в нем не существует.
Решение
Я думаю, то, о чем вы просите, является источником семантических связей между понятиями.Для этого я могу придумать несколько способов:
- Алгоритмы семантического подобия.Эти алгоритмы обычно выполняют древовидный обход взаимосвязей в Wordnet, чтобы получить действительную оценку того, насколько связаны два термина.Они будут ограничены тем, насколько хорошо WordNet моделирует интересующие вас концепции. WordNet::Сходство (написано на Perl) довольно хорошо.
- Попробуйте использовать OpenCyc ( Открытый код ) в качестве базы знаний.OpenCyc - это версия Cyc с открытым исходным кодом, очень большая база знаний о "реальных" фактах.У него должен быть гораздо более богатый набор семантических реализаций, чем у WordNet.Однако я никогда не использовал OpenCyc, поэтому не могу сказать, насколько он полон или насколько прост в использовании.
- частотный анализ в n граммах.Как упоминал Джефф Мозер.Подход, основанный на данных, который может "обнаруживать" взаимосвязи из больших объемов данных, но часто может приводить к шумным результатам.
- Скрытый Семантический Анализ.Основанный на данных подход, аналогичный частотному анализу n-грамм, который находит наборы семантически связанных слов.
[...]
Судя по тому, что вы говорите, что хотите сделать, я думаю, что последние два варианта с большей вероятностью будут успешными.Если отношений нет в Wordnet, то семантическое сходство не будет работать, и OpenCyc, похоже, мало что знает о снукер кроме того факта, что он существует.
Я думаю, что комбинация как n-граммов, так и LSA (или что-то в этом роде) была бы хорошей идеей.Частоты N-грамма обнаружат концепции, тесно связанные с вашей целевой концепцией (напримертеннисный мяч) и LSA нашли бы родственные понятия, упомянутые в одном предложении / документе (напримерчистить, подавать).Кроме того, если вас интересуют только существительные, отфильтруйте выходные данные, чтобы они содержали только существительные или словосочетания с именами (используя устройство для пометки частей речи) может улучшить результаты.
Другие советы
В первом случае вы, вероятно, ищете n-граммы где n = 2.Вы можете получить их из таких мест, как Google, или создать свои собственные из вся Википедия.
Для получения дополнительной информации ознакомьтесь с этот связанный с переполнением стека вопрос.