Làm cách nào tôi có thể phân loại văn bản xem xét thứ tự từ, thay vì chỉ sử dụng cách tiếp cận từ ngữ?


10

Tôi đã tạo một trình phân loại Naive Bayes sử dụng kỹ thuật bag-of-words để phân loại các bài đăng spam trên bảng tin. Nó hoạt động, nhưng tôi nghĩ rằng tôi có thể nhận được kết quả tốt hơn nhiều nếu các mô hình của tôi xem xét thứ tự từ và cụm từ. (ví dụ: 'cô gái' và 'sống' có thể không kích hoạt điểm spam cao, mặc dù 'cô gái sống' rất có thể là rác). Làm thế nào tôi có thể xây dựng một mô hình có tính năng đặt hàng từ?

Tôi đã xem xét việc lưu trữ n-gram (trả phòng, những cô gái sống, những cô gái sống này), nhưng điều này dường như làm tăng hoàn toàn kích thước của từ điển mà tôi giữ điểm và gây ra sự không nhất quán như những cụm từ rất từ ngữ tương tự nhưng thứ tự khác nhau sẽ trượt qua.

Tôi không bị ràng buộc với phân loại Bayes, nhưng tôi muốn một cái gì đó mà một người không có nền tảng vững chắc về thống kê có thể mò mẫm và thực hiện.


mô hình n-gram thường là cách để đi khi xem xét thứ tự từ. xem en.wikipedia.org/wiki/N-gram
brentlance

Câu trả lời:


6

Có một cách hack rất đơn giản để kết hợp trật tự từ trong triển khai mô hình bag-of-words hiện có. Hãy coi một số cụm từ, chẳng hạn như bi-gram thường xuyên xảy ra (ví dụ New York) là một đơn vị, tức là một từ duy nhất thay vì coi chúng là các thực thể riêng biệt. Điều này sẽ đảm bảo rằng "New York" khác với "New York". Bạn cũng có thể xác định bệnh zona từ bậc cao hơn như n = 3,4, v.v.

Bạn có thể sử dụng Lucene ShingleFilter để phân tách văn bản tài liệu của bạn thành bệnh zona như một bước xử lý trước và sau đó áp dụng trình phân loại trên văn bản phân tách này.

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

Có một loạt các kỹ thuật. Bạn đã đề cập đến n-gram, sau đó có sự kết hợp từ và những người khác. Nhưng vấn đề chính (ít nhất là theo quan điểm của bạn) là khi tính năng trở nên phức tạp hơn (như n-gram), số lượng tính năng tăng lên đáng kể. Điều này có thể quản lý được. Về cơ bản trước khi phân loại, bạn phải chấm điểm các tính năng của mình và sau đó ngưỡng ở một số điểm nhất định. bằng cách này, các tính năng (hoặc trong trường hợp của bạn là n-gram) được ghi dưới một mức nhất định sẽ bị bỏ qua và số lượng tính năng sẽ trở nên dễ quản lý. như để ghi bàn. Có nhiều cách (để chọn tùy thuộc vào ứng dụng của bạn) để chấm điểm các tính năng. Bạn có thể bắt đầu với "Phân tách sinh học", "chi vuông", "Thu thập thông tin", v.v. Tôi không biết câu trả lời này có giúp gì cho bạn không nhưng nếu bạn quan tâm tôi có thể giải thích ...

Tôi quên mất, trong tổ hợp từ bạn đặt một cửa sổ có kích thước m trên văn bản và trích xuất từng tổ hợp của n từ. tất nhiên rồi

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.