Mengapa n-gram digunakan dalam identifikasi bahasa teks, bukan kata-kata?


12

Dalam dua perpustakaan identifikasi bahasa populer, Compact Language Detector 2 untuk C ++ dan bahasa detektor untuk java, keduanya menggunakan (berbasis karakter) n-gram untuk mengekstraksi fitur teks. Mengapa kantung kata-kata (satu kata / kamus) tidak digunakan, dan apa keuntungan dan kerugian kantung kata-kata dan n-gram?

Juga, apa kegunaan lain dari model n-gram dalam klasifikasi teks?

Oh oops. Sepertinya ada pertanyaan serupa di sini: Mengenai menggunakan model bigram (N-gram) untuk membangun vektor fitur untuk dokumen teks

Tetapi bisakah seseorang memberikan jawaban yang lebih komprehensif? Mana yang lebih baik dalam hal identifikasi bahasa?

(Semoga aku mendapatkan arti dari n-gram dan kantong kata-kata yang benar, haha, jika tidak tolong bantu aku dengan itu.)

Jawaban:


20

Saya pikir jawaban yang paling terperinci dapat ditemukan dalam karya ekstensif Mehryar Mohri tentang topik ini. Berikut ini tautan ke salah satu slide kuliahnya tentang topik ini: http://www.cims.nyu.edu/~mohri/amls/lecture_3.pdf

Masalah deteksi bahasa adalah bahwa bahasa manusia (kata-kata) memiliki struktur. Sebagai contoh, dalam bahasa Inggris, sangat umum untuk huruf 'u' untuk mengikuti huruf 'q,' sementara ini tidak terjadi dalam bahasa Arab yang ditransliterasikan. n-gram bekerja dengan menangkap struktur ini. Dengan demikian, kombinasi huruf tertentu lebih mungkin dalam beberapa bahasa daripada yang lain. Ini adalah dasar dari klasifikasi n-gram.

Bag-of-words, di sisi lain, tergantung pada pencarian melalui kamus besar dan pada dasarnya melakukan pencocokan templat. Ada dua kelemahan utama di sini: 1) setiap bahasa harus memiliki kamus luas kata-kata pada file, yang akan memakan waktu yang relatif lama untuk mencari, dan 2) tas kata-kata akan gagal jika tidak ada kata dalam set pelatihan termasuk dalam set pengujian.

Dengan asumsi bahwa Anda menggunakan bigrams (n = 2) dan ada 26 huruf dalam alfabet Anda, maka hanya ada 26 ^ 2 = 676 kemungkinan bigrams untuk alfabet itu, banyak yang tidak akan pernah terjadi. Oleh karena itu, "profil" (untuk menggunakan kata-kata detektor bahasa) untuk setiap bahasa memerlukan basis data yang sangat kecil. Klasifikasi sekumpulan kata, di sisi lain akan membutuhkan kamus lengkap untuk bahasa SETIAP untuk menjamin bahwa suatu bahasa dapat dideteksi berdasarkan pada kalimat apa pun yang diberikan.

Jadi singkatnya - setiap profil bahasa dapat dengan cepat dihasilkan dengan ruang fitur yang relatif kecil. Menariknya, n-gram hanya berfungsi karena huruf tidak digambar iid dalam bahasa - ini secara eksplisit meningkatkan.

Catatan: persamaan umum untuk jumlah n-gram untuk kata adalah l ^ n di mana l adalah jumlah huruf dalam alfabet.


Saya kira untuk beberapa bahasa yang dekat, menggunakan daftar kata-kata selain n-gram akan membantu. Saya telah melihat, kadang-kadang, teks norwegian diklasifikasikan sebagai Denmark. Saya ragu n-gram adalah cara yang baik untuk membedakan kedua bahasa itu.
kjetil b halvorsen

Terima kasih atas jawaban terinci Anda. Namun saya punya beberapa pertanyaan mengenai hal ini, pertama-tama bisakah Anda menjelaskan 'tas kata-kata akan gagal jika tidak ada kata-kata dalam set pelatihan dimasukkan dalam set pengujian'? dan kedua, mengapa CLD2 menggunakan 4-gram, yang akan menghasilkan 456976 entri untuk bahasa Inggris, ketika menggunakan metode kamus dapat membawa sekitar setengah ukuran profil ( oxforddictionaries.com/words/… )?
dennis97519

1
@ dennis97519 re: "bag-of-words ..." Misalkan kamus Anda hanya terdiri dari kata {"dog", "cat", "turtle", "animal"} untuk bahasa Inggris dan {"perro", "gato" , "tortuga", "animal"} untuk bahasa Spanyol. Kamus Anda tidak akan dapat mengklasifikasikan kalimat berikut: "Keledai adalah binatang" karena kata "binatang" muncul di kedua kamus, tetapi tidak ada kata lain yang ada. Ini adalah contoh ekstrem. Re-gram 4: 1) Ingat bahwa Anda memerlukan kamus untuk setiap bahasa, 2) n-gram cenderung jarang (pencarian lebih cepat), dan 3) seperti kata Dougal, mereka dapat diwakili hanya dalam beberapa byte.
justanotherbrain

1
@loretoparisi - Ada dua trade-off: Yang pertama adalah antara kompleksitas model (N besar = lebih kompleks) dan kesalahan generalisasi (seberapa baik Anda lakukan pada beberapa set tes) - Anda tidak ingin berpakaian berlebihan. Pertukaran kedua adalah kompleksitas komputasi. Kompleksitas memori tumbuh secara eksponensial dengan N. Pelatihan biasanya linier dengan jumlah kata dalam teks, sehingga memiliki teks yang sangat panjang biasanya tidak menjadi masalah. Yang mengatakan, teks besar sering berarti lebih banyak kata dalam kamus Anda D. Jadi sekali lagi, kompleksitas memori adalah O (D ^ N). Dalam praktiknya, biasanya yang terbaik adalah menggunakan N dan komputasi sebesar mungkin.
justanotherbrain

1
@loretoparisi - Menindaklanjutinya, seperti yang disebutkan sebelumnya, N-gram cenderung jarang, tetapi ini tidak selalu benar. Jika jarang untuk teks khusus Anda, maka validasi silang dengan N berbeda adalah pendekatan terbaik untuk menemukan N optimal (sekali lagi, dengan kendala komputasi).
justanotherbrain

3

Huruf N-gram digunakan sebagai ganti kata-kata karena beberapa alasan:

1) Daftar kata yang diperlukan untuk bahasa tertentu cukup besar, mungkin 100.000 jika Anda menganggap cepat, lebih cepat, tercepat, cepat, cepat, cepat, ... karena semua kata berbeda. Untuk 80 bahasa, Anda membutuhkan sekitar 80x lebih banyak kata, menghabiskan banyak ruang - 50+ megabita.

2) Jumlah trigram huruf untuk alfabet 26 huruf adalah 26 ** 3 atau sekitar 17.000 dan untuk quadgram (N = 4) sekitar 450.000 mencakup SEMUA bahasa menggunakan alfabet itu. Angka serupa tetapi agak lebih besar untuk N-gram dalam huruf lebih besar dari 30-100 karakter. Untuk bahasa CJK dengan 4000+ huruf dalam skrip Han, unigrams (N = 1) sudah cukup. Untuk beberapa skrip Unicode, hanya ada satu bahasa per skrip (Yunani, Armenia), jadi tidak diperlukan kombinasi huruf (disebut nil-gram N = 0)

3) Dengan kata-kata, Anda tidak memiliki informasi sama sekali ketika diberi kata tidak dalam kamus, sedangkan dengan huruf N-gram Anda sering memiliki setidaknya beberapa kombinasi huruf yang berguna di dalam kata itu.

CLD2 menggunakan quadgram untuk sebagian besar skrip Unicode (huruf) termasuk Latin, Cyrillic, dan Arab, unigrams untuk skrip CJK, nilgram untuk skrip lain, dan juga menyertakan sejumlah kata lengkap yang cukup khas dan cukup umum serta pasangan kata untuk membedakan dalam kelompok-kelompok sulit bahasa yang serupa secara statistik, seperti bahasa Indonesia dan Melayu. Surat bigrams dan trigram mungkin berguna untuk membedakan di antara sejumlah kecil bahasa (sekitar delapan bahasa, lihat https://docs.google.com/document/d/1NtErs467Ub4yklEfK0C9AYef06G_1_9NHL5dPuKIH7k/edit), tetapi tidak berguna untuk membedakan lusinan bahasa. Jadi, CLD2 menggunakan quadgram, yang berasosiasi dengan setiap kombinasi huruf, tiga bahasa teratas yang paling mungkin menggunakan kombinasi itu. Ini memungkinkan mencakup 80 bahasa dengan sekitar 1,5 MB tabel dan 160 bahasa lebih detail dengan sekitar 5MB tabel.

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.