Размер шрифта
-
+

Нейросети. Обработка естественного языка - стр. 22

Пример кода для анализа текста с использованием сверточных слоев на Python и библиотеке TensorFlow/Keras:

import tensorflow as tf

from tensorflow.keras.layers import Embedding, Conv1D, GlobalMaxPooling1D, Dense

from tensorflow.keras.models import Sequential

from tensorflow.keras.preprocessing.text import Tokenizer

from tensorflow.keras.preprocessing.sequence import pad_sequences

import numpy as np

# Генерируем синтетический датасет для примера

texts = ["Этот фильм был ужасным!", "Отличный фильм, рекомендую.", "Сюжет оставляет желать лучшего."]

# Метки классов (положительный, отрицательный)

labels = [0, 1, 0]

# Токенизация и векторизация текстов

tokenizer = Tokenizer(num_words=1000)

tokenizer.fit_on_texts(texts)

sequences = tokenizer.texts_to_sequences(texts)

# Подготовка данных для модели

max_sequence_length = max([len(seq) for seq in sequences])

padded_sequences = pad_sequences(sequences, maxlen=max_sequence_length)

# Создание модели CNN для анализа текста

model = Sequential()

model.add(Embedding(input_dim=len(tokenizer.word_index) + 1, output_dim=100, input_length=max_sequence_length))

model.add(Conv1D(32, 3, activation='relu')) # Изменено ядро с 5 на 3 и количество фильтров с 128 на 32

model.add(GlobalMaxPooling1D())

model.add(Dense(1, activation='sigmoid'))

# Компиляция модели

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

# Обучение модели

x_train = padded_sequences

y_train = np.array(labels)

model.fit(x_train, y_train, epochs=10)

# Оценка модели

test_text = ["Это лучший фильм, который я когда-либо видел!"]

test_sequence = tokenizer.texts_to_sequences(test_text)

padded_test_sequence = pad_sequences(test_sequence, maxlen=max_sequence_length)

result = model.predict(padded_test_sequence)

print("Результат анализа текста:", result)



В данном примере результатом будет число от 0 до 1, которое показывает вероятность положительного обзора. Например, если результат равен 0.85, это означает, что модель оценивает текст как положительный с вероятностью 85%. Если результат близок к 0, это означает, что текст скорее всего отрицательный, а если близок к 1, то текст скорее всего положительный.

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

– Обработка последовательностей:

Сверточные нейронные сети (CNN), изначально разработанные для обработки изображений, также могут быть применены к текстовым данным. Для этого текст обрабатывается как последовательность символов или слов, и каждый элемент последовательности (символ или слово) кодируется в числовой форме. Затем текст преобразуется в матрицу, где каждый столбец соответствует символу или слову, а строки – контекстным окнам (например, наборам слов или символов).

Давайте рассмотрим этот процесс более подробно:

Кодирование текста: Сначала текст кодируется в числовую форму. Это может быть выполнено с использованием токенизации, при которой каждому уникальному слову или символу назначается уникальное числовое значение (индекс). Эти числовые значения представляют слова или символы в числовой форме.

Представление в виде матрицы: Кодированный текст представляется в виде матрицы, где каждый столбец соответствует слову или символу, а строки представляют контекстные окна. Это означает, что каждая строка матрицы представляет собой последовательность слов или символов из исходного текста. Размерность матрицы зависит от размера контекстного окна и размера словаря (количество уникальных слов или символов).

Страница 22