Подход к извлечению смысла из предложения НЛП - PullRequest
0 голосов
/ 07 сентября 2018

То, что я хочу знать, - это лучший способ извлечь смысл из текста. Я прочитал NLTK , и это дало мне хорошую информацию об основах НЛП.

Я новичок в nlp, поэтому мне тяжело решить, каким должно быть мое направление. После прочтения текста NLTK вот что я думаю, что решит мою проблему:

Вот моя идеальная цель с примерами предложений:

Введите:

Делать Х с 29.08.2008 г. по 12.09.2008 г. (каждую среду) и 10.09.2008 г. (понедельник)

Выходная часть тега Speech выделена жирным шрифтом (по крайней мере то, что я предлагаю):

Выполните X 29.08.2008 ( Дата ) до ( Диапазон ) 9/12/2018 ( Дата ) (каждые ( Частота ) Среда ( День ) и 9/10 / 2018 ( Дата ) (понедельник) ( День )

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

8/29/2018 - 9/12/2018, среда

9/10/2018, понедельник

Я понимаю, что найти дни месяца, дни, даты и т. Д. Можно легко с помощью регулярного выражения.

Но моя проблема в том, что метод NLTK nltk.pos_tag не будет работать для меня. (Для тех, кто не знаком, этот метод является частью речевого тегирования слов likw существительное, глагол и т. Д.) Скорее всего, мне придется настроить свой собственный метод pos_tag ?

Так вот мой вопрос. Является ли тегирование каждого токенизированного слова первым, а затем разбиение предложений из тегов считается лучшей практикой для извлечения значения?

Полагаю, мне понадобится какая-то классификация ИИ, чтобы выучить часть фрагмента, чтобы в будущем я мог извлечь смысл из более чем одного предложения.

Мой подход вменяемый? Я сошел с ума? :)

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Полагаю, что вы ищете не pos-тегирование, так как pos-тегирование подразумевает то, что вы сказали, чтобы решить, является ли слово существительным, глаголом и т. Д. Ваша проблема - это проблема NER, которая означает распознавание именованных сущностей и это позволяет понять, является ли слово или список слов названием места, именем человека, названием отеля и т. д.

Существует множество ресурсов, библиотек учебников (даже в nltk NLTK NER и Spacy Spacy NER ), которые объясняют эту проблему.

Надеюсь, я помог тебе лучше сориентироваться.

Удачи;)

0 голосов
/ 07 сентября 2018

Хотя вы не сошли с ума (возможно :), это очень общий вопрос, который (вероятно) скоро будет помечен администратором как неподходящий для SO, потому что он слишком широк. «Извлечение значения предложения» - это то, над чем в основном работают все, кто работает в НЛП, уже несколько десятилетий. Большинство (коммерчески / практически) жизнеспособных способов сделать это существуют только потому, что их область применения относительно ограничена. Представьте себе чат-бота для бронирования отелей (с четко определенными слотами для даты приезда / отъезда, местоположения и т. Д.), Автомобильной навигационной системой, позволяющей голосовой ввод («Я хочу перейти к X, избегайте шоссе») и т. Д.

Поскольку ваш пример выходных данных нацелен на даты и время, что на самом деле не то, для чего предназначен pos-tagger, какой-то модуль временного анализа может быть лучше для вашего варианта использования. На ум приходит только один набор инструментов https://github.com/HeidelTime/heideltime,, который использует схему TimeML (на которую вы, возможно, захотите взглянуть), чтобы указать конкретные моменты времени, а также временные интервалы, и пытается нормализовать это. в машиночитаемые моменты времени.

Что еще в отношении модулей НЛП вам очень нужно, зависит от вашего вклада. Если он относительно строг (количество разных способов сказать что-то невелико), то, вероятно, лучше всего вручную создать простую грамматику. Однако все становится сложнее. «Do X по понедельникам от dd-mm-yyyy до dd-mm-yyyy» на естественном языке может быть с таким же успехом выражено выражением «Do X по понедельникам, начиная с dd-mm-yyyy и заканчивая на dd-mm-yyyy». Это действительно помогает знать, какой язык будут использовать ваши пользователи. Готовый пакет или инструментарий, предназначенный для извлечения значения из предложения (для английского языка, не говоря уже о одном из 6 000 или более официально признанных языков (в зависимости от того, какое учреждение решит это) :) еще не обнаружен / не разработан .

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

...