Текстовая классификация

Классификация текста - это базовый метод машинного обучения, используемый для умной классификации текста по различным категориям. Существует множество вариантов использования классификации текста. Фильтрация спама, анализ настроений, классификация обзоров продуктов, управление поведением клиента при просмотре в зависимости от того, что он ищет или просматривает, и таргетированный маркетинг на основе того, что клиент делает в Интернете и т. Д. В этом примере мы будем использовать контролируемую классификацию текста. Он работает по принципу «обучение» и «проверка». Мы вводим помеченные данные в алгоритм машинного обучения для работы. После обучения алгоритма мы используем набор обучающих данных, чтобы понять точность алгоритма и обучающих данных. Эффективность вывода зависит от качества данных и силы алгоритма. В этом примере нет необходимости писать какой-либо алгоритм, мы будем использовать внутренний алгоритм fasttext.

быстрый текст

В этом блоге мы автоматически классифицируем жалобы потребителей по одной или нескольким релевантным категориям, используя fasttext. FastText - это бесплатная, легкая библиотека с открытым исходным кодом, которая позволяет пользователям изучать текстовые представления и текстовые классификаторы. Он работает на стандартном стандартном оборудовании. Это открытый исходный код от Facebook.

Установить fasttext очень просто. Я использую OSx.

$ git clone https://github.com/facebookresearch/fastText.git

$ cd fastText

$ make

Вы можете проверить успешность установки fasttext, введя команду ниже.

Равиндрас-MacBook-Pro: fastText ravindraprasad $ ./fasttext

Получите и подготовьте данные:

Загрузите csv-файл с данными о жалобах потребителей здесь. В этот набор данных поступили жалобы на финансовые продукты и услуги. Эти жалобы аккуратно разделены на различные продукты. В CSV-файле указаны дата получения, продукт, субпродукт, проблема, солнечная проблема, описание жалобы потребителей и т. Д. В этом примере нас интересует описание продукта и жалобы потребителей. Формулировка проблемы, которую мы пытаемся решить, звучит так: Когда клиент пишет новую жалобу, как мы автоматически классифицируем продукт? Разве это не интересно? Начнем с решения.

Прочтите и обработайте файл, используя приведенный ниже код Python.

Ваш результат будет выглядеть примерно так.

fasttext ожидает, что данные будут примерно такими

__label__1 это мой текст

__label__2 это тоже мой текст

Теперь нам нужно подготовить данные о продукте. Результат должен выглядеть так:

__label__credit_reporting Счет в моем кредитном отчете…

__label__Debt_collection Эта компания отказывается предоставить мне…

Давайте расширим предыдущий код.

дайте эту команду, чтобы проверить содержимое.

Consumercompliants.head (200)

ниже выводится

также проверьте хвост

Consumercompliants.tail (1000)

В терминале введите эту команду, чтобы увидеть, правильно ли загружен файл

head consumer.complaints.txt

подсчитать количество записей

wc consumer.complaints.txt

выход

314263 62315198 415588908 consumer.complaints.txt

файл имеет 3,14,263 записей.

Мы сделаем два набора данных примерно с 80% данных или 2,50 000 записей для обучения и 20% данных или 64263 записей для проверки (тестирования).

head -n 250000 consumer.complaints.txt ›plays.train.txt

tail -n 64263 consumer.complaints.txt ›questions.valid.txt

теперь обучите модель с помощью fasttext

./fasttext supervised -входить жалобы.train.txt -выходать модель_жалобы

теперь мы можем протестировать модель, используя

./fasttext предсказать model_complaints.bin -

Некоторые жалобы он умеет правильно классифицировать. Но некоторые, похоже, не ладили. Особенно плохой телефон и обслуживание клиентов. Мне понравилось «Где деньги?» Модель правильно предсказала, что это связано с денежным переводом. Однако я бы подумал, что «мне нужно с кем-то поговорить» в идеале должно быть связано со службой. Но в данном случае это отображается в разделе «Ипотека». На более поздних этапах мы продолжим улучшать модель.

Мы также можем проверить эффективность модели с помощью тестовых данных.

./fasttext test model_complaints.bin жалобы.valid.txt

Здесь N - количество тестовых записей, точность при 1 (P @ 1) и отзыв при 1 (R @ 1)

Точность - это количество правильных меток среди меток, предсказываемых fastText. Отзыв - это количество успешно предсказанных этикеток среди всех реальных этикеток.

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

кошка consumer.complaints.txt | sed -e «s /\((.\!?,’/() ]\)/ \ 1 / g» | tr «[: upper:]» «[: lower:]» ›consumer.processed.txt

Давайте снова сделаем данные для обучения и тестирования.

head -n 250000 consumer.processed.txt ›sizes.processed.train.txt

tail -n 64263 consumer.processed.txt ›declare.processed.valid.txt

./fasttext supervised -ввод жалобы.processed.train.txt -выход model_complaints_processed

Количество слов сократилось с 2,29 616 до 1,14 973 почти на 50%.

./fasttext test model_complaints_processed.bin sessions.processed.valid.txt

Вы можете видеть, что точность увеличилась с 0,788 до 0,793 примерно на 0,8%. Не большое изменение.

Количество просмотров каждого примера (также известное как количество эпох) можно увеличить с помощью параметра -epoch:

./fasttext supervised -ввод жалобы.processed.train.txt -выход model_complaints_processed -epoch 25

проверить эффективность модели сейчас.

./fasttext test model_complaints_processed.bin sessions.processed.valid.txt

Точность увеличена с 0,793 до 0,802 примерно на 1%.

Теперь давайте изменим скорость обучения. Скорость обучения, равная 0, означает, что модель вообще не меняется и, следовательно, ничего не изучает. Хорошие значения скорости обучения находятся в диапазоне от 0,1 до 1,0.

./fasttext supervised -ввод жалобы.processed.train.txt -выход model_complaints_processed -lr 1.0

./fasttext test model_complaints_processed.bin sessions.processed.valid.txt

Никаких изменений.

Теперь давайте попробуем и эпоху, и скорость обучения.

./fasttext supervised -ввод жалобы.processed.train.txt -выход model_complaints_processed -lr 1.0 -epoch 25

./fasttext test model_complaints_processed.bin sessions.processed.valid.txt

Похоже, не лучшая попытка. Точность упала. А теперь вернитесь к 25-й эпохе.

Напоследок попробуем со словом н-граммы.

./fasttext supervised -ввод жалобы.processed.train.txt -выход model_complaints_processed -epoch 25 -wordNgrams 2

./fasttext test model_complaints_processed.bin sessions.processed.valid.txt

Точность увеличена с 0,802 до 0,814. Это на 1,5% больше. Давайте попробуем несколько ручных примеров на этой модели.

./fasttext предсказать model_complaints_processed.bin -

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

Вот и все, ребята. Если вам понравилась статья, поделитесь ею и не забудьте аплодировать.

Спасибо Sunil M за помощь мне с красивым кодом Python.