Классификация текста с использованием CNN, RNN и HAN

NLP

? Как следует из названия, в этой статье будут представлены три модели:

  • Convolutional Neural Network (CNN)
  • Recurrent Neural Network (RNN)
  • Hierarchical Attention Network (HAN)

вводить

Классификация текста — очень популярная подзадача в области обработки естественного языка и обучения с учителем, и многие новички начинают обучение с классификации текста. Так что же такое классификация текстов? ?

Как и при определении того, является ли новость спамом, для этого типа данных обычно требуются только два поля, например:review,labelЖдать. Все, что нам нужно сделать, это обучить дискриминатор на основе размеченных текстовых данных, чтобы идентифицировать положительный и отрицательный его тип. Общие задачи классификации текста:

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

Конечно, области применения определенно больше, чем это.Классификация относится к очень простой и важной функции.Нелегко научиться хорошо, и трудно научиться.


Код классификации волнового текста Amway:


инструкция

Задача классификации звукового текста требует подготовки следующих материалов:

  • учебный корпус: Нет, это все *лайт

  • WordEmbedding: вы можете использовать предварительно обученные векторы слов или обучить свои собственные векторы слов.

    Предварительно обученные векторы слов:

  • Этикетка: Обычно это составляется вместе с учебным корпусом. Количество типов меток можно использовать для классификации текста как двухклассовой и многоклассовой задачи.

  • Модель: используется для обучения корпуса для создания окончательного дискриминатора

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

CNN

Прежде всего, я предполагаю, что все знают основные принципы CNN, так как же применить CNN к тексту? здесь я прохожуTextCNNпояснить, для справки What Does a TextCNN Learn? Бумага здесь, чтобы объяснить вам, я надеюсь, что вы можете усвоить и переварить 20%, это уже очень хорошо.

Во-первых, давайте взглянем на его общую архитектурную схему:

левыйсостоит из двухstatic vectorsиnon-static vectorsкомпозиция, разница между ними заключается в том, может ли вектор словаучиться(тонкая настройка). Эта функция позволяет сети иметь определенную основуБуквальные отношенияизобъем памятииучитьсяспособность.

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

Кроме того, если вы узнаете о векторах слов, вы можете увидетьЭто эссеилиэтот блог

Середина является результатом обучения ядра свертки, а затем выполнитеmax poolingоперация, выберите одинchannelНаконец, самые большие значения объединяются вместе. Затем выполните полное подключение. Простой код выглядит так:

sequence_input = Input(shape=(MAX_SEQUENCE_LENGTH,), dtype='int32')
embedded_sequences = embedding_layer(sequence_input)
l_cov1= Conv1D(128, 5, activation='relu')(embedded_sequences)
l_pool1 = MaxPooling1D(5)(l_cov1)
l_cov2 = Conv1D(128, 5, activation='relu')(l_pool1)
l_pool2 = MaxPooling1D(5)(l_cov2)
l_cov3 = Conv1D(128, 5, activation='relu')(l_pool2)
l_pool3 = MaxPooling1D(35)(l_cov3)  # global max pooling
l_flat = Flatten()(l_pool3)
l_dense = Dense(128, activation='relu')(l_flat)
preds = Dense(len(macronum), activation='softmax')(l_dense)

Диаграмма архитектуры окончательной сгенерированной модели показана ниже:

Почему CNN может изучать функции последовательности в текстовых последовательностях? Позже я опубликую соответствующий пост в блоге.

RNN

Использование RNN и его расширенных моделей для обработки моделей текстовых последовательностей — это то, что все считают обычной операцией, и было доказано, что это лучший способ справиться с ней. Я не буду здесь рассказывать об основных понятиях RNN, вы также можете ознакомиться с ним, если не знакомы с ним.Блог Колы, а для детей, не знакомых с LSTM, можете взглянуть на мойэтот пост в блоге, в котором подробно объясняются концепции.

Способность RNN обрабатывать данные о последовательности используется, потому что для последовательностей создана его собственная архитектура. Поле данных последовательности включает в себя: текст, временные ряды, видео, данные ДНК и т. д.

Следующая архитектура моей модели выглядит следующим образом:

  • Embedding

    Вы можете использовать предварительно обученную модель напрямую, типы указаны выше

  • LSTM Encoder

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

  • Full Connected Network

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

Это очень стандартныйSequence to SequenceМодель можно разделить на следующие понимания:

  • Encoder

    После того, как последовательность векторов слов подается в LSTM, генерируется вектор скрытого слоя, который является выходом Encoder/LSTM. Вышеупомянутый кодировщик содержит только относительно простой уровень LSTM, но также можно добавить немного более сложный уровень.Attentionмеханизм, также можно добавитьИерархическая Sequence2Sequence на основе вниманияСтруктура, структура может быть очень сложной, и с ней обычно хорошо обращаются. Но мы должны идти шаг за шагом.

    Выход кодировщика называетсяContext Vector, это то, что Encoder использует для входного предложения理解, а затем декодер переводит и декодирует это предложение.

  • Decoder

    Общая структура согласуется с Encoder, и даже если есть разница, то не сильно.

    Как вы кодируете, я расшифрую, иначе обасхема мозгаЕсли оно другое, то и результат понимания будет другим.

  • полносвязный слой

    Это необходимо для выполнения декодирования декодированных информационных точек.Взвешенная обработкаи, наконец, получить результат классификации.

Код Keras выглядит так:

sequence_input = Input(shape=(MAX_SEQUENCE_LENGTH,), dtype='int32')
embedded_sequences = embedding_layer(sequence_input)
l_lstm = Bidirectional(LSTM(100))(embedded_sequences)
preds = Dense(len(macronum), activation='softmax')(l_lstm)
model = Model(sequence_input, preds)
model.compile(loss='categorical_crossentropy',optimizer='rmsprop',  metrics=['acc'])

Окончательная схема архитектуры выглядит так:

HAN

Полное название: Hierarchical Attention Network, подробности см. здесь.бумага.

В этом разделе я познакомлю вас层级LSTMИнтернет. Структура модели следующая:

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

Псевдокод keras выглядит так:

embedding_layer=Embedding(len(word_index)+1,EMBEDDING_DIM,weights=[embedding_matrix],
input_length=MAX_SENT_LENGTH,trainable=True)
sentence_input = Input(shape=(MAX_SENT_LENGTH,), dtype='int32')
embedded_sequences = embedding_layer(sentence_input)
l_lstm = Bidirectional(LSTM(100))(embedded_sequences)
sentEncoder = Model(sentence_input, l_lstm)

review_input = Input(shape=(MAX_SENTS,MAX_SENT_LENGTH), dtype='int32')
review_encoder = TimeDistributed(sentEncoder)(review_input)
l_lstm_sent = Bidirectional(LSTM(100))(review_encoder)
preds = Dense(len(macronum), activation='softmax')(l_lstm_sent)
model = Model(review_input, preds)

Структура приведенной выше модели кода выглядит следующим образом:

Справочные статьи и документы:

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