В наши дни многие платформы социальных сетей используют ИИ для классификации вульгарных и оскорбительных сообщений и их автоматического удаления. Я подумал, почему бы не попробовать сделать что-то подобное; и поэтому я придумал это сквозное руководство, которое поможет вам создать собственный корпус для обучения модели классификации текста, а затем экспортировать и развернуть его в приложении Android для использования. Все это, абсолютно на пользовательском наборе данных по вашему выбору.

Итак, вы рады создать собственное приложение для классификатора текста? Если да, то давайте начнем шоу.

Теперь, прежде чем мы начнем, позвольте мне сказать вам, что мы будем выполнять всю настройку гиперпараметров модели и обучение в Google Colab. Чтобы создать приложение для Android, нам понадобится Android Studio. Если вы еще не установили его, найдите его здесь.

Шаг 1. Создайте корпус.
Я создаю классификатор текста, который будет классифицировать вводимый текст как оскорбительный или не оскорбительный. Следовательно, для простоты я ограничил свою модель классификации текста двумя классами. Не стесняйтесь создавать собственный набор данных по вашему выбору с любым количеством классов. Общий процесс будет точно таким же.

Переходя к части сбора данных, позвольте мне быть честным. Хотя на Kaggle доступно множество наборов данных, я не нашел ни одного подходящего для моего приложения. Итак, я вручную создал свой собственный набор данных, соскребая тексты и цитаты в Интернете, которые, по моему мнению, лучше всего классифицировать как оскорбительные или не оскорбительные. Я собрал около 1000 предложений и пометил их как «оскорбительные» и «неоскорбительные» в зависимости от характера языка, используемого в каждом предложении. Соотношение обучающих и тестовых данных составляет 7:3.

Ниже приведен снимок того, как выглядит мой набор данных.

Примечание: Излишне говорить, но надеюсь, что все понимают, что здесь никого не оскорбляют. :)

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

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

Как только вы соберете достаточно текстов для своего корпуса, разделите набор данных на два разных CSV-файла — train.csv и test.csv соответственно. Идеальным соотношением было бы 7:3. Как я постоянно повторяю в своих статьях: Мусор на входе, мусор на выходе. Так что не торопитесь собирать корпус и не торопитесь.

Хорошо, если вы чувствуете, что создали надежный набор данных с достаточным количеством текстовых образцов, вы можете перейти к следующему шагу.

Шаг 2. Обучение модели.
Клонируйте этот репозиторий GitHub на свой локальный компьютер. В этом репозитории вы найдете файл записной книжки с именем Custom_Text_Classification.ipynb.

Войдите в свою учетную запись Google, откройте блокнот в Google Colab и подключитесь к среде выполнения. Загрузите файлы train.csv и test.csv, созданные на шаге 1; как показано на рисунке ниже.

Теперь запустите ячейки блокнота одну за другой, следуя инструкциям.

Установите TF Lite Model Maker.
Установите библиотеку TensorFlow Lite Model Maker. TF Lite Model Maker упрощает обучение моделей на пользовательском наборе данных и сокращает время обучения с помощью трансферного обучения на предварительно обученных моделях.

!pip install -q tflite-model-maker

Установите необходимые библиотеки.

import numpy as np
from numpy.random import RandomState
import pandas as pd
import os
from tflite_model_maker import model_spec
from tflite_model_maker import text_classifier
from tflite_model_maker.config import ExportFormat
from tflite_model_maker.config import QuantizationConfig
from tflite_model_maker.text_classifier import AverageWordVecSpec
from tflite_model_maker.text_classifier import DataLoader
import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')

Импорт набора данных.
Импортируйте набор данных для обучения и тестирования и прочитайте их в виде CSV-файлов с помощью библиотеки Pandas.

df_train = pd.read_csv('train.csv', error_bad_lines=False, engine="python")
df_test = pd.read_csv('test.csv', error_bad_lines=False, engine="python")

Просмотреть набор данных.
Проверьте свой набор данных и убедитесь, что он правильно импортирован.

df_train.head()

df_test.head()

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

spec = model_spec.get('average_word_vec')
# spec = model_spec.get('mobilebert_classifier')
# spec = model_spec.get('bert_classifier')
# spec = AverageWordVecSpec(wordvec_dim=32)

Архитектура и работа этих моделей выходит за рамки этой статьи. Однако, если вы хотите узнать больше о том, как работает каждая из этих моделей, перейдите по следующей ссылке.

Настройте гиперпараметры модели MobileBERT (необязательно).

Запускайте эту ячейку, только если вы выбрали архитектуру «mobilebert_classifier» в предыдущей ячейке.

# spec.seq_len = 256

Загрузить данные обучения и тестирования.
Загрузить CSV-файлы данных обучения и тестирования, чтобы подготовить процесс обучения модели. Убедитесь, что для параметра is_training для test_data установлено значение False.

train_data = DataLoader.from_csv(
   filename='train.csv',
   text_column='sentence',
   label_column='label',
   model_spec=spec,
   is_training=True)
test_data = DataLoader.from_csv(
   filename='test.csv',
   text_column='sentence',
   label_column='label',
   model_spec=spec,
   is_training=False)

Обучение модели.
Запустите обучение модели на наборе данных поезда. Не стесняйтесь играть с разными номерами. эпох, пока не найдете идеальное значение эпохи, дающее наилучшие результаты.

model = text_classifier.create(train_data, model_spec=spec, epochs=100)

Изучите структуру своей модели — слои нейронной сети.

model.summary()

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

loss, acc = model.evaluate(test_data)

Экспорт модели TF Lite.
Окончательная модель экспортируется как модель TF Lite, которую можно загрузить и напрямую развернуть в приложении для Android.

model.export(export_dir='average_word_vec')

Когда вы запустите вышеуказанную ячейку, будет создана папка с именем 'average_word_vec', содержащая модель TF Lite с именем model.tflite. Загрузите эту модель на свой локальный компьютер.

Теперь эта модель готова к развертыванию в нашем приложении для Android. Но где приложение для Android? Найдите его на следующем шаге.

Шаг 3. Создание приложения для Android.
Я уже создал приложение для Android, взяв за основу официальное приложение для классификации текстов TensorFlow Lite и настроив его в соответствии со своими потребностями, где прогнозы могут быть представлены графически. . Вы можете найти это приложение в папке Android_App репозитория, который вы клонировали ранее.

Теперь давайте развернем модель в приложении.
Скопируйте файл model.tflite в каталог Custom-Text-Classification-on-Android-using-TF-Lite/Android_App/lib_task_api/src/main/assets.

После того, как вы скопировали модель в указанный каталог, откройте проект в Android Studio и дайте ему некоторое время собраться. Пока проект строится, давайте прогуляемся и выпьем вместе. Я бы предпочел чай кофе в любой день. :)

Теперь, когда проект, наконец, успешно построен, все, что вам нужно сделать, это открыть файл TextClassificationClient.java в разделе lib_task_api и отредактировать строку 31, заменив <your_model.tflite> на имя файла вашей модели. В этом случае замените его на model.tflite . Постройте проект еще раз после внесения этого изменения.

Что дальше? Ничего такого. Выпейте кофе, установите приложение на свой мобильный телефон и наслаждайтесь использованием собственного приложения для классификации текстов.

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

Если вам понравилась эта статья и вы хотите поговорить об этом подробнее, давайте подключимся к LinkedIn. С радостью ответим на любые отзывы и вопросы. А пока, прощай.