Чтение онлайн

на главную - закладки

Жанры

Нейросети. Обработка естественного языка
Шрифт:

Этот код демонстрирует основные шаги для создания и обучения CNN модели для классификации текста. Результатом будет точность классификации текстов на категории.

Достичь абсолютной точности (1.0) в реальных задачах классификации текста обычно бывает сложно, так как тексты могут быть многозначными и содержать разнообразные варианты фраз. Тем не менее, можно создать пример кода, где модель будет совершенно точно классифицировать некоторые простые текстовые данные:

```python

import numpy as np

import tensorflow as tf

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import Embedding, LSTM, Dense

from sklearn.model_selection import train_test_split

#

Создадим синтетический датасет для иллюстрации

texts = ["Сегодня хорошая погода.", "Завтра будет солнечно.", "Лето – лучшее время года.", "Дождь идет весь день."]

labels = [1, 1, 2, 0] # 0 – дождь, 1 – солнце, 2 – лето

# Токенизация и векторизация текстов (в данном случае, просто индексирование)

tokenizer = tf.keras.layers.TextVectorization

tokenizer.adapt(texts)

# Создание модели LSTM

model = Sequential

model.add(tokenizer)

model.add(Embedding(input_dim=len(tokenizer.get_vocabulary), output_dim=16, input_length=6))

model.add(LSTM(16))

model.add(Dense(3, activation="softmax")) # Три класса: дождь, солнце, лето

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

model.compile(loss="sparse_categorical_crossentropy", optimizer="adam", metrics=["accuracy"])

# Создание фиктивных данных для обучения и теста

x_train, x_test, y_train, y_test = train_test_split(texts, labels, test_size=0.2, random_state=42)

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

model.fit(x_train, y_train, epochs=10, verbose=0) # Модель будет идеально подстраиваться под эти простые данные

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

accuracy = model.evaluate(x_test, y_test)[1] # Извлекаем точность из метрик

print(f"Точность: {accuracy:.4f}")

```

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

– Извлечение признаков из текста:

Сверточные нейронные сети (Convolutional Neural Networks, CNN) изначально разрабатывались для обработки изображений, но они также могут быть эффективно применены для анализа текста. Одной из ключевых особенностей CNN является их способность автоматически извлекать значимые признаки из данных, что делает их полезными инструментами для анализа текстов.

Рассмотрим как работают сверточные слои в анализе текста:

1. Сверточные фильтры: Сверточные слои используют фильтры (ядра), которые скользят (конволюцируются) по входным данным. В случае текста, фильтры скользят по последовательности слов (токенов). Фильтры представляют

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

2. Извлечение признаков: При скольжении фильтров по тексту они извлекают локальные признаки. Например, один фильтр может выделять биграммы (пары слов), а другой – триграммы (три слова подряд). Фильтры "апроксимируют" части текста, выявляя важные структуры, такие как фразы, ключевые слова или грамматические конструкции.

3. Свертка и пулинг: После применения фильтров, результаты свертки подвергаются операции пулинга (pooling). Пулинг уменьшает размерность данных, оставляя только наиболее важные признаки. Операция Max-Pooling, например, выбирает максимальное значение из группы значений, что позволяет выделить самые значимые признаки.

4. Слои полносвязной нейронной сети: После извлечения признаков из текста через сверточные слои, результаты передаются на полносвязные слои нейронной сети. Эти слои выполняют классификацию, регрессию или другие задачи в зависимости от поставленной задачи. Для анализа текста это может быть задачей классификации текстов на категории или определения тональности.

Пример кода для анализа текста с использованием сверточных слоев на 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 = ["Это лучший фильм, который я когда-либо видел!"]

Поделиться:
Популярные книги

Новый Рал

Северный Лис
1. Рал!
Фантастика:
фэнтези
попаданцы
5.70
рейтинг книги
Новый Рал

Адвокат Империи 2

Карелин Сергей Витальевич
2. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Адвокат Империи 2

Архонт

Прокофьев Роман Юрьевич
5. Стеллар
Фантастика:
боевая фантастика
рпг
7.80
рейтинг книги
Архонт

Чехов. Книга 3

Гоблин (MeXXanik)
3. Адвокат Чехов
Фантастика:
альтернативная история
5.00
рейтинг книги
Чехов. Книга 3

Сирота

Шмаков Алексей Семенович
1. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Сирота

Бомбардировщики. Полная трилогия

Максимушкин Андрей Владимирович
Фантастика:
альтернативная история
6.89
рейтинг книги
Бомбардировщики. Полная трилогия

Сделай это со мной снова

Рам Янка
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Сделай это со мной снова

Наследник

Кулаков Алексей Иванович
1. Рюрикова кровь
Фантастика:
научная фантастика
попаданцы
альтернативная история
8.69
рейтинг книги
Наследник

Эра Мангуста. Том 2

Третьяков Андрей
2. Рос: Мангуст
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эра Мангуста. Том 2

Выйду замуж за спасателя

Рам Янка
1. Спасатели
Любовные романы:
современные любовные романы
7.00
рейтинг книги
Выйду замуж за спасателя

Скандальный развод, или Хозяйка владений "Драконье сердце"

Милославская Анастасия
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
Скандальный развод, или Хозяйка владений Драконье сердце

Морана

Кулаков Алексей Иванович
Фантастика:
фэнтези
альтернативная история
5.00
рейтинг книги
Морана

Громовая поступь. Трилогия

Мазуров Дмитрий
Громовая поступь
Фантастика:
фэнтези
рпг
4.50
рейтинг книги
Громовая поступь. Трилогия

Наследник пепла. Книга II

Дубов Дмитрий
2. Пламя и месть
Фантастика:
фэнтези
5.00
рейтинг книги
Наследник пепла. Книга II