Как я могу применить полу-контролируемое обучение по классификации текста с помощью Keras? - PullRequest
1 голос
/ 05 мая 2020

Я решаю задачу классификации текста с помощью полууправляемого обучения. Мой общий набор данных содержит 1500 образцов, из которых я пометил 300 образцов, а остальные оставил для моей модели, чтобы пометить их. Я обучил свою модель на 300 аннотированных образцах, используя последовательную модель со слоем внедрения и двунаправленным слоем LSTM. Я не мог найти подход к обучению с полууправлением для решения этой проблемы, который бы пометил остальные мои немаркированные образцы. Упоминание кода, который я пробовал:

Ссылка на аннотированные данные

import tensorflow as tf
import numpy as np
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
import pandas as pd
import matplotlib.pyplot as plt
import re 

dataFrame= pd.read_csv("Annotated Data.csv")

dataFrame=dataFrame[['Body','Category']]

dataFrame['Body']=dataFrame['Body'].apply(lambda text: ' '.join(re.sub("[\.\,\<\>\?\\\/\{\}\[\]\+\=\- 
                                          \_\(\)\`\~\!\$\%\^\&\*\;\:\''\"\#]"," ",text).split()))


 # Removing word length greater than 15
 dataFrame['Body'] = dataFrame['Body'].apply(lambda x: ' '.join(w for w in x.split() if len(w) < 15))

 training_portion= 0.8
 train_size = int(len(dataFrame) * training_portion)

 train_articles = dataFrame['Body'][0: train_size]
 train_labels = dataFrame['Category'][0: train_size]

 validation_articles = dataFrame['Body'][train_size:]
 validation_labels = dataFrame['Category'][train_size:]

 # Hyperparameters
 vocab_size = 8000
 embedding_dim = 64
 max_length = 300
 trunc_type = 'post'
 padding_type = 'post'
 oov_tok = '<UNK>'


 # Tokenizing the data
 tokenizer = Tokenizer(num_words = vocab_size, oov_token=oov_tok)
 tokenizer.fit_on_texts(train_articles)
 word_index = tokenizer.word_index

 train_sequences = tokenizer.texts_to_sequences(train_articles)
 train_padded = pad_sequences(train_sequences, maxlen=max_length, padding=padding_type, 
                               truncating=trunc_type)


  validation_sequences = tokenizer.texts_to_sequences(validation_articles)
  validation_padded = pad_sequences(validation_sequences, maxlen=max_length, padding=padding_type, 
                                    truncating=trunc_type)

  label_tokenizer = Tokenizer()
  label_tokenizer.fit_on_texts(dataFrame['Category'])

  training_label_seq = np.array(label_tokenizer.texts_to_sequences(train_labels))
  validation_label_seq = np.array(label_tokenizer.texts_to_sequences(validation_labels))


  model = tf.keras.Sequential([

tf.keras.layers.Embedding(vocab_size, embedding_dim),

tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(embedding_dim)),

tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(32)),

tf.keras.layers.Dense(embedding_dim, activation='relu'),

tf.keras.layers.Dense(5, activation='softmax')])

model.summary()

model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
num_epochs = 15
history = model.fit(train_padded, training_label_seq, epochs=num_epochs, validation_data= 
(validation_padded, validation_label_seq), verbose=2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...