Предварительная обработка текста не влияет на показатель точности SGDClassifier - PullRequest
0 голосов
/ 03 июля 2019

Мне было интересно, если TfidfVectorizer () из scikit-learn и его методы fit_transform / transform уже выполняют предварительную обработку языка, например строчную / лемматизацию / удаление пунктуации. Я использую дамп обзора Imdbs, чтобы предсказать, является ли обзор положительным или отрицательным, и я изначально не занимался предварительной обработкой, но недавно начал добавлять его. Мой показатель точности составляет 84% с использованием SGDClassifier, но независимо от того, предварительно обработал ли я набор данных обучения / тестирования или нет Вроде бы тоже самое?

def get_wordnet_pos(word):
    """Map POS tag to first character lemmatize() accepts"""
    tag = nltk.pos_tag([word])[0][1][0].upper()
    tag_dict = {"J": wordnet.ADJ,
                "N": wordnet.NOUN,
                "V": wordnet.VERB,
                "R": wordnet.ADV}

    return tag_dict.get(tag, wordnet.NOUN)

lemmatizer = WordNetLemmatizer()

def prepText(reviewText):
    soup = BeautifulSoup(reviewText)
    reviewText = soup.get_text()
    words = [lemmatizer.lemmatize(w, get_wordnet_pos(w)) for w in nltk.word_tokenize(reviewText)]
    reviewText = ' '.join([lemmatizer.lemmatize(w) for w in words])
    reviewText = reviewText.lower()
    reviewText = reviewText.translate(str.maketrans('', '', string.punctuation))
    return reviewText

if __name__ == '__main__':
    with Pool(12) as p:
        X_train = p.map(prepText, X_train)
    with Pool(12) as p:
        X_test = p.map(prepText, X_test)
    print(X_train[10:])

    print("Vectorizing")

    vectorizer = TfidfVectorizer()
    train_vectors = vectorizer.fit_transform(X_train)
    test_vectors = vectorizer.transform(X_test)
    print(train_vectors.shape, test_vectors.shape)

    clf = SGDClassifier(loss='hinge', penalty='l2', alpha=1e-3, random_state=42, max_iter=200, tol=None).fit(train_vectors, y_train)

    predicted = clf.predict(test_vectors)
    #print(accuracy_score(y_test,predicted))
    print(metrics.classification_report(y_test, predicted))
...