Я решаю задачу классификации текста с помощью полууправляемого обучения. Мой общий набор данных содержит 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)