0% нашли этот документ полезным (0 голосов)
21 просмотров17 страниц

CNN Text Data 2025

Документ представляет собой введение в сверточные нейронные сети (CNN) и их применение для анализа текста. Описываются основные характеристики CNN, такие как сверточные слои, локальная рецептивная область и методы подвыборки, а также приводятся примеры использования CNN в Keras и PyTorch. В заключение рассматриваются параметры слоев и их влияние на обработку данных.

Загружено:

g2qxgpyw67
Авторское право
© © All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd
0% нашли этот документ полезным (0 голосов)
21 просмотров17 страниц

CNN Text Data 2025

Документ представляет собой введение в сверточные нейронные сети (CNN) и их применение для анализа текста. Описываются основные характеристики CNN, такие как сверточные слои, локальная рецептивная область и методы подвыборки, а также приводятся примеры использования CNN в Keras и PyTorch. В заключение рассматриваются параметры слоев и их влияние на обработку данных.

Загружено:

g2qxgpyw67
Авторское право
© © All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd
Вы находитесь на странице: 1/ 17

Laboratory for Social and Cognitive

Informatics,
St. Petersburg School of Physics,
Mathematics, and Computer
Science, Department of Informatics

СВЕРТОЧНЫЕ НЕЙРОННЫЕ
СЕТИ (CNN) ДЛЯ АНАЛИЗА
ТЕКСТА

Koltcov S.

Saint Petersburg, 2025


Laboratory for Social and Cognitive Informatics,
Department of Informatics

Сверточные Нейронные Сети (CNN) - введение


Сверточные нейронные сети (CNN, Convolutional Neural Networks) — это
специализированный класс нейронных сетей, часто используемых в области
компьютерного зрения. Основная особенность CNN заключается в использовании
сверточных слоев, которые позволяют эффективно выделять и распознавать важные
признаки в данных. Обычно такой тип сети используются для анализа изображений и видео
потока, но CNN также можно использовать для классификации текстовых данных.
Laboratory for Social and Cognitive Informatics,
Department of Informatics

Особенности сверточных нейронных сетей (CNN)


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

Локальная рецептивная область: Области входа, с которыми взаимодействует каждый


нейрон, являются намного меньше в сравнении с полностью связанными сетями, что делает
CNN эффективнее при обработке изображений.

Слой подвыборки (Pooling): Уменьшает размерность признаков, сохраняя важную


информацию и снижая вычислительную сложность.
Max Pooling: Выбирает максимальное значение из области фильтра.
Average Pooling: Вычисляет среднее значение из области фильтра.
Пулинг это просто выбор максимального значения из окна, таким образом, большая матрица
как бы сворачивается в маленькую.

Преимущество пространственной инвариантности:


Сверточные слои помогают нейронной сети быть устойчивой к изменениями положения,
масштаба и вращения объектов на изображении.
Автоматическое выделение признаков:
Традиционные алгоритмы требовали вручную определять признаки для выявления объектов.
В CNN это осуществляется автоматически через обучение.
Laboratory for Social and Cognitive Informatics,
Department of Informatics

Сверточные Нейронные Сети (CNN) – работа фильтра


Берем матрицу (которая получена с помощью эмбединга), на нее накладываем окно.
Окошко, которое ходит по большой матрице называется фильтром (в англоязычном
варианте kernel, filter или feature detector. Фильтр накладывается на участок большой
матрицы и каждое значение перемножается с соответствующим ему значением фильтра.
Окно ходит по большой матрице с каким-то шагом, который по-английски называется
stride. Этот шаг бывает горизонтальный и вертикальный (хотя последний нам не
пригодится, так как работаем с эмбедингами). Cвертка у нас может ходить только по
одной оси — по ширине (по документу). Поэтому для того, чтобы отличить от
стандартной свертки, ее называют одномерной (1D convolution).
Laboratory for Social and Cognitive Informatics,
Department of Informatics

Сверточные Нейронные Сети (CNN)


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

Размер рецептивной области задается размером фильтра или ядра свертки. Например, если
используется ядро 3x3, то рецептивная область охватывает 3x3 пикселя входного
изображения. Перекрытие областей При свертке ядро перемещается по изображению с
шагом (stride). Если шаг равен 1, то рецептивные области смежных нейронов будут
перекрываться, что помогает лучше захватывать и учитывать локальные детали данных.
Для цветных изображений в рецептивную область включается и третье измерение,
соответствующее цветовым каналам (например, красный, зелёный, синий, или RGB). То
есть, для цветных изображений рецептивная область для ядра с фильтром 3x3 будет иметь
размер 3x3x3 (ширина x высота x число каналов).
Laboratory for Social and Cognitive Informatics,
Department of Informatics

Сверточные Нейронные Сети (CNN)

Пулинг это просто выбор определенного значения из окна, таким образом, большая
матрица как бы сворачивается в маленькую.
Laboratory for Social and Cognitive Informatics,
Department of Informatics

Слой - Conv1D - Keras


Слой `Conv1D` в TensorFlow используется для построения сверточных нейронных сетей,
которые работают с одномерными данными. Это может быть полезно в задачах
обработки временных рядов, текстов, сигналов

Основные параметры слоя Conv1D`


filters: Количество выходных фильтров (или каналов), с которыми результат свертки
будет передан в следующий слой.
kernel_size: Длина (или размер) фильтра.
strides: Шаг применения фильтра. Значение по умолчанию 1.
padding: Может принимать значения `'valid'` (то есть без паддинга) или `'same'` (паддинг,
чтобы выходные данные имели ту же длину, что и входные).
activation: Функция активации (например, `relu`).
use_bias: Логическое значение, указывающее, следует ли использовать смещение в
свертке.
kernel_initializer: Инициализатор для фильтра.
bias_initializer: Инициализатор для смещения.
kernel_regularizer: Регуляризатор, применяемый к фильтру.
bias_regularizer: Регуляризатор, применяемый к смещению.
Laboratory for Social and Cognitive Informatics,
Department of Informatics

Сверточные Нейронные Сети (CNN) - Пример - Keras


import tensorflow as tf from tensorflow.keras.models
import Sequential from tensorflow.keras.layers import Conv1D, MaxPooling1D, Flatten, Dense

# Создаем последовательную модель


model = Sequential()

# Добавляем слой Conv1D


model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(100, 1)))

# Добавляем слой MaxPooling для уменьшения размерности


model.add(MaxPooling1D(pool_size=2))

# Добавляем слой Flatten для преобразования многомерных данных в одномерный вектор


model.add(Flatten())

# Добавляем полносвязный слой


model.add(Dense(50, activation='relu'))

# Добавляем выходной слой


model.add(Dense(1))
Laboratory for Social and Cognitive Informatics,
Department of Informatics

Сверточные Нейронные Сети (CNN)


Параметр `padding` в слое `Conv1D` отвечает за способ обработки краевых значений
входных данных при выполнении свертки. Он определяет, как необходимо дополнять (или
не дополнять) входные данные, чтобы вычислить значения на краях.

Варианты значений параметра `padding`

1. 'valid'`:
- Свертка выполняется только в пределах границ входных данных.
- В результате выходной массив будет меньше по размеру, чем входной.
- Без добавления дополнений (паддинга) к входным данным.

2. `'same'`:
- Добавляются дополнительные значения (обычно нули) по краям входных данных так,
чтобы размер выходного массива был таким же, как и у входного массива.
- Это чаще всего делается для сохранения одинаковых размеров входного и выходного
массива при заданном шаге.
Laboratory for Social and Cognitive Informatics,
Department of Informatics

Слой - Global Max Pooling - Keras


`GlobalMaxPool1D` — это вариант max-pooling, где выбирается максимальное
значение для каждого полученного канала по всей длине входного одномерного
массива. Например, если у вас есть входной тензор размерностью (batch_size,
sequence_length, channels), слой `GlobalMaxPool1D` вернет тензор размерностью
(batch_size, channels), выделив максимальное значение вдоль оси sequence_length.

# Создаем последовательную модель


model = Sequential()

# Добавляем слой Conv1D


model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(100, 1)))

# Добавляем слой GlobalMaxPooling1D


model.add(GlobalMaxPooling1D()) Слой GlobalMaxPooling1D:Добавляем слой
`GlobalMaxPooling1D`, который
# Добавляем полносвязный слой преобразует тензор размерности
(batch_size, sequence_length, channels) в
model.add(Dense(50, activation='relu')) тензор (batch_size, channels), выбирая
максимальное значение вдоль оси
# Добавляем выходной слой sequence_length для каждого канала.
model.add(Dense(1))
Laboratory for Social and Cognitive Informatics,
Department of Informatics

Слой AveragePooling - Keras


Слой `AveragePooling` (среднее пуллинг) используется в архитектуре нейронной сети для
уменьшения размерности входных данных, применяя операцию среднего пуллинга.
Основные аргументы:
‘pool_size’: Размер окна, по которому будет совершаться операция пуллинга. Например, `(2,
2)` означает, что пуллинг будет выполнен по окну размером 2x2.
‘strides’: Шаги, с которыми окно будет перемещаться по входным данным. Например, `(2, 2)`
означает, что окно будет перемещаться с шагом 2. Если не указано, шаг равен размеру окна.
‘padding’: Может быть либо `"valid"`, либо `"same"`. - `"valid"`: окна выходят за границы
входов исключаются паддинг, поэтому результат будет меньше исходных размеров.
"same": на границы входов добавляются нули, чтобы сохранить размерность входных
данных. - `data_format`: Формат данных - `'channels_last'` (по умолчанию) или
`'channels_first'`. - `'channels_last'` соответствует тензорам, имеющим форму `(batch, height,
width, channels)`. - `'channels_first'` соответствует тензорам с форматом `(batch, channels,
height, width)`.

tf.keras.layers.AveragePooling2D(pool_size=(2, 2), strides=(2, 2), padding='valid')

tf.keras.layers.AveragePooling1D(pool_size=2, strides=2, padding='valid') ])


Laboratory for Social and Cognitive Informatics,
Department of Informatics

Сверточные Нейронные Сети (CNN) - Пример - Keras


Laboratory for Social and Cognitive Informatics,
Department of Informatics

Сверточные Нейронные Сети (CNN) - Keras


# Загрузка данных IMDB и разделение на обучающую и тестовую выборки
max_features = 10000 # Количество уникальных слов (викинг)
max_len = 500 # Максимальная длина последовательностей (padding)

(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)

# Паддинг последовательностей до максимальной длины


x_train = pad_sequences(x_train, maxlen=max_len)
x_test = pad_sequences(x_test, maxlen=max_len)

# Создание модели
model = Sequential([
Embedding(input_dim=max_features, output_dim=128, input_length=max_len),
Conv1D(filters=128, kernel_size=5, activation='relu'),
GlobalMaxPooling1D(),
Dense(units=128, activation='relu'),
Dense(units=1, activation='sigmoid') # Выходной слой для двух классов
])
Laboratory for Social and Cognitive Informatics,
Department of Informatics

Сверточные Нейронные Сети (CNN) - Keras


# Загрузка данных IMDB и разделение на обучающую и тестовую выборки
max_features = 10000 # Количество уникальных слов (викинг)
max_len = 500 # Максимальная длина последовательностей (padding)

(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)

# Паддинг последовательностей до максимальной длины


x_train = pad_sequences(x_train, maxlen=max_len)
x_test = pad_sequences(x_test, maxlen=max_len)

# Создание модели
model = Sequential([
Embedding(input_dim=max_features, output_dim=128, input_length=max_len),
Conv1D(filters=128, kernel_size=5, activation='relu'),
GlobalMaxPooling1D(),
Dense(units=128, activation='relu'),
Dense(units=1, activation='sigmoid') # Выходной слой для двух классов
])
Laboratory for Social and Cognitive Informatics,
Department of Informatics

Сверточные Нейронные Сети (CNN) - pytorch


nn.Conv1d(in_channels=embed_dim, out_channels=64, kernel_size=3)

in_channels = embed_dim: количество входных каналов. Обычно это размерность


векторных представлений (эмбеддингов), которые подаются на вход слою.

out_channels=64: количество выходных каналов. Этот параметр определяет


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

kernel_size=3: размер ядра свертки (фильтра). Это определяет, насколько


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

Таким образом, nn.Conv1d создаёт сверточный слой, который будет превращать


входные данные с embed_dim каналами в выходные данные с 64 каналами,
используя фильтры с размером 3.
Laboratory for Social and Cognitive Informatics,
Department of Informatics

Сверточные Нейронные Сети (CNN) - pytorch


self.global_max_pooling = nn.AdaptiveMaxPool1d(1)

Этот слой уменьшает размерность выходных данных от conv1d до фиксированной


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

Пример последовательности слоев

def __init__(self, vocab_size, embed_dim, num_classes):


super(CNNModel, self).__init__()
self.embedding = nn.Embedding(vocab_size, embed_dim, padding_idx=0)
self.conv1d = nn.Conv1d(in_channels=embed_dim, out_channels=64, kernel_size=3)
self.global_max_pooling = nn.AdaptiveMaxPool1d(1)
self.fc = nn.Linear(64, num_classes)
https://linis.hse.ru/ Phone: +7 (911) 981 9165 Email: [email protected]

Вам также может понравиться