Классификация текста (часть 2) — применение сверточной нейронной сети (CNN) в классификации текста

машинное обучение искусственный интеллект регулярное выражение Нейронные сети

1. Введение

Первоначально я написал две статьи, которые соответственно представили применение традиционных методов машинного обучения в классификации текстов и принцип CNN, Затем эта статья объединяется с двумя статьями, в основном описывающими применение CNN в классификации текстов. Первые две части в основном представляют собой статьи двух блоггеров (исходная ссылка дана в статье), которые представляют собой интерпретацию и резюме двух статей, в основном объясняющие модель классификации текста CNN; во второй половине рассказывается о примере и проекте настоящий бой

2 Бумага 1 дюймConvolutional Neural Networks for Sentence Classification

模型结构

В задаче анализа короткого текста из-за ограниченной длины предложения, компактной структуры и способности выражать смысл самостоятельно CNN может справиться с этим типом проблемы.Основная идея состоит в том, чтобы объединить модель ngram с операцией свертки.

2.1 Входной слой

Как показано на рисунке, входной слой представляет собой матрицу, в которой векторы слов, соответствующие словам в предложении, расположены по порядку (сверху вниз).Предполагая, что в предложении n слов, а размерность вектора равна k, то эта матрица равна n × k (в CNN ее можно рассматривать как изображение высоты n и ширины k).

Тип этой матрицы может быть статическим (статическим) или динамическим (нестатическим). Статический означает, что вектор слов фиксирован, а динамический означает, что в процессе обучения модели вектор слов также рассматривается как оптимизируемый параметр.Обычно процесс обратного распространения ошибки, вызывающий изменение значения вектора слов, называется Fine .настроить. (Если здесь случайным образом инициализируется вектор слов, то обучается не только классификационная модель CNN, но и получается побочный продукт word2vec. Если уже есть обученный вектор слов, это фактически процесс трансферного обучения)

Для вектора незарегистрированных слов он может быть заполнен 0 или случайным небольшим положительным числом.

2.2 Первый сверточный слой:

Входной слой получает несколько Карт объектов посредством операции свертки, а размер окна свертки равен h × k, где h представляет количество вертикальных слов, а k представляет размерность вектора слов. Через такое большое окно свертки будет получено несколько Карт характеристик с номером столбца 1. (Читатели, знакомые с моделью N-GRAM в НЛП, должны это понять).

2.3 Слой пула:

Следующий уровень пула использует метод, называемый пулом Max-over-time. Этот метод просто предлагает наибольшее значение из предыдущей одномерной карты признаков, а в тексте объясняется, что наибольшее значение представляет наиболее важный сигнал. Видно, что этот метод объединения может решить проблему ввода предложения переменной длины (поскольку независимо от того, сколько значений в карте признаков, необходимо извлечь только максимальное значение). Результатом последнего объединяющего слоя является максимальное значение каждой карты объектов, то есть одномерный вектор.

2.4 Полное соединение + слой softmax:

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

2.5 Программа обучения

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

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

Код проекта:CNN_sentenceЧасть вышеуказанного контента взята с: https://www.cnblogs.com/cl1024cl/p/6205012.html.

3 Бумага 2"A Sensitivity Analysis of (and Practitioners' Guide to) Convolutional Neural Networks for Sentence Classification

Основная работа этой статьи состоит в том, чтобы провести различные сравнительные эксперименты на модели статьи «Сверточные нейронные сети для классификации предложений» и дать предложения по настройке параметров, а затем получить некоторый опыт настройки гиперпараметров.

3.1 Заключение эксперимента по настройке параметров:

  • Из-за случайных факторов в процессе обучения модели, таких как случайно инициализированные весовые параметры, мини-пакет, алгоритм оптимизации стохастического градиентного спуска и т. д., результаты модели на наборе данных имеют определенные колебания, такие как показатель точности (точность ) может достигать 1,5 % float, а AUC — 3,4 % float;
  • Использование вектора слов word2vec или GloVe оказывает определенное влияние на результаты эксперимента, и какой из них лучше, зависит от самой задачи;
  • Размер фильтра больше влияет на производительность модели, и параметры фильтра должны быть обновляемыми;
  • Количество карт признаков также оказывает определенное влияние, но необходимо учитывать эффективность обучения модели;
  • Метод пулинга 1-макс достаточно хорош по сравнению с другими методами пулинга;
  • Регуляризация мало на что влияет.

3.2 Рекомендации:

  • Использование нестатической версии word2vec или GloVe дает гораздо лучшие результаты, чем чистое однократное представление;
  • Для нахождения оптимального размера фильтра можно использовать метод линейного поиска. Обычно размер фильтра составляет от 1 до 10, конечно, для длинных предложений необходимо использовать фильтр большего размера;
  • Количество карт характеристик составляет от 100 до 600;
  • Вы можете попробовать как можно больше функций активации, и эксперименты показали, что ReLU и tanh работают лучше;
  • Достаточно использовать простой пуллинг 1-max, не нужно задавать слишком сложные методы пулинга;
  • Когда обнаруживается, что увеличение количества карт признаков снижает производительность модели, вы можете рассмотреть вопрос об увеличении силы регуляризации, например, об увеличении вероятности отсева;
  • Чтобы проверить уровень производительности модели, необходимо несколько итераций перекрестной проверки, чтобы гарантировать, что высокая производительность модели не является случайной.

4 Простой пример CNN для классификации текста

I like this movie very much!
Давайте возьмем приведенную выше картинку в качестве примера. На картинке есть 5 частей, отмеченных красными метками. В сочетании с этими 5 метками мы подробно объясним работу всего процесса, чтобы увидеть, как CNN решает проблему классификации текста.

4.1 #sentence

Предложение на картинке выше "[Мне очень нравится этот фильм!", содержит два слова и восклицательный знак. Разные ученые используют разные операции над этим знаком препинания, например удаление знаков препинания. Здесь мы не удаляем его сначала, тогда все предложение состоит из 7 слов, размерность вектора слова равна 5, тогда размер матрицы всего предложения составляет 7x5

4.2 #filters

Размер области фильтров может быть разным, здесь мы берем (2, 3, 4) 3 размера.Каждый размер фильтра имеет два фильтра с разными значениями, всего 6 фильтров.

4.3 #featuremaps

Мы заполняем некоторые значения в матрице предложений и матрице фильтров, тогда мы можем лучше понять процесс вычисления свертки, который аналогичен статье о принципе CNN,

Например, мы берем фильтр размером 2 и сначала добавляем произведение к первым двум строкам матрицы предложения, чтобы получить0.6 x 0.2 + 0.5 x 0.1 + … + 0.1 x 0.1 = 0.51, а затем переместите фильтр на 1 позицию вниз, чтобы получить 0,53. Окончательный размер сгенерированной карты объектов равен (7-2+1x1)=6. Чтобы получить карту признаков, мы добавляем смещение и функцию активации, например Relu.

4.4 #1max

Поскольку размер карты объектов, полученной фильтрами разных размеров, отличается, для решения этой проблемы добавьте слой максимального объединения, выберите максимальное значение и объедините одинаковый размер вместе. ###4.5 #concat1max После операции максимального пула мы передаем вектор фиксированной длины софамаксу, чтобы предсказать категорию текста.

5 Классификация текстов на практике

Ниже приведена часть кода классификации текста CNN, реализованного Keras:

# 创建tensor
print("正在创建模型...")
inputs=Input(shape=(sequence_length,),dtype='int32')
embedding=Embedding(input_dim=vocabulary_size,output_dim=embedding_dim,input_length=sequence_length)(inputs)
reshape=Reshape((sequence_length,embedding_dim,1))(embedding)

# cnn
conv_0=Conv2D(num_filters,kernel_size=(filter_sizes[0],embedding_dim),padding='valid',kernel_initializer='normal',activation='relu')(reshape)
conv_1=Conv2D(num_filters,kernel_size=(filter_sizes[1],embedding_dim),padding='valid',kernel_initializer='normal',activation='relu')(reshape)
conv_2=Conv2D(num_filters,kernel_size=(filter_sizes[2],embedding_dim),padding='valid',kernel_initializer='normal',activation='relu')(reshape)

maxpool_0=MaxPool2D(pool_size=(sequence_length-filter_sizes[0]+1,1),strides=(1,1),padding='valid')(conv_0)
maxpool_1=MaxPool2D(pool_size=(sequence_length-filter_sizes[1]+1,1),strides=(1,1),padding='valid')(conv_1)
maxpool_2=MaxPool2D(pool_size=(sequence_length-filter_sizes[2]+1,1),strides=(1,1),padding='valid')(conv_2)


concatenated_tensor = Concatenate(axis=1)([maxpool_0, maxpool_1, maxpool_2])
flatten = Flatten()(concatenated_tensor)
dropout = Dropout(drop)(flatten)
output = Dense(units=2, activation='softmax')(dropout)
model=Model(inputs=inputs,outputs=output)

результат операции

Английский:

Результаты квазиобучения: около 76% проверочного набора

Китайский язык:

Результаты квазиобучения: около 91% проверочного набора Адрес проекта: https://github.com/yanqiangmiffy/Text-Classification-Application

6 Сопутствующая информация