bagaimana saya bisa menggunakan SVM untuk klasifikasi teks tanpa menggunakan Tf-idf

Saya ingin mengklasifikasikan setiap pesan yang masuk. Saya bekerja dengan teks Persia. Saya sudah menerapkan pengklasifikasi teks dengan Naive Bayes. saya tidak menggunakan Tf-idf karena setiap fitur penting bagi saya. Tetapi saya melakukan beberapa trik untuk menghapus stop-words dan pouncs agar mendapatkan akurasi yang lebih baik.

Saya ingin mengimplementasikan pengklasifikasi teks dengan SVM tetapi saya banyak mencari. semua yang saya temukan terkait dengan penggunaan fungsi pipa dengan penggunaan Tf-idf. seperti di bawah ini:

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

sekarang, bagaimana saya bisa menggunakan SVM tanpa Tf-idf?

terima kasih


person hadi javanmard    schedule 01.01.2019    source sumber
comment
dapatkah Anda memberikan lebih banyak tentang model yang Anda coba buat? apa ciri-cirimu? kata-kata? apakah Anda menggunakan kumpulan kata-kata pijatan sebagai data Anda?   -  person thebeancounter    schedule 01.01.2019
comment
model saya menyertakan isi sebagai teks pesan dan label. aku punya 6 label. ya data saya terbuat dari beberapa kata yang membentuk kalimat.@thebeancounter   -  person hadi javanmard    schedule 01.01.2019


Jawaban (1)


Lihat di sini untuk halaman sklearn tentang SVM, di sana Anda memiliki bagian untuk multikelas klasifikasi menggunakan SVM. Pertama-tama Anda harus mengubah teks Anda menjadi vektor fitur (numerik, jika Anda ingin menggunakan SVM) Jika Anda ingin menggunakan sekumpulan kata, Anda dapat menggunakan pertanyaan SO ini dan halaman manual sklearn ini

Anda dapat menggunakan kode python yang telah ditulis sebelumnya untuk membuat BOW dari teks Anda dengan melakukan sesuatu seperti itu - ingat, saya mengumpulkan informasi yang relevan untuk OP - yang tidak jelas dan tidak kompatibel dengan SO strandarts, jadi Anda mungkin perlu mengerjakan kodenya sedikit agar sesuai dengan penggunaan Anda.

>>> 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>

Maka Anda mungkin perlu mengubah x menjadi matriks padat (tergantung pada versi sklearn) Kemudian Anda dapat memasukkan x ke dalam model SVM yang dapat Anda buat seperti itu

>>>>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