как я могу использовать SVM для классификации текста без использования Tf-idf

Я хочу классифицировать каждое входное сообщение. Я работаю с персидскими текстами. Я уже реализовал классификатор текста с помощью Naive Bayes. я не использовал Tf-idf, потому что для меня важна каждая функция. Но я сделал несколько трюков, чтобы удалить stop-words и pouncs, чтобы повысить точность.

Я хочу реализовать классификатор текста с помощью SVM, но я много искал. все, что я нашел, связано с использованием функции конвейера с использованием Tf-idf. как показано ниже:

model = Pipeline([(‘vectorizer’, CountVectorizer()),
(‘tfidf’, TfidfTransformer()),
(‘clf’, OneVsRestClassifier(LinearSVC(class_weight=”balanced”)))])

теперь, как я могу использовать SVM без Tf-idf?

Спасибо


person hadi javanmard    schedule 01.01.2019    source источник
comment
Не могли бы вы рассказать больше о модели, которую вы пытаетесь построить? каковы ваши особенности? слова? Вы используете набор слов массажа в качестве данных?   -  person thebeancounter    schedule 01.01.2019
comment
моя модель включает тело в виде текста сообщений и метки. у меня 6 ярлыков. да, мои данные состоят из слов, которые составляют предложения. @thebeancounter   -  person hadi javanmard    schedule 01.01.2019


Ответы (1)


См. здесь sklearn страницу о SVM, там у вас есть раздел для мультикласса классификация с помощью SVM. Сначала вам нужно преобразовать свои тексты в вектор признаков (числовой, если вы хотите использовать SVM). Если вы хотите использовать набор слов, вы можете использовать это вопрос SO и эта справочная страница sklearn

Вы можете использовать предварительно написанный код Python для создания BOW из ваших текстов, делая что-то подобное — заметьте, я собрал соответствующую информацию для OP — это было неясно и несовместимо со стандартами SO, поэтому вам может потребоваться немного поработать над кодом чтобы он соответствовал вашему точному использованию.

>>> from sklearn.feature_extraction.text import CountVectorizer

>>> vectorizer = CountVectorizer()
>>> vectorizer                     
CountVectorizer(analyzer=...'word', binary=False, decode_error=...'strict',
        dtype=<... 'numpy.int64'>, encoding=...'utf-8', input=...'content',
        lowercase=True, max_df=1.0, max_features=None, min_df=1,
        ngram_range=(1, 1), preprocessor=None, stop_words=None,
        strip_accents=None, token_pattern=...'(?u)\\b\\w\\w+\\b',
        tokenizer=None, vocabulary=None)


>>> corpus = [
...     'This is the first document.',
...     'This is the second second document.',
...     'And the third one.',
...     'Is this the first document?',
... ]
>>> X = vectorizer.fit_transform(corpus)
>>> X                              
<4x9 sparse matrix of type '<... 'numpy.int64'>'
    with 19 stored elements in Compressed Sparse ... format>

Затем вам может понадобиться преобразовать x в плотную матрицу (зависит от версии sklearn). Затем вы можете передать x в модель SVM, которую вы можете создать так

>>>>from sklearn import svm
>>> X = [[0], [1], [2], [3]]
>>> Y = [0, 1, 2, 3]
>>> clf = svm.SVC(gamma='scale', decision_function_shape='ovo')
>>> clf.fit(X, Y) 
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
    decision_function_shape='ovo', degree=3, gamma='scale', kernel='rbf',
    max_iter=-1, probability=False, random_state=None, shrinking=True,
    tol=0.001, verbose=False)
>>> dec = clf.decision_function([[1]])
>>> dec.shape[1] # 4 classes: 4*3/2 = 6
6
>>> clf.decision_function_shape = "ovr"
>>> dec = clf.decision_function([[1]])
>>> dec.shape[1] # 4 classes
person thebeancounter    schedule 02.01.2019