Как классифицировать текст с помощью нейронной сети?

Доброе время суток всем. Есть текст(сообщения) и нужно их классифицировать.
Например это подходит:

Добрый вечер.Ищу мастера макияжа на воскресенье. Спасибо.

Сегодня вечером нужно установить тв на стену Помогите мастера????)))))

Добрый день!Уважаемые родители, подскажите пожалуйста хорошего ортопеда!


А вот это уже не подходит:

Здравствуйте. У нас продаются такие гирлянды ?

Подскажите пожалуйста, где (не обязательно на ЖК) есть хорошее ателье.Мне нужно на шубке поменять застежки.


1. Нужно понять подходит ли оно вообще, то есть ищут ли какого то человека, мастера. Если что то другое, следовательно оно не подходит.
2. Нужно определить к какому виду относится сообщение, к какой категории, например - медицина, красота, уборка, типо такого.

Я так понимаю нужно создать нейронную сетку с учителем. Скормить ей сообщения такие и поправлять пока более нормально веса не настроятся.
Подскажите пожалуйста может уже где то есть решение данной задачи. Желательно библиотека какая то на python. Чтобы ее научить и она потом верно будет классифицировать текст. Заранее спасибо.
  • Вопрос задан
  • 16506 просмотров
Пригласить эксперта
Ответы на вопрос 5
2ord
@2ord
Если знаний в компьютерной лингвистке чуть больше чем ноль, то задачу решить получится не скоро ...
Почему-то поголовное большинство разработчиков тешутся надеждой, что нейронные сети магическим образом решат любую задачу в области искусственного интеллекта.

А какими примерами обучать нейросеть? Ведь не голым текстом... Типа, говоришь нейросети: "глянь, тут человека упомянули". Так что-ли? Для компьютера текст - это лишь последовательность байтов, поэтому он не может понять что для нас-людей представляет интерес. Компьютеру нужно всё разжевать и объяснить на языке цифер.
Ведь как носители языка понимают, что в тексте речь о людях? Есть набор запомненных слов (словарь), которые человек прочтя или услышав, сравнивает со своим словарным запасом и тогда решает, к какой категории относится слово в данном контексте.

Чтобы, проанализировав текст, понять, что "ищут ли какого то человека, мастера", необходимо вычленить некоторые ключевые слова, взятые из словаря: "ищу", "помогите", "подскажите", "посоветуйте", "требуется" и т.д., в сочетании с упоминанием людей (синонимы) и профессий (словарь профессий).
Нейронная сеть на этом этапе не нужна. Она поможет в классификации при работе с цифрами, фактами (булева логика). Так что перед анализом текста нужно извлечь факты и связи из текста и затем скармливать ими классификатор. Помимо нейронных сетей есть другие виды классификаторов, более простых и лёгких в использовании, такие как байесовский классификатор. Нейросети могут быть как с обучением, так и без.

В качестве вводной части имеет смысл начать с лекции Яндекс - Малый ШАД - Лингвистика в поиске.pdf
По практической части: Что такое Томита-парсер, как Яндекс с его помощью ...

Возможно, задача решается проще и без нейросетей.
Ответ написан
Комментировать
Arseny_Info
@Arseny_Info
R&D engineer
1) Почистить данные (убрать стоп-слова, спецсимволы, привести в нормальную форму и т.п.)
2) Векторизовать данные (bag of words, tf-idf, n-grams... )
3) Разделить выборку на train/test.
4) Собственно, обучить классификатор (не начинайте с нейросетей, начните с чего-то более простого типа random forest).
5) Сделать кросс-валидацию, ужаснуться от результата, начать чинить проблемы на каждом шаге.

Очень базовый туториал scikit-learn.org/stable/tutorial/text_analytics/wo... Гораздо менее базово - nlp.stanford.edu/IR-book/.
Ответ написан
Комментировать
@rPman
Сам по себе текст в чистом виде на вход нейронных сетей не подходит, вам нужны критерии, количество которых не меняется от теста к тесту и значение которых нормализовано (находится в пределах, обычно делают 0..1 или даже -1.. +1), критерии по значениям (тупо перечисления enum) могут быть как один критерий с фиксированными значениями (плохой вариант, подходит для критериев которые можно сравнить) так и может быть векторами, значения которых 0 и один из элементов 1. К итогам работы нейросети те же требования (с перечислениями это обычно вектор вероятностей)

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

Это если велосипед изобретать. по существующим решениям подсказать не могу, пока еще сам этим не занимался.
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Такой шаблон вижу:
(ищу|подскажите|где найти|помогите|требуется|нужен) (мастер|[[[профессия1]]]|[[[профессияN]]])
Ответ написан
@it2manager
Для решения вашей задачи необходимо изучить алгоритм Байеса (bazhenov.me/blog/2012/06/11/naive-bayes) и использовать библиотеку pymorphy2 для выделения нормальной формы слов. Все реализуется за пару дней на phyton. Работает с точностью до 90%, в тех случаях которые вы описали.
P/S/ У нас работает для автоматической классификации запросов от пользователей :) Классификатор достаточно ветвистый. Мы не использовали готовые библиотеки для алгоритма -хотелось поиграться самими. В качестве БД используется sqllite.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы