Разбор естественного языка, практический пример - PullRequest
4 голосов
/ 07 марта 2009

Я хочу использовать библиотеку синтаксического анализа на естественном языке для простого чата. Я могу получить метки частей речи, но мне всегда интересно. Что вы делаете с POS. Если я знаю части речи, что тогда?

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

Ответы [ 4 ]

6 голосов
/ 07 марта 2009

Метка части речи назначает метки словам во входном тексте. Например, популярный набор тегов Penn Treebank имеет около 40 меток, таких как «множественное число существительное», «сравнительное прилагательное», «глагол прошедшего времени» и т. Д. Теггер также разрешает некоторую неоднозначность. Например, многие английские словоформы могут быть существительными или глаголами, но в контексте других слов их часть речи однозначна. Итак, аннотировав свой текст с помощью POS-тегов, вы можете ответить на такие вопросы, как: сколько у меня существительных? Сколько предложений не содержит глагола? И т. Д.

Для чат-бота вам, очевидно, нужно гораздо больше. Вы должны выяснить предметы и объекты в тексте, и к какому глаголу (предикату) они присоединяются; вам нужно разрешить анафорам (на кого указывает он или она указывает), какова область отрицания и квантификаторы (например, каждые , более 3 ) и т. д.

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

Пока POS-тегер сопоставляет предложение

Mary likes no man who owns a cat.

к такой структуре

Mary/NNP likes/VBZ no/DT man/NN who/WP owns/VBZ a/DT cat/NN ./.

Вы бы предпочли что-то вроде этого:

SubClassOf(
   ObjectIntersectionOf(
      Class(:man)
      ObjectSomeValuesFrom(
         ObjectProperty(:own)
         Class(:cat)
      )
   )
   ObjectComplementOf(
      ObjectSomeValuesFrom(
         ObjectInverseOf(ObjectProperty(:like))
         ObjectOneOf(
            NamedIndividual(:Mary)
         )
      )
   )
)

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

Хорошей библиотекой Java для NLP является LingPipe . Однако это не выходит за рамки POS-тегов, разбиения на фрагменты и распознавания именованных сущностей.

5 голосов
/ 07 марта 2009

Обработка естественного языка широкая и глубокая, корни уходят как минимум в 60-е годы. Вы можете начать читать с компьютерной лингвистики в целом, генерации естественного языка , генеративных грамматик , цепей Маркова , болтунов и пр.

В Википедии есть краткий список библиотек , который, как я полагаю, вы могли видеть. Java не имеет давних традиций в НЛП, хотя я не смотрел на Стэнфордские библиотеки.

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

3 голосов
/ 07 марта 2009

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

2 голосов
/ 08 марта 2009

Когда у вас есть часть речевых тегов, вы можете извлечь, например, все существительные, чтобы вы примерно знали, о каких вещах или предметах кто-то говорит.

Чтобы дать вам пример:

Кто-то говорит: « Вы можете открыть новое окно. » Когда у вас есть POS-теги, вы знаете, что они не говорят о банке (как в контейнере , jar и т. Д., Что даже имело бы смысл в контексте open ), но window . Вы также будете знать, что open - это глагол.

С этой информацией ваш чат-бот может генерировать гораздо лучший ответ, который не будет иметь ничего общего с консервными банками и т. Д.

Примечание. Для получения POS-тегов вам не нужен анализатор. Достаточно простого POS-тегера. Парсер даст вам еще больше информации (например, что является предметом, что является объектом предложения?)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...