Создание собственной модели анализа настроений может показаться сложной задачей. Это руководство проведет вас через шаги, чтобы начать работу.
Анализ настроений — это метод обработки естественного языка (НЛП), который определяет отношение, стоящее за текстом. Это также известно как интеллектуальный анализ мнений. Цель анализа тональности — определить, имеет ли определенный текст позитивную, негативную или нейтральную тональность. Он широко используется предприятиями для автоматической классификации настроений в отзывах клиентов. Анализ больших объемов отзывов помогает получить ценную информацию о предпочтениях клиентов.
Настройка вашей среды
Вы должны быть знакомы с Основы Python выполнить. Перейдите к Google Колаб или откройте Блокнот Jupyter. Затем создайте новый блокнот. Выполните следующую команду, чтобы установить необходимые библиотеки в вашей среде.
Полный исходный код этого проекта доступен в этом Репозиторий GitHub.
! pip установить tensorflow scikit-learn pandas numpy pickle5
Вы будете использовать NumPy и
библиотека pandas для управления набором данных. TensorFlow для создания и обучения модели машинного обучения. Scikit-learn для разделения набора данных на наборы для обучения и тестирования. Наконец, вы будете использовать pickle5 для сериализации и сохранения объекта токенизатора.Импорт необходимых библиотек
Импортируйте необходимые библиотеки, которые вы будете использовать для предварительной обработки данных и создания модели.
Импортировать пустышка как нп
Импортировать панды как пд
Импортировать тензорный поток как тф
от sklearn.model_selection Импортировать train_test_split
от sklearn.metrics Импортировать точность_оценка
от тензорный поток.keras.preprocessing.text Импортировать Токенизатор
от tensorflow.keras.preprocessing.sequence Импортировать pad_sequences
от тензорный поток.keras.models Импортировать Последовательный
от тензорный поток.keras.слои Импортировать Встраивание, Conv1D, GlobalMaxPooling1D, плотное, отсев
Импортировать огурец5 как соленый огурец
Вы будете использовать классы, импортированные из модулей, позже в коде.
Загрузка набора данных
Здесь вы будете использовать набор данных Trip Advisor Hotel Reviews из Каггл построить модель анализа настроений.
дф = pd.read_csv('/content/tripadvisor_hotel_reviews.csv')
печать (df.head())
Загрузите набор данных и распечатайте его первые пять строк. Печать первых пяти строк поможет вам проверить имена столбцов вашего набора данных. Это будет иметь решающее значение при предварительной обработке набора данных.
Набор данных Trip Advisor Hotel Reviews содержит индексный столбец, столбец обзора и столбец рейтинга.
Предварительная обработка данных
Выберите Обзор и Рейтинг столбцы из набора данных. Создайте новый столбец на основе столбца Рейтинг и назовите его настроение. Если оценка выше 3, пометьте настроение как положительный. Если оценка меньше 3, обозначьте это как отрицательный. Если рейтинг ровно 3, обозначьте его как нейтральный.
Выберите в наборе данных только столбцы обзора и тональности. Перемешайте строки случайным образом и сбросьте индекс фрейма данных. Перетасовка и сброс обеспечивают случайное распределение данных, что необходимо для правильного обучения и тестирования модели.
дф = дф[['Обзор', 'Рейтинг']]
дф[«настроение»] = дф['Рейтинг'].применять(лямбда Икс: «положительный»если х > 3
еще«отрицательный»если х < 3
еще«нейтральный»)
дф = дф[['Обзор', «настроение»]]
df = df.sample (frac=1).reset_index (падение =Истинный)
Преобразовать Обзор текст в последовательность целых чисел с помощью токенизатора. Это создает словарь уникальных слов, присутствующих в тексте обзора, и сопоставляет каждому слову уникальное целочисленное значение. Использовать pad_sequences от Keras, чтобы гарантировать, что все последовательности обзора имеют одинаковую длину.
токенизатор = токенизатор (num_words=5000, oov_token='' )
tokenizer.fit_on_texts (df['Обзор'])
word_index = токенизатор.word_index
последовательности = tokenizer.texts_to_sequences (df['Обзор'])
padded_sequences = pad_sequences (последовательности, maxlen=100, усечение ='почта')
Преобразуйте метки тональности в горячее кодирование.
метки_чувства = pd.get_dummies (df[«настроение»]).ценности
Однократное кодирование представляет категориальные данные в формате, с которым проще работать вашим моделям.
Разделение набора данных на наборы для обучения и тестирования
Используйте scikit-learn, чтобы случайным образом разделить набор данных на наборы для обучения и тестирования. Вы будете использовать обучающий набор для обучения модели классификации настроений отзывов. И вы будете использовать тестовый набор, чтобы узнать, насколько хорошо модель классифицирует новые непросмотренные отзывы.
x_train, x_test, y_train, y_test = train_test_split (дополненные_последовательности, метки настроений, test_size=0.2)
Размер разделения набора данных составляет 0,2. Это означает, что 80% данных будут обучать модель. А остальные 20% будут тестировать работоспособность модели.
Создание нейронной сети
Создать нейронная сеть с шестью слоями.
модель = Последовательный()
model.add(встраивание(5000, 100, input_length=100))
модель.добавить (Conv1D(64, 5, активация='релу'))
model.add(GlobalMaxPooling1D())
model.add(Плотный(32, активация='релу'))
model.add(Выпадение(0.5))
model.add(Плотный(3, активация='софтмакс'))
model.compile (оптимизатор ='Адам', потеря ='категориальная_кроссэнтропия', метрики=['точность'])
модель.резюме()
Первый слой нейронной сети — это Embedding layer. Этот слой изучает плотное представление слов в словаре. Второй уровень — это слой Conv1D с 64 фильтрами и размером ядра 5. Этот слой выполняет операции свертки над входными последовательностями, используя небольшое скользящее окно размером 5.
Третий слой сводит последовательность карт объектов к одному вектору. Он принимает максимальное значение для каждой карты объектов. Четвертый слой выполняет линейное преобразование входного вектора. Пятый слой случайным образом устанавливает часть входных единиц в 0 во время обучения. Это помогает предотвратить переоснащение. Последний слой преобразует выходные данные в распределение вероятностей по трем возможным классам: положительный, нейтральный и отрицательный.
Обучение нейронной сети
Подгонка обучающих и тестовых наборов к модели. Обучите модель в течение десяти эпох. Вы можете изменить количество эпох по своему вкусу.
model.fit (x_train, y_train, эпохи =10, размер_пакета=32, validation_data=(x_test, y_test))
После каждой эпохи оценивается производительность модели на тестовом наборе.
Оценка производительности обученной модели
Использовать модель.предсказать() метод прогнозирования меток тональности для тестового набора. Рассчитайте показатель точности с помощью точность_оценка() функция от scikit-learn.
y_pred = np.argmax (model.predict (x_test), ось =-1)
Распечатать("Точность:", показатель точности (np.argmax (y_test, ось =-1), у_пред))
Точность этой модели составляет около 84%.
Сохранение модели
Сохраните модель с помощью модель.сохранить() метод. Используйте pickle для сериализации и сохранения объекта токенизатора.
модель.сохранить('sentiment_analysis_model.h5')
с открыть('tokenizer.pickle', 'вб') как ручка:
pickle.dump (токенизатор, дескриптор, протокол=pickle. ВЫСОКИЙ_ПРОТОКОЛ)
Объект токенизатора разметит ваш собственный входной текст и подготовит его для подачи в обученную модель.
Использование модели для классификации настроения вашего собственного текста
После создания и сохранения модели вы можете использовать ее для классификации тональности собственного текста. Сначала загрузите сохраненную модель и токенизатор.
# Загружаем сохраненную модель и токенизатор
Импортировать Керас
модель = keras.models.load_model('sentiment_analysis_model.h5')
с открыть('tokenizer.pickle', 'рб') как ручка:
tokenizer = pickle.load (дескриптор)
Определите функцию для прогнозирования тональности входного текста.
дефпредсказать_настроение(текст):
# Токенизировать и дополнять вводимый текст
text_sequence = tokenizer.texts_to_sequences([текст])
text_sequence = pad_sequences (text_sequence, maxlen=100)
# Сделать прогноз, используя обученную модель
предсказанный_рейтинг = model.predict (text_sequence) [0]
если np.argmax (предсказанный_рейтинг) == 0:
возвращаться«Отрицательный»
Элиф np.argmax (предсказанный_рейтинг) == 1:
возвращаться«Нейтральный»
еще:
возвращаться«Положительно»
Наконец, предскажите свой собственный текст.
текст_ввод = «Мне очень понравилось мое пребывание в этом отеле. Персонал был восхитительным, и номер был фантастическим!»
предсказанное_чувство = предсказать_чувство (текстовый_ввод)
печать (прогнозируемое_чувство)
Прогнозируемое настроение вышеприведенного обзора выглядит следующим образом:
Модель способна правильно классифицировать настроения всех трех отзывов.
Прогнозирование настроений с использованием предварительно обученных моделей
Иногда в машинном обучении у вас может возникнуть проблема с поиском правильного набора данных. Вам также может не хватать ресурсов для создания собственного набора данных. Здесь на помощь приходят предварительно обученные модели. Вы должны знать, как использовать их API, а все остальное оставить им.