Я работаю над проблемой НЛП, и моя цель состоит в том, чтобы иметь возможность передавать мои данные в алгоритмы sklearn после использования Word2Vec через библиотеку Python Gensim.Основной проблемой, которую я пытаюсь решить, является бинарная классификация серии твитов.Для этого я изменяю код в этом git repo.
Вот часть кода, относящаяся к токенизации:
from nltk.tokenize import RegexpTokenizer
tokenizer = RegexpTokenizer(r'\w+')
input_file["tokens"] = input_file["text"].apply(tokenizer.tokenize)
all_words = [word for tokens in input_file["tokens"] for word in tokens]
sentence_lengths = [len(tokens) for tokens in input_file["tokens"]]
vocabulary = sorted(set(all_words))
Теперь вот часть, гдеЯ использую sklearn-api от Gensim, чтобы попытаться векторизовать мои твиты:
from sklearn.model_selection import train_test_split
from gensim.test.utils import common_texts
from gensim.sklearn_api import W2VTransformer
text = input_file["text"].tolist()
labels = input_file["label"].tolist()
X_train, X_test, y_train, y_test = train_test_split(text, labels, test_size=0.2,random_state=40)
model = W2VTransformer(size=10, min_count=1, seed=1)
X_train_w2v = model.fit(common_texts).transform(X_train)
Это приводит к следующей ошибке:
KeyError: "word 'Great seeing you again, don't be a stranger!' not in vocabulary"
Кажется, что отчасти проблема в том, что Gensim ожидаетполучать по одному слову за раз, и вместо этого он получает целые твиты.
X_train относится к списку типов, вот первые три элемента списка:
["Great seeing you again, don't be a stranger!",
"Beautiful day here in sunny Prague. Not a cloud in the sky",
" pfft! i wish I had a laptop like that"]
Обновление
Чтобы исправить это, я попробовал следующее:
X_train_list = []
for sentence in X_train:
word_list = sentence.split(' ')
while("" in word_list):
word_list.remove("")
X_train_list.append(word_list)
model = W2VTransformer(size=10, min_count=1, seed=1)
X_train_tfidf = model.fit(common_texts).transform(X_train_list)
Это приводит к следующей ошибке:
KeyError: "word 'here' not in vocabulary"
Если честно,это поражает меня!То, как обычное слово, подобное «здесь», отсутствует в словаре, мне не под силу.Также интересно, если твиты с блуждающими буквами будут вызывать ошибки, я думаю, что странные путаницы букв, которые часто встречаются за словами, вызовут подобные проблемы.