Я работал над некоторыми упражнениями в стиле kaggle и добился определенного прогресса в двух отдельных модулях. Первый - это упражнение по НЛП в классификации спам-писем, а второй - по кодированию категориальных переменных. Мне было интересно, есть ли способ включить другую функцию в оригинальное упражнение НЛП. Прямо сейчас моя модель учитывает только текст электронной почты, а учебный набор будет содержать метку «Спам» или «Хэм», что я и в конечном итоге прогнозирую. Если бы у меня была еще одна колонка, в которой классифицировалось содержимое каждого письма (скажем: финансы, фитнес, новости, политика, спорт, любовь и т. Д. c). Я хотел бы иметь возможность внести это в мою модель. Исходя из того, что я узнал в Kaggle, я полагаю, что мне следует использовать кодирование в одно касание, поскольку у категорий электронной почты нет порядка между ними. Меня беспокоит только то, что у меня будет большое количество категорий. Мой код выглядит следующим образом. Может ли кто-нибудь указать мне правильное направление работы с категориальной переменной в моей модели? Я пробовал все виды вещей, чтобы включить один горячий кодер в мою трубу, но я не могу заставить это работать. Большое спасибо!
import pandas as pd
import spacy
from spacy.util import minibatch
comments = pd.read_csv(r'C:\Users\peter\OneDrive\Documents\email.csv')
nlp = spacy.blank('en')
textcat = nlp.create_pipe(
'textcat',
config = {
'exclusive_classes': True,
'architecture': 'bow'})
nlp.add_pipe(textcat)
textcat.add_label('Ham')
textcat.add_label('Spam')
train_texts = comments['text'].values
train_labels = [{'cats': {'Ham': label == 'Ham',
'Spam': label == 'Spam'}}
for label in comments['label']]
train_data = list(zip(train_texts, train_labels))
random.seed(1)
spacy.util.fix_random_seed(1)
optimizer = nlp.begin_training()
losses = {}
for epoch in range(10):
random.shuffle(train_data)
batches = minibatch(train_data, size = 8)
for batch in batches:
texts, labels = zip(*batch)
nlp.update(texts, labels, sgd = optimizer, losses = losses)
print(losses)
my_comments = pd.read_csv(r'C:\Users\peter\OneDrive\Documents\EmailValidate.csv')
my_comments = my_comments['text']
docs = [nlp.tokenizer(text) for text in my_comments]
textcat = nlp.get_pipe('textcat')
scores, _ = textcat.predict(docs)
predicted_labels = scores.argmax(axis = 1)
print([textcat.labels[label] for label in predicted_labels])