Posted in Khác

Bag of Words Model

Như trong bài trước đã chỉ ra : Chúng ta cần vector hoá văn bản hoặc câu văn thành một vector của các features để có thể dùng SVMs để phân loại . Bài này sẽ giới thiệu một model đơn giản và khá là trực quan để chuyển 1 văn bản về vector các features . Cuối bài viết , mình sẽ mô tả dữ liệu mình có và code demo để có thể chuyển đổi dữ liệu đó về đúng với định dạng file theo yêu cầu của LibSVM để có thể thử phân loại bài báo . Kết quả sẽ so sánh với thuật toán Naive Bayes (một baseline method của text classification ).

Bag-of-words model là một trong những phương pháp phổ biến nhất dành cho phân loại object (đặc biệt trong xử lý ảnh ) .Bag-of-words không quan tâm đến thứ tự từ trong câu và  cũng chả quan tâm đến ngữ nghĩa của từ  [1] . Một lựa chọn phổ biến khác để diễn đạt từ thành vector  (aka. word2vec) [2]. Họ đã có những nỗ lực gần đây để mở rộng biểu diễn cụm từ, câu, đoạn văn [3]. Word2vec được sử dụng rất nhiều trong các nghiên cứu gần đây . Về phần word2vec sẽ được nói đến ở những bài viết sau này .

I ) Bag-of-Word là gì ?

Model Bag-of-word học được một bộ từ vựng từ tất cả các văn bản , rồi model các văn bản bằng cách đếm số lần xuất hiện của mỗi từ trong văn bản đó . Như thế 2 câu sau có thể được đính là như nhau “Cool for the Summer” and “for the Cool Summer” .

Ví dụ , với hai câu sau :

Sentence 1: “The cat sat on the hat”

Sentence 2: “The dog ate the cat and the hat”

Từ hai câu trên , vocabulary sẽ là :

{ the, cat, sat, on, hat, dog, ate, and }

Để có thể xây dựng được bag of words của 2 câu này , chúng ta đếm số lần xuất hiện của mỗi từ trong mỗi câu . Trong  Sentence 1, “the” xuất hiện hai lần , và “cat”, “sat”, “on”, và “hat” mỗi từ xuất hiện một lần , như thế  feature vector cho Sentence 1 sẽ là :

{ the, cat, sat, on, hat, dog, ate, and }

Sentence 1: { 2, 1, 1, 1, 1, 0, 0, 0 }

Tương tự ,  features cho Sentence 2 sẽ là : { 3, 1, 0, 0, 1, 1, 1, 1}

Một số sách tiếng anh viết về Bag-of-word [4] [5] [6]

2 . Một số vấn đề

2.1 . Tách từ 

Tiếng Anh : Từ thường được ngăn bởi khoảng trắng (space).

Tiếng Việt : Từ có thể gồm một hoặc nhiều âm tiết , các âm tiết được ngăn với nhau bởi khoẳng trắng .

Tách từ là bước xử lý cơ bản trong xử lý văn bản tiếng Việt . Chất lượng của hệ tách từ ảnh hưởng trực tiếp đến các bước sau như gán nhãn từ loại , phân tích cú pháp , phân tích ngữ nghĩa , cũng như các ứng dụng xử lý ngôn ngữ tự nhiên .

Ví dụ
Input: Để đóng vai quần chúng chúng tôi phải mặc quần áo theo lối phong kiến
Output: Để đóng vai quần_chúng chúng_tôi phải mặc quần_áo theo lối phong_kiến

Có 1 thư viện đáp ứng khá tốt bài toán tách từ . Đó là thư viện tách từ của vnu .

2.2 Remove stopwords

Chúng ta phải xử lý mới những từ mà xuất hiện nhiều , tuy nhiên lại không mang lại quá nhiều ý nghĩa . Những từ này được gọi là “stop words” . Trong tiếng Anh , đó là những từ như “is” , “this” , “that” . Còn trong tiếng Việt , đó có thể là những từ “để” , “này” , “kia” .

2.3 Giới hạn số features 

Trong dữ liệu của tôi , chúng ta có khoảng 4.000 bài báo được phân loại  , dẫn tới một vocabulary cực kì lớn . Để làm giảm độ lớn của feature vectors , chúng ta có thể chọn một vài từ xuất hiện nhiều nhất . Ví dụ , 5000 từ xuất hiện nhiều nhất ( stop words đã bị loại bỏ ở phần tiền xử lý )

2.4 Giới hạn độ lớn 1 vector của 1 văn bản

Nếu 1 từ trong vocabulary không xuất hiện trong văn bản thì giá trị feature đó bằng 0 . Vì thế ta có thể loại bỏ nó đi . Bằng cách làm nay với tập dữ liệu của tôi , file train giảm từ 700MB xuống còn 7MB

3. Cài đặt và thử nghiệm

3.1 Mô tả dữ liệu

Sẽ có 1 file data_test.txt để lưu id của bài viết và tên nhãn . Mỗi cụm này sẽ ở 1 dòng

Capture11.JPG

Một file articles.txt sẽ lưu id bài viết và nội dung . Mỗi cụm này sẽ ở 1 dòng

Capture111.JPG

3.2 Tiền xử lý dữ liệu

Chuyển đổi những nhãn kinh_te y_te thành số  để phù hợp với dataformat của libsvm . Vì thế sẽ đánh số theo vị trí xuất hiện . Sau đó từ id bài viết truy ra thể loại của bài viết rồi thay thế id thành thể loại bài viết thôi  .

Sau đó dùng thư viện tách từ . Tách từ xong thì loại bỏ stopwords . Loại bỏ stopword xong sẽ chia dữ liệu trong file articles.txt random thành 10 phần bằng nhau .

Chúng ta sẽ train 9 phân , test 1 lần . Xoay vòng 10 lần như thế lấy trung bình kết quả

Ở phần train sẽ đọc hết file train để xây dụng túi từ bag-of-word của chúng ta . Sau đó với mỗi văn bản , thì đếm số lần xuất hiện của bag-of-word trong văn bản này . Sau khi tiền xử lý , ta sẽ có 10 file Train và 10 file Test như sau

s.JPG

Đúng định dạng data của LibSvm

label feature1:value1 feature2:value2 ….

với feature1<feature2…

Capture.JPG

 

References :

[1] https://www.quora.com/What-are-the-alternatives-to-bag-of-words-for-analyzing-text-documents/answer/Kenneth-Tran?srid=nqv8

[2] http://arxiv.org/pdf/1310.4546.pdf

[3] http://jmlr.org/proceedings/papers/v32/le14.pdf

[4] http://nlp.stanford.edu/IR-book/pdf/irbookonlinereading.pdf

[5] Jurafsky Martin , Speech And Language Processing , http://stp.lingfil.uu.se/~santinim/ml/2014/JurafskyMartinSpeechAndLanguageProcessing2ed_draft%202007.pdf

[6] Manning and Schuetze , Foundations of Statistical Natural Language Processing , http://nlp.stanford.edu/fsnlp/

[7] Yin Zhang and Rong Jin and Zhi-Hua Zhou , Understanding Bag-of-Words Model: A Statistical Framework :http://cs.nju.edu.cn/zhouzh/zhouzh.files/publication/ijmlc10.pdf

[9] https://www.kaggle.com/c/word2vec-nlp-tutorial/details/part-1-for-beginners-bag-of-words

Advertisements

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s