Bagaimana cara mengklasifikasikan teks dengan mempertimbangkan urutan kata, alih-alih hanya menggunakan pendekatan bag-of-words?


10

Saya telah membuat classifier Naif Bayes yang menggunakan teknik bag-of-words untuk mengklasifikasikan posting spam pada papan pesan. Ini bekerja, tapi saya pikir saya bisa mendapatkan hasil yang lebih baik jika model saya mempertimbangkan urutan kata dan frasa. (mis: 'cewek' dan 'live' mungkin tidak memicu skor spam yang tinggi, meskipun 'cewek live' kemungkinan besar sampah). Bagaimana saya bisa membangun model yang memperhitungkan pemesanan kata?

Saya telah mempertimbangkan untuk menyimpan n-gram (check-out-ini, out-ini-live, ini-live-girls), tetapi ini tampaknya secara radikal meningkatkan ukuran kamus yang saya simpan skornya dan menyebabkan ketidakkonsistenan sebagai frasa dengan sangat kata-kata yang serupa tetapi urutan yang berbeda akan lolos.

Saya tidak terikat dengan klasifikasi Bayesian, tetapi saya ingin sesuatu yang seseorang dapat memiliki latar belakang yang kuat dalam statistik dapat diterapkan dan diimplementasikan.


model n-gram sering kali menjadi cara untuk mempertimbangkan urutan kata. lihat en.wikipedia.org/wiki/N-gram
brentlance

Jawaban:


6

Ada hack yang sangat sederhana untuk memasukkan urutan kata dalam implementasi model bag-of-words yang ada. Perlakukan beberapa frasa, seperti bi-gram yang sering muncul (misalnya New York) sebagai satu kesatuan, yaitu satu kata saja daripada memperlakukannya sebagai entitas yang terpisah. Ini akan memastikan bahwa "New York" berbeda dari "New York". Anda juga bisa menentukan sirap kata urutan tinggi seperti untuk n = 3,4 dll.

Anda bisa menggunakan Lucene ShingleFilter untuk menguraikan teks dokumen Anda menjadi sirap sebagai langkah pra-pemrosesan dan kemudian menerapkan classifier pada teks yang diurai ini.

import java.io.*;
import org.apache.lucene.analysis.core.*;
import org.apache.lucene.analysis.*;
import org.apache.lucene.analysis.shingle.ShingleFilter;
import org.apache.lucene.analysis.standard.*;
import org.apache.lucene.util.*;
import org.apache.lucene.analysis.util.*;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.analysis.charfilter.*;
import org.apache.lucene.analysis.core.WhitespaceTokenizer;

class TestAnalyzer extends Analyzer {

    TestAnalyzer() {
        super();
    }

    protected TokenStreamComponents createComponents( String fieldName, Reader reader ) {
        String token;
        TokenStream result = null;

        Tokenizer source = new WhitespaceTokenizer( Version.LUCENE_CURRENT, reader );
        result = new ShingleFilter(source, 2, 2);

        return new TokenStreamComponents( source, result );

    }
}

public class LuceneTest {

    public static void main(String[] args) throws Exception {

        TestAnalyzer analyzer = new TestAnalyzer();

        try {
            TokenStream stream = analyzer.tokenStream("field", new StringReader("This is a sample sentence."));
            CharTermAttribute termAtt = stream.addAttribute(CharTermAttribute.class);

            stream.reset();

            // print all tokens until stream is exhausted
            while (stream.incrementToken()) {
                System.out.println(termAtt.toString());
            }

            stream.end();
            stream.close();
         }
         catch (Exception ex) {
             ex.printStackTrace();
         }

    }
}


2

Ada banyak teknik. Anda sudah menyebutkan n-gram, lalu ada kombinasi kata dan lainnya. Tetapi masalah utama (setidaknya dari sudut pandang Anda) adalah bahwa ketika fitur menjadi lebih kompleks (seperti n-gram), jumlah fitur meningkat secara dramatis. Ini bisa dikelola. Pada dasarnya sebelum klasifikasi, Anda harus menilai fitur Anda dan kemudian ambang batas pada skor tertentu. dengan cara ini fitur-fitur (atau dalam kasus Anda n-gram) yang diberi skor di bawah level tertentu dihilangkan dan jumlah fitur menjadi dapat dikelola. Adapun skor. Ada banyak cara (yang untuk memilih tergantung pada aplikasi Anda) untuk menilai fitur. Anda dapat mulai dengan "Pemisahan dua arah", "chi square", "Penguatan Informasi" dan lain-lain. Saya tidak tahu apakah jawaban ini membantu Anda tetapi jika Anda tertarik saya dapat menguraikan ...

Saya lupa, dalam kombinasi kata Anda meletakkan jendela ukuran m pada teks dan mengekstrak setiap kombinasi n kata. tentu saja n

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.