I love to eat chicken.
Today I went running, swimming and played basketball.
Моя цель - вернуть FOOD и SPORTS, просто проанализировав эти два предложения. Как вы можете это сделать?
Я знаком с НЛП и Wordnet. А есть что-то более высокоуровневое/практичное/современное??
Есть ли что-нибудь, что автоматически распределяет слова по "уровням"?
Что еще более важно, каков технический термин для этого процесса?
Ответ 1 · рейтинг 4 · Nathan
Эту проблему трудно решить процедурно, но в последнее время в этой области достигнут значительный прогресс.
Большая часть обработки естественного языка начинается с грамматики (которая может быть или не быть независимой от контекста). Это набор правил построения, указывающих, как более общие вещи состоят из более конкретных.
пример контекстно-свободной грамматики:
Sentence ::= NounPhrase VerbPhrase
NounPhrase ::= ["The"] [Adjective] Noun
Adjective ::= "big" | "small" | "red" | "green"
Noun ::= "cat" | "man" | "house"
VerbPhrase ::= "fell over"
Это явно упрощено, но задача создания полной грамматики для определения всего английского языка огромна, и большинство реальных систем определяют только некоторое ее подмножество, применимое к предметной области.
Как только грамматика определена (или изучена с использованием сложных алгоритмов, известных только Google, подобным Google), строка, называемая "примером", анализируется в соответствии с грамматикой. который помечает каждое слово частями речи. очень сложная грамматика будет состоять не только из частей речи, которые вы выучили в школе, но и из таких категорий, как "Веб-сайты", "Имена пожилых людей" и "ингредиенты".
Эти категории могут быть кропотливо встроены в грамматику людьми или выведены с помощью таких вещей, как аналоговое моделирование или машины опорных векторов. В каждом из них такие вещи, как "курица", "футбол", "барбекю" и "крикет", будут определены как точки в пространстве очень большой размерности вместе с миллионами других точек, а затем алгоритмы кластеризации будут определять группы просто в зависимости от положения этих точек относительно друг друга. тогда можно попытаться вывести имена групп из текста примера.
текст ссылки В этом поиске в Google перечислены несколько техник, используемых в НЛП, и вы можете многому у них научиться.
РЕДАКТИРОВАТЬ, чтобы просто решить эту проблему, можно сканировать Интернет в поисках предложений формы "_ is a _", чтобы создать базу данных отношений между элементами и категориями. затем вы анализируете строку, как указано выше, и ищете слова, которые являются известными элементами в базе данных.
Ответ 2 · рейтинг 3 · Ken Bloom
Вопрос, который вы задаете, - это целая область исследований, называемая тематической категоризацией текста. Отличным обзором методов является "Машинное обучение в автоматизированной категоризации текста" в ACM Computing Surveys, автор Фабрицио Себастьяни.. Один из самых простых методов (хотя и не обязательно самый эффективный) состоит в том, чтобы иметь множество (сотни) примеров предложений в каждой категории, а затем обучать наивный байесовский классификатор на этих образцах предложений. NLTK содержит наивный байесовский классификатор в модуле nltk.classify.naivebayes.
Ответ 3 · рейтинг 2 · Doug L.
Отчасти это делает Google Sets, а также обсуждение, в котором упоминаются надмножества. Тем не менее, я не видел там никаких технических подробностей, только идеи и обсуждения.
Может быть, это могло бы хотя бы помочь вашему исследованию...
Ответ 4 · Community
Вы можете взглянуть на ресурс Домены WordNet от людей из ФБК. Это расширение WordNet, предназначенное для категоризации текста и устранения неоднозначности смысла слов. Он допускает разную степень детализации.
http://wndomains.fbk.eu/
Один из возможных способов применить его к вашей задаче может заключаться в том, чтобы получить NP-фрагменты из ваших предложений, получить их заглавные слова и из них получить категории из доменов WordNet.