Признание сущностей и анализ настроений с использованием НЛП
Так что этот вопрос может быть немного наивным, но я подумал, что спросить дружелюбных людей из Stackru не повредит.
Моя текущая компания уже давно использует сторонний API для НЛП. Мы в основном URL кодируем строку и пересылаем ее, и они извлекают для нас определенные сущности (у нас есть список сущностей, которые мы ищем) и возвращаем json-сопоставление entity: sentiment. Мы недавно решили принести этот проект в дом вместо этого.
Последние 2 дня я изучаю NLTK, Stanford NLP и lingpipe и не могу понять, действительно ли я заново изобретаю колесо для этого проекта.
У нас уже есть массивные таблицы, содержащие исходный неструктурированный текст, и еще одна таблица, содержащая извлеченные из этого текста сущности и их настроения. Сущности - это отдельные слова. Например:
Неструктурированный текст: теперь для кровати. Это был не самый лучший.
Сущность: кровать
Настроение: отрицательное
Я считаю, что это означает, что у нас есть данные обучения (неструктурированный текст), а также сущность и настроения. Теперь, как я могу использовать эти обучающие данные в одной из структур НЛП и получать то, что мы хотим? Понятия не имею. Я вроде получил шаги, но не уверен:
- Токенизировать предложения
- Токенизировать слова
- Найдите существительное в предложении (пометка POS)
- Найдите смысл этого предложения.
Но что не получится в случае, о котором я упоминал выше, так как речь идет о кровати в двух разных предложениях?
Таким образом, вопрос - знает ли кто-нибудь, какой будет лучший фреймворк для выполнения вышеуказанных задач, и какие-либо учебные пособия по нему (Примечание: я не прошу решения). Если вы уже делали это раньше, не слишком ли велика эта задача? Я посмотрел некоторые коммерческие API, но они абсурдно дороги в использовании (мы крошечный стартап).
Спасибо stackru!
4 ответа
OpenNLP также может библиотека для просмотра. По крайней мере, у них есть небольшая опора для обучения искателя имен и использования классификатора документов для анализа настроений. Для поиска искателя имен вы должны подготовить обучающие данные, пометив сущности в вашем тексте тегами SGML.
http://opennlp.apache.org/documentation/1.5.3/manual/opennlp.html
NLTK предоставляет наивный тегер NER вместе с ресурсами. Но он не подходит для всех случаев (включая поиск дат). Но NLTK позволяет вам изменять и настраивать NER Tagger в соответствии с требованиями. Эта ссылка может дать вам некоторые идеи с основными примерами того, как настроить. Также, если вы знакомы с scala и функциональным программированием, это один из инструментов, который вы не можете позволить себе пропустить.
Ура...!
Я недавно обнаружил спа-центр, и это просто здорово! В ссылке вы можете найти сравнительный по производительности с точки зрения скорости и точности по сравнению с NLTK, CoreNLP, и это действительно хорошо!
Хотя, чтобы решить вашу проблему, задача не является основой. Вы можете иметь две разные системы, одну для NER и одну для настроений, и они могут быть полностью независимыми. В наши дни шумиха связана с использованием нейронной сети, и, если вы тоже хотите, вы можете обучить рекуррентную нейронную сеть (которая показала наилучшую производительность для задач НЛП) с механизмом внимания, чтобы найти сущность и чувство.
В интернете есть отличная демоверсия, последние два, которые я прочитал и нашел интересными, это [1] и [2].
Подобно Spacy, TextBlob - еще один быстрый и простой пакет, который может выполнять многие из этих задач.
Я часто использую NLTK, Spacy и Textblob. Если корпус простой, универсальный и простой, Spacy и Textblob хорошо работают OOTB. Если корпус сильно настроен, специфичен для конкретного домена, грязен (неправильное написание или грамматика) и т. Д. Я буду использовать NLTK и потрачу больше времени на настройку конвейера обработки текста NLP с помощью очистки, лемматизации и т. Д.
Учебное пособие по NLTK: http://www.nltk.org/book/
Быстрый запуск Spacy: https://spacy.io/usage/
Быстрый запуск Textblob: http://textblob.readthedocs.io/en/dev/quickstart.html