Mô hình túi từ

Mô hình túi từ (bag-of-words) là một biểu diễn đơn giản hóa được sử dụng trong xử lý ngôn ngữ tự nhiên và truy vấn thông tin (IR). Trong mô hình này, một văn bản (chẳng hạn như một câu hoặc một tài liệu) được thể hiện dưới dạng túi (multiset) chứa các từ của nó, không quan tâm đến ngữ pháp và thậm chí trật tự từ nhưng vẫn giữ tính đa dạng. Mô hình túi từ cũng đã được sử dụng cho thị giác máy tính.

Mô hình túi từ thường được sử dụng trong các phương pháp phân loại tài liệu trong đó sự xuất hiện (tần suất) của mỗi từ được sử dụng như một đặc trưng để đào tạo máy phân loại.

Một tài liệu tham khảo đầu tiên về "túi từ" trong ngữ cảnh ngôn ngữ có thể được tìm thấy trong bài viết năm 1954 của Zellect Harris về "Cấu trúc phân phối".

== Ví dụ áp dụng ==
Dưới đây mô hình một tài liệu văn bản bằng cách sử dụng túi từ. Đây là hai tài liệu văn bản đơn giản: 
(1) Phúc thích xem phim. Đạt cũng thích xem phim.

(2) Bích cũng thích xem các trận bóng đá.

(Ví dụ dưới đây coi mỗi tiếng là một từ, "bóng đá" là "bóng" và "đá". Cũng có thể xác định từ theo ngữ pháp, "bóng đá" là một từ.) 
"Phúc", "thích", "xem", "phim", "Đạt" "cũng", "thích", "xem", "phim"

"Bích" "cũng" "thích" "xem" "các" "trận" "bóng" "đá"
BoW1 = {"Phú":1,"thích":2,"xem":2,"phim":2,"Đạt":1,"cũng":1};
BoW2 = {"Bích":1,"cũng":1,"thích":1,"xem":1,"các":1,"trận":1,"bóng":1,"đá":1};

Thứ tự của các từ bị bỏ qua, vì vậy, ví dụ codice_1 cũng là "BoW1".

Lưu ý: nếu một tài liệu khác giống như một kết hợp của hai văn bản trên, 
(3) Phúc thích xem phim. Đạt cũng thích xem phim. Bích cũng thích xem các trận bóng đá.
BoW3 = BoW1 = {"Phúc":1,"thích":3,"xem":3,"phim":2,"Đạt":1,"cũng":2,"Bích":1,"các":1,"trận":1,"bóng":1,"đá":1};

formula_1. 
== Ứng dụng ==
Trong thực tế, mô hình túi từ chủ yếu được sử dụng như một công cụ tạo đặc trưng. Sau khi chuyển đổi văn bản thành một "túi từ", chúng ta có thể tìm các biện pháp khác nhau để mô tả văn bản. Loại đặc điểm hoặc tính năng phổ biến nhất được tính toán từ mô hình túi từ là tần số thuật ngữ, cụ thể là số lần một thuật ngữ xuất hiện trong văn bản. Đối với ví dụ trên, chúng ta có thể xây dựng hai danh sách sau để ghi lại tần số thuật ngữ của tất cả các từ riêng biệt (BoW1 và BoW2 được chứa như trong BoW3): 
(1) [1, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0]
(2) [0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1]

- Mục đầu tiên tương ứng với từ "Phúc" là từ đầu tiên trong danh sách và giá trị của nó là "1" vì "Phúc" xuất hiện trong tài liệu đầu tiên 1 lần.
- Mục thứ hai tương ứng với từ "thích", đó là từ thứ hai trong danh sách và giá trị của nó là "2" vì "thích" xuất hiện trong tài liệu đầu tiên 2 lần

Danh sách (hoặc vectơ) đại diện này không bảo vệ thứ tự của các từ trong câu gốc. Đây chỉ là tính năng chính của mô hình Túi từ. Loại đại diện này có một số ứng dụng thành công, chẳng hạn như lọc email.

Tuy nhiên, tần số thuật ngữ không nhất thiết là đại diện tốt nhất cho văn bản. Các từ phổ biến như "the", "a", "to" trong tiếng Anh hầu như luôn là các thuật ngữ có tần suất cao nhất trong văn bản. Vì vậy, có số lượng thô cao không nhất thiết có nghĩa là từ tương ứng là quan trọng hơn. Để giải quyết vấn đề này, một trong những cách phổ biến nhất để "bình thường hóa" tần số thuật ngữ là tính trọng số của một thuật ngữ bằng nghịch đảo của tần số tài liệu, hoặc tf–idf. Ngoài ra, với mục đích cụ thể của phân loại, các lựa chọn thay thế được giám sát đã được phát triển để giải thích cho nhãn lớp của tài liệu. Cuối cùng, trọng số nhị phân (hiện diện / vắng mặt hoặc 1/0) được sử dụng thay cho tần số cho một số vấn đề (ví dụ: tùy chọn này được triển khai trong hệ thống phần mềm học máy WEKA).

== Mô hình N-gram ==
Mô hình túi từ là một đại diện tài liệu không có trật tự, chỉ có số lần xuất hiện của từ được coi trọng. Chẳng hạn, trong ví dụ trên "Phúc thích xem phim. Đạt cũng thích xem phim ", đại diện túi từ sẽ không tiết lộ rằng động từ " thích" luôn theo sau tên của một người trong văn bản này. Thay vào đó, mô hình n-gram có thể lưu trữ thông tin thứ tự này. Áp dụng cho ví dụ tương tự ở trên, một mô hình bigram sẽ phân tích văn bản thành các đơn vị sau và lưu trữ tần số thuật ngữ của từng đơn vị như trước đây. 

== Triển khai Python ==
from keras.preprocessing.text import Tokenizer

sentence = ["Phúc thích xem phim. Đạt cũng thích xem phim."]

def print_bow(sentence: str) -> None:

print_bow(sentence)
== Thủ thuật băm ==
Một cách khác để sử dụng từ điển là thủ thuật băm, trong đó các từ được ánh xạ trực tiếp đến các chỉ mục có hàm băm. Vì vậy, không có bộ nhớ được yêu cầu để lưu trữ một từ điển. Xung đột băm thường được xử lý thông qua giải phóng bộ nhớ để tăng số lượng băm. Trong thực tế, băm đơn giản hóa việc thực hiện các mô hình túi từ và cải thiện khả năng mở rộng.

== Ví dụ sử dụng: lọc thư rác ==
Trong lọc thư rác Bayes, một thông điệp email được mô hình hóa như một tập hợp các từ được sắp xếp theo thứ tự được chọn từ một trong hai phân phối xác suất: một đại diện cho thư rác và một đại diện cho email hợp pháp ("ham"). Hãy tưởng tượng có hai túi chữ đầy chữ. Một túi chứa đầy các từ được tìm thấy trong tin nhắn rác và túi còn lại có các từ được tìm thấy trong e-mail hợp pháp. Mặc dù bất kỳ từ nào có khả năng nằm ở đâu đó trong cả hai túi, túi "spam" sẽ chứa các từ liên quan đến spam như "chứng khoán", "Viagra" và "mua" thường xuyên hơn, trong khi túi "ham" sẽ chứa nhiều từ liên quan đến bạn bè hoặc nơi làm việc của người dùng.

Để phân loại thư e-mail, bộ lọc thư rác Bayes giả định rằng thư đó là một đống từ được đổ ngẫu nhiên từ một trong hai túi và sử dụng xác suất Bayesian để xác định túi nào có khả năng nằm trong túi đó.

== Xem thêm ==
- Làm mịn cộng tính
- Mô hình túi từ trong thị giác máy tính
- Phân loại tài liệu
- Ma trận thuật ngữ tài liệu
- Trích xuất đặc trưng
- Thủ thuật băm
- Học máy
- MinHash
- n-gram
- Xử lý ngôn ngữ tự nhiên
- Mô hình không gian vector
- w-shingling

==Tham khảo==
- McTear, Michael (et al) (2016). "Giao diện hội thoại". Nhà xuất bản quốc tế Springer.