Странные строки при использовании tfidvectoriser могут быть вызваны заменой на ''? - PullRequest
0 голосов
/ 09 ноября 2019

Я вчера писал здесь о создании модели линейной регрессии текста для прогнозирования настроений, что мне интересно, после того, как нижний регистр текста, удаление любых стоп-слов / знаков препинания и цифр, у меня остались странные строки на некоторых из моего текстаособенности.

     ['_______',


'__________',
 '__________ pros',
 '____________',
 '____________ pros',
 '_____________',
 '_____________ pros',
 'aa',
 'aa waist',
 'ab',
 'abdomen',
 'ability',
 'able',
 'able button',
 'able buy',

Я думаю, что это возможно, потому что для знаков препинания и цифр я заменил их пробелом? я все еще не совсем уверен.

Другой вопрос: как мне правильно структурировать это для линейной регрессии? я должен представлять каждое предложение колонкой их особенностей и подавать это в сеть? но как бы я справился, если матрица разрежена?

Извините, что только узнал больше о предварительной обработке текста

вот мои шаги по очистке: давайте предположим, что это предложение «это платье из прекрасной платины»женственна и идеально сидит, удобна в носке и удобна! Настоятельно рекомендуем! '

  1. строчные буквы

    AllSentences [' Sentence '] = AllSentences [' Sentence ']. map (lambda x: x.lower ())

2. удалить стоп-слова

  stop = stopwords.words('english')
    AllSentences['Sentences_without_stopwords'] = AllSentences['Sentence'].apply(lambda x: ' '.join([word for word in x.split() if word not in (stop)]))

3. удалить цифры

AllSentences['Sentences_without_stopwords_punc'] = AllSentences['Sentences_without_stopwords'].apply(lambda x: re.sub(r'[^\w\s]', '',x))
AllSentences['Sentences_without_stopwords_punc'] = AllSentences['Sentences_without_stopwords_punc'].apply(lambda x: re.sub(r'\d+', '',x))

тест / разделение поезда, tfidvectorise

X_train, X_test, y_train, y_test = train_test_split(X, Y, 
 test_size=0.30, random_state=42)

   vect_word = TfidfVectorizer(max_features=20000, lowercase=True, 
   analyzer='word',stop_words= 'english',ngram_range=(1,3),dtype=np.float32)

tr_vect = vect_word.fit_transform(X_train)
ts_vect = vect_word.transform(X_test)

, который дал мне вышеуказанный вывод для имен объектов?

1 Ответ

0 голосов
/ 10 ноября 2019

Я думаю, что использование TfidfVectorizer - отличное место для начальной попытки анализа настроений. Чтобы избежать разреженности векторов объектов, вы можете начать с меньшего количества функций и продолжить работу в зависимости от того, как работают ваши модели. Вы можете сделать его гиперпараметром во время тренировки и использовать GridSearch и Pipeline, чтобы найти для него наилучшее значение. Смотрите пример этого здесь . В зависимости от того, как это происходит, более надежная реализация может использовать вложения слов . Однако это, скорее всего, усложнит вашу модель.

Странные строки в строке - это символы подчеркивания, которые должны быть в исходном тексте. Они не были очищены в процессе очистки, потому что вы использовали re.sub(r'[^\w\s]', '',x) для удаления несловесных символов и непробельных символов из вашей строки. Подчеркивания являются частью набора символов слова ('\w'), поэтому они не были очищены.

Я также должен отметить, что большая часть вашей пользовательской очистки не должна быть необходимой, так как TfidfVectorizer должен бытьв состоянии справиться с этим для вас. Например, вы удаляете стоп-слова, а затем TfidfVectorizer также пытается их удалить. Это также относится к удалению знаков препинания и цифр из строки. TfidfVectorizer принимает параметр token, и вы можете передать ему регулярное выражение, чтобы выбрать, какие символы вы хотите сохранить в токене. Если вы хотите, чтобы в вашей строке были только буквенные символы, этого регулярного выражения для аргумента токена должно хватить для очистки: '[a-zA-Z]'. Опять же, я не использую здесь набор символов '\w', поскольку он включает в себя символы подчеркивания (и цифры).

Поскольку вы уже использовали метод fit_transform для TfidfVectorizer в вашем наборе поездов и transform метод на вашем тестовом наборе, образцы в этих наборах должны быть готовы к обучению / тестированию. Они не нуждаются в дальнейшей обработке.

...