Tại sao n-gram được sử dụng trong nhận dạng ngôn ngữ văn bản thay vì từ?


12

Trong hai thư viện nhận dạng ngôn ngữ phổ biến, Compact Language dò 2 cho C ++ và trình phát hiện ngôn ngữ cho java, cả hai đều sử dụng n-gram (dựa trên ký tự) để trích xuất các tính năng văn bản. Tại sao một túi từ (từ đơn / từ điển) không được sử dụng, và lợi thế và bất lợi của túi từ và n-gram là gì?

Ngoài ra, một số ứng dụng khác của mô hình n-gram trong phân loại văn bản là gì?

Ôi trời ơi. Có vẻ như có một câu hỏi tương tự ở đây: Liên quan đến việc sử dụng mô hình bigram (N-gram) để xây dựng vector tính năng cho tài liệu văn bản

Nhưng ai đó có thể đưa ra một câu trả lời toàn diện hơn? Cái nào tốt hơn trong trường hợp nhận dạng ngôn ngữ?

(Hy vọng rằng tôi hiểu ý nghĩa của n-gram và túi từ đúng, haha, nếu không xin vui lòng giúp tôi với điều đó.)

Câu trả lời:


20

Tôi nghĩ rằng những câu trả lời chi tiết nhất có thể được tìm thấy trong công trình mở rộng của Mehryar Mohri về chủ đề này. Đây là một liên kết đến một trong những bài giảng của anh ấy về chủ đề: http://www.cims.nyu.edu/~mohri/amls/lecture_3.pdf

Vấn đề phát hiện ngôn ngữ là ngôn ngữ của con người (từ ngữ) có cấu trúc. Ví dụ, trong tiếng Anh, chữ 'u' rất phổ biến để theo chữ 'q', trong khi đây không phải là trường hợp trong tiếng Ả Rập phiên âm. n-gram hoạt động bằng cách nắm bắt cấu trúc này. Vì vậy, sự kết hợp nhất định của các chữ cái có nhiều khả năng trong một số ngôn ngữ hơn những ngôn ngữ khác. Đây là cơ sở của phân loại n-gram.

Mặt khác, túi từ, phụ thuộc vào việc tìm kiếm thông qua một từ điển lớn và về cơ bản là khớp mẫu. Có hai nhược điểm chính ở đây: 1) mỗi ngôn ngữ sẽ phải có một từ điển rộng rãi các từ trong hồ sơ, sẽ mất một thời gian tương đối dài để tìm kiếm và 2) từ ngữ sẽ thất bại nếu không có từ nào trong bộ huấn luyện được bao gồm trong bộ thử nghiệm.

Giả sử rằng bạn đang sử dụng bigram (n = 2) và có 26 chữ cái trong bảng chữ cái của bạn, thì chỉ có 26 ^ 2 = 676 bigram có thể cho bảng chữ cái đó, nhiều trong số đó sẽ không bao giờ xảy ra. Do đó, "hồ sơ" (để sử dụng các từ của trình phát hiện ngôn ngữ) cho mỗi ngôn ngữ cần một cơ sở dữ liệu rất nhỏ. Một bộ phân loại từ, mặt khác sẽ cần một từ điển đầy đủ cho ngôn ngữ MACHI để đảm bảo rằng ngôn ngữ có thể được phát hiện dựa trên bất kỳ câu nào được đưa ra.

Vì vậy, trong ngắn hạn - mỗi hồ sơ ngôn ngữ có thể được tạo ra nhanh chóng với một không gian tính năng tương đối nhỏ. Thật thú vị, n-gram chỉ hoạt động vì các chữ cái không được vẽ iid trong một ngôn ngữ - đây rõ ràng là đòn bẩy.

Lưu ý: phương trình chung cho số n-gram cho các từ là l ^ n trong đó l là số chữ cái trong bảng chữ cái.


Tôi đoán rằng đối với một số ngôn ngữ gần gũi, sử dụng danh sách các từ ngoài n-gram sẽ giúp ích. Tôi đã thấy, đôi khi, văn bản tiếng Na-uy đóng gói là Đan Mạch. Tôi nghi ngờ n-gram là một cách tốt để phân biệt hai ngôn ngữ đó.
kjetil b halvorsen

Cảm ơn bạn đã trả lời chi tiết của bạn. Tuy nhiên tôi có một vài câu hỏi liên quan đến vấn đề này, trước tiên bạn có thể giải thích 'túi từ sẽ thất bại nếu không có từ nào trong tập huấn luyện được bao gồm trong bộ kiểm tra'? và thứ hai, tại sao CLD2 sử dụng 4 gram, điều này sẽ dẫn đến 456976 mục nhập cho ngôn ngữ tiếng Anh, khi sử dụng phương pháp từ điển có thể mang lại một nửa kích thước của hồ sơ ( oxforddictionaries.com/words/iêu )?
dennis97519

1
@ dennis97519 re: "bag-of-words ..." Giả sử từ điển của bạn chỉ bao gồm các từ {"dog", "cat", "rùa", "động vật"} cho tiếng Anh và {"perro", "gato" , "tortuga", "động vật"} cho tiếng Tây Ban Nha. Từ điển của bạn sẽ không thể phân loại câu sau: "Con lừa là một con vật" bởi vì từ "động vật" xuất hiện trong cả hai từ điển, nhưng không có từ nào khác tồn tại. Đây là một ví dụ cực đoan. Re 4 gram: 1) Hãy nhớ rằng bạn cần một từ điển cho mỗi ngôn ngữ, 2) n-gram có xu hướng thưa thớt (tìm kiếm nhanh hơn) và 3) như Dougal nói, chúng có thể được biểu thị chỉ trong một vài byte.
justanotherbrain

1
@loretoparisi - Có hai sự đánh đổi: Thứ nhất là giữa độ phức tạp của mô hình (lớn N = phức tạp hơn) và lỗi tổng quát hóa (bạn làm tốt như thế nào trên một số thử nghiệm) - bạn không muốn vượt quá. Sự đánh đổi thứ hai là sự phức tạp tính toán. Độ phức tạp của bộ nhớ tăng theo cấp số nhân với N. Đào tạo thường tuyến tính với số lượng từ trong văn bản, do đó, việc có một văn bản rất dài thường không phải là vấn đề. Điều đó nói rằng, văn bản lớn thường có nghĩa là nhiều từ hơn trong từ điển của bạn D. Vì vậy, một lần nữa, độ phức tạp của bộ nhớ là O (D ^ N). Trong thực tế, tốt nhất là sử dụng N càng lớn càng tốt về mặt tính toán.
justanotherbrain

1
@loretoparisi - Theo dõi điều đó, như đã đề cập trước đó, N-gram có xu hướng thưa thớt, nhưng điều này không phải lúc nào cũng đúng. Nếu nó là thưa thớt cho văn bản cụ thể của bạn, thì xác thực chéo với N khác nhau là cách tiếp cận tốt nhất để tìm N tối ưu (một lần nữa, với các ràng buộc tính toán).
justanotherbrain

3

Chữ N-gram được sử dụng thay vì từ vì nhiều lý do:

1) Danh sách các từ cần thiết cho một ngôn ngữ nhất định khá lớn, có thể là 100.000 nếu bạn xem xét nhanh, nhanh hơn, nhanh nhất, nhịn ăn, nhịn ăn, nhịn ăn, ... như tất cả các từ khác nhau. Đối với 80 ngôn ngữ, bạn cần khoảng 80 lần nhiều từ, chiếm nhiều dung lượng - hơn 50 megabyte.

2) Số bát quái chữ cái cho bảng chữ cái 26 chữ cái là 26 ** 3 hoặc khoảng 17.000 và cho hình tứ giác (N = 4) khoảng 450.000 bao gồm TẤT CẢ các ngôn ngữ sử dụng bảng chữ cái đó. Số lượng tương tự nhưng có phần lớn hơn đối với N-gram trong bảng chữ cái lớn hơn từ 30 đến 100 ký tự. Đối với các ngôn ngữ CJK có hơn 4000 chữ cái trong tập lệnh Han, unigrams (N = 1) là đủ. Đối với một số tập lệnh Unicode, chỉ có một ngôn ngữ cho mỗi tập lệnh (tiếng Hy Lạp, tiếng Armenia), do đó không cần kết hợp chữ cái (cái gọi là nil-gram N = 0)

3) Với các từ, bạn hoàn toàn không có thông tin khi đưa ra một từ không có trong từ điển, trong khi với chữ N-gram, bạn thường có ít nhất một vài kết hợp chữ cái hữu ích trong từ đó.

CLD2 sử dụng bốn biểu đồ cho hầu hết các tập lệnh Unicode (bảng chữ cái) bao gồm tiếng Latin, Cyrillic và tiếng Ả Rập, unigram cho các tập lệnh CJK, nilgram cho các tập lệnh khác và cũng bao gồm một số lượng hạn chế các từ và cặp từ hoàn toàn khá đặc biệt và khá phổ biến để phân biệt trong các nhóm khó khăn của các ngôn ngữ tương tự thống kê, chẳng hạn như tiếng Indonesia và tiếng Malay. Thư bigram và trigram có lẽ hữu ích để phân biệt giữa một số ít ngôn ngữ (khoảng tám, xem https://docs.google.com/document/d/1NtErs467Ub4yklEfK0C9AYef06G_1_9NHL5dPuKIH7k/edit), nhưng vô dụng để phân biệt hàng tá ngôn ngữ. Do đó, CLD2 sử dụng bốn biểu đồ, liên kết với mỗi tổ hợp chữ cái ba ngôn ngữ có khả năng cao nhất sử dụng kết hợp đó. Điều này cho phép bao gồm 80 ngôn ngữ với khoảng 1,5 MB bảng và 160 ngôn ngữ chi tiết hơn với khoảng 5 MB bảng.

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.