? Как следует из названия, в этой статье будут представлены три модели:
- Convolutional Neural Network (CNN)
- Recurrent Neural Network (RNN)
- Hierarchical Attention Network (HAN)
вводить
Классификация текста — очень популярная подзадача в области обработки естественного языка и обучения с учителем, и многие новички начинают обучение с классификации текста. Так что же такое классификация текстов? ?
Как и при определении того, является ли новость спамом, для этого типа данных обычно требуются только два поля, например:review
,label
Ждать. Все, что нам нужно сделать, это обучить дискриминатор на основе размеченных текстовых данных, чтобы идентифицировать положительный и отрицательный его тип. Общие задачи классификации текста:
- Классификация настроения текста (настроение, грусть)
- Обнаружение спама
- Тег дискурса пользователя (в определенном аудиометре: воспроизвести песню, заткнуться, выключить свет и т. д.)
- Классификация категорий новостей (история, развлечения, политика и т. д.)
Конечно, области применения определенно больше, чем это.Классификация относится к очень простой и важной функции.Нелегко научиться хорошо, и трудно научиться.
Код классификации волнового текста Amway:
- Text-Classification
- brightmart-text-classification
- cnn-text-classification-tf
- ...... (?? Найдите сами на гейхабе)
инструкция
Задача классификации звукового текста требует подготовки следующих материалов:
-
учебный корпус: Нет, это все *лайт
-
WordEmbedding: вы можете использовать предварительно обученные векторы слов или обучить свои собственные векторы слов.
Предварительно обученные векторы слов:
- Китайский язык:GitHub.com/embedding/C…
- Английский:
-
Этикетка: Обычно это составляется вместе с учебным корпусом. Количество типов меток можно использовать для классификации текста как двухклассовой и многоклассовой задачи.
-
Модель: используется для обучения корпуса для создания окончательного дискриминатора
Ну вот и закончилась чушь с введением, а дальше начинаем знакомить многие из этих моделей. Студенты с исследовательским опытом,должен прочитать газету,должен прочитать газету,должен прочитать газету, адрес находится внизу, и большинство изображений в этой статье взяты из оригинальной статьи.
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)
Структура приведенной выше модели кода выглядит следующим образом:
Справочные статьи и документы:
Большинство адресов этих газет включены в статью, поэтому я не буду их здесь повторять.