Извлечение «полезной» информации из предложений?

В настоящее время я пытаюсь понять предложения этой формы:

The problem was more with the set-top box than the television. Restarting the set-top box solved the problem.

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

Что я пытаюсь сделать, так это определить, в чем проблема, так в этом случае, set-top box, и было ли предпринятое действие решить проблему, поэтому в этом случае, yes, потому что перезапуск устранил проблему. Итак, если бы все предложения были в такой форме, моя жизнь была бы проще, но поскольку это естественный язык, предложения также могли бы иметь следующую форму:

I took a look at the car and found nothing wrong with it. However, I suspect there is something wrong with the engine

Так что в данном случае проблема была с car. Предпринятое действие не решило проблему из-за наличия слова suspect. И потенциальная проблема может быть с engine.

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


person Legend    schedule 26.06.2011    source источник
comment
Имея некоторый опыт работы с НЛП/НЛТК, я думаю, что эта проблема твердо стоит на месте: время летит, как стрела, дрозофилы, как крысиная нора семантического анализа банана. Эта маленькая головоломка еще не имеет какого-либо общего решения, о котором я знаю.   -  person msw    schedule 26.06.2011
comment
@msw: О... :) Хорошо! Я не стремлюсь разработать общее решение. Это было бы очень узкоспециализированное решение. Я пытаюсь понять, как можно подойти к таким проблемам (т.е. какие знания предметной области требуются, какие базы данных необходимо скомпилировать, на чем следует обучать классификатор и т. д.)   -  person Legend    schedule 26.06.2011
comment
Образец фразы — старый каштан НЛП, демонстрирующий тщетность даже приближения к цели. Следуя вашему примеру, замените движок на стерео и расскажите мне, как вы, со всеми вашими личными навыками НЛП, могли бы устранить неоднозначность вашего образца (Плохая вещь) и моей модификации (Незаботливая вещь).   -  person msw    schedule 26.06.2011
comment
@msw: я понимаю твою точку зрения. Я изменил название своего вопроса. Извини за это. То, что я пытаюсь сделать, это извлечь информацию. Интерпретация значения этого будет оставлена ​​эксперту в предметной области. Так что в этом случае меня будут интересовать как движок, так и стереосистема, потому что я не пытаюсь определить важность, а скорее получаю «резюме» предложения.   -  person Legend    schedule 26.06.2011
comment
возможный дубликат парсера для анализа условий поиска и извлечения ценной информации а также многие более ранние вопросы, где кто-то новичок в НЛП формулирует проблему извлечения информации. @Legend: обязательно ознакомьтесь с главой 7 книги NLTK. .   -  person Fred Foo    schedule 26.06.2011


Ответы (2)


Вероятно, если предложения правильно построены, я бы поэкспериментировал с разбором зависимостей (http:// nltk.googlecode.com/svn/trunk/doc/api/nltk.parse.malt.MaltParser-class.html#raw_parse). Это дает вам график составляющих предложения, и вы можете определить отношения между лексическими единицами. Позже вы можете извлечь фразы из вывода парсера зависимостей (http://nltk.googlecode.com/svn/trunk/doc/book/ch08.html#code-cfg2). Это может помочь вам извлечь прямой объект предложение или глагольную фразу в предложении.

Если вы просто хотите получить фразы или «фрагменты» из предложения, вы можете попробовать анализатор фрагментов (http://nltk.googlecode.com/svn/trunk/doc/api/nltk.chunk-module.html). Вы также можете выполнить распознавание именованных объектов (http://streamhacker.com/2009/02/23/chunk-extraction-with-nltk/). Обычно он используется для извлечения экземпляров мест, организаций или имен людей, но он может работать и в вашем случае.

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

person Ruggiero Spearman    schedule 26.06.2011

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

Поиски святого Грааля НЛП обязательно оставят вас неудовлетворенными.

person msw    schedule 26.06.2011
comment
Лучшее, на что вы можете надеяться, в том же предложении, что и наивный байесовский классификатор, дает вам -1. Существует много, много более эффективных моделей машинного обучения для извлечения информации. Я подозреваю, что было бы проще написать набор регулярных выражений, чем пытаться получить слабый алгоритм обучения, такой как наивный байесовский алгоритм, для решения такой сложной проблемы. - person Fred Foo; 26.06.2011