Как мне подойти к этой задаче классификации именованных объектов? - PullRequest
1 голос
/ 22 ноября 2011

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

Когда у робота был технический сбой, объект был брошен, но позже был пойман другим роботом.

помечен как:

Когда (робот) / Сущность имели (технический сбой) / Инцидент , (объект) / объект был (брошен) / действие , но позднее (пойман) / действие был (еще один робот) / сущность .

Принимая во внимание подобные примеры, могу ли я научить классификатор распознавать новые именованные сущности? Например, с учетом такого предложения:

У нанобота была ошибка, и он врезался в стену.

должен быть помечен примерно так:

У (нанобот) / Сущность было (ошибка) / Инцидент и поэтому (разбился) / Действие в (стена) /Entity.

Конечно, я знаю, что 100% точность невозможна, но мне было бы интересно узнать какие-либо формальные подходы для этого. Есть предложения?

Ответы [ 3 ]

1 голос
/ 22 ноября 2011

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

Когда (робот) / Сущность имела (технический сбой) / Инцидент, (объект) / Сущность была (брошена) / Действие, но позднее (поймана) / Действие другим роботом.

Почему «другой робот» не аннотирован?

Если вы хотите решить проблему такого рода, вам лучше начать с некоторых регулярных выражений, которые могут быть сопоставлены с версиями строки с тегами POS.

0 голосов
/ 23 ноября 2011

Вы можете попробовать моделирование ролей объектов на http://www.ormfoundation.com/, который рассматривает семантику (факты) между одним или несколькими объектами или именами и их отношения с другими объектами. Существуют также инструменты для преобразования моделей orm в xml и другие языки и наоборот. Смотри http://orm.sourceforge.net/

0 голосов
/ 23 ноября 2011

Я могу думать о 2 подходах.

Сначала шаблон соответствует словам в предложении.Примерно так (псевдокод, хотя он похож на синтаксис синтаксического анализатора фрагментов NLTK):

<some_word>+ (<NN|NNS>) <have|has|had> (<NN|NNS>) 
<NN|NNS> (<VB>|was <VB>) (<and|but> (<VB>|was <VB>))* <into|onto|by> (<NN|NNS>)

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

Другой подход заключается в определении зависимостей между словами в предложении, например, с помощью Stanford Dependency Parser .Помимо прочего, он позволяет добывать объект, субъект и предикат, что кажется очень похожим на то, что вы хотите: в вашем первом предложении «робот» является субъектом, «имел» - предикатом, а «сбой» - объектом.

...