N-gram neden kelimeler yerine metin dili tanımlamasında kullanılıyor?


12

İki popüler dil tanımlama kütüphanesinde, C ++ için Compact Language Detector 2 ve java için dil dedektörü , her ikisi de metin özelliklerini ayıklamak için (karakter tabanlı) n-gram kullandı. Neden bir kelime torbası (tek kelime / sözlük) kullanılmaz ve kelime torbası ve n-gramın avantajı ve dezavantajı nedir?

Ayrıca, n-gram modelinin metin sınıflandırmasında diğer kullanımları nelerdir?

Hata! Burada benzer bir soru var gibi görünüyor: Metin belgesi için özellik vektörü oluşturmak için bigram (N-gram) modeli kullanma ile ilgili

Ama birisi daha kapsamlı bir cevap verebilir mi? Dil tanımlama durumunda hangisi daha iyidir?

(Umarım n-gram ve kelime torbasının anlamını doğru buldum, haha, lütfen bana bu konuda yardım et.)

Yanıtlar:


20

Bence en ayrıntılı cevaplar Mehryar Mohri'nin bu konudaki kapsamlı çalışmasında bulunabilir. Konuyla ilgili ders slaytlarından birine bir bağlantı: http://www.cims.nyu.edu/~mohri/amls/lecture_3.pdf

Dil algılama sorunu, insan dilinin (kelimelerin) bir yapıya sahip olmasıdır. Örneğin, İngilizce'de, 'u' harfinin 'q' harfini izlemesi çok yaygındır, ancak harf çevirisi yapılmış Arapça'da durum böyle değildir. n-gram bu yapıyı yakalayarak çalışır. Bu nedenle, bazı harf kombinasyonlarının bazı dillerde diğerlerinden daha olasıdır. Bu n-gram sınıflandırmasının temelidir.

Öte yandan, torbalar kelimesi büyük bir sözlükte arama yapmaya ve esasen şablon eşleştirme yapmaya bağlıdır. Burada iki ana dezavantaj vardır: 1) her dilin dosya üzerinde kapsamlı bir sözlük sözlüğü olması gerekir, bu da araması nispeten uzun zaman alır ve 2) kelimelerin hiçbiri yoksa eğitim seti test setine dahil edilmiştir.

Bigram (n = 2) kullandığınızı ve alfabenizde 26 harf olduğunu varsayarsak, o alfabe için sadece 26 ^ 2 = 676 olası bigram vardır, bunların çoğu asla gerçekleşmez. Bu nedenle, her dil için "profil" (dil algılayıcısının sözcüklerini kullanmak için) çok küçük bir veritabanına ihtiyaç duyar. Öte yandan bir dil çantası sınıflandırıcısı, hangi dilin verildiğine bağlı olarak bir dilin algılanabilmesini garanti etmek için HER dil için tam bir sözlüğe ihtiyaç duyacaktır.

Kısacası - her dil profili nispeten küçük bir özellik alanı ile hızlı bir şekilde oluşturulabilir. İlginç bir şekilde, n-gram sadece çalışır çünkü harfler bir dilde çizilmemiştir - bu açıkça kaldıraçtır.

Not: kelimeler için n-gram sayısı için genel denklem l ^ n'dir, burada l alfabedeki harf sayısıdır.


Bazı yakın diller için, n-gramın yanı sıra kelime listelerinin kullanılması da yardımcı olabilir. Bazen Norveççe metnin Danimarka dili olarak nitelendirildiğini gördüm. N-gramın bu iki dili ayırt etmenin iyi bir yolu olduğundan şüpheliyim.
kjetil b halvorsen

Ayrıntılı cevabınız için teşekkür ederim. Ancak bununla ilgili birkaç sorum var, öncelikle 'eğitim setindeki kelimelerin hiçbiri test setine dahil edilmezse, kelime torbası başarısız olur' diyebilir misiniz? ve ikincisi, CLD2 neden 4 gram kullanıyor, bu da İngilizce için 456976 girişe neden olacak, bir sözlük yöntemi kullanırken profilin yaklaşık yarısını getirebilir ( oxforddictionaries.com/words/… )?
dennis97519

1
@ dennis97519 re: "kelimelerin çantası ..." Sözlüğünüzün yalnızca İngilizce için {"köpek", "kedi", "kaplumbağa", "hayvan"} ve {"perro", "gato" sözcüklerinden oluştuğunu varsayalım , İspanyolca için "tortuga", "hayvan"}. Sözlüğünüz şu cümleyi sınıflandıramaz: "Eşek bir hayvandır" çünkü "hayvan" kelimesi her iki sözlükte de görünür, ancak diğer kelimelerin hiçbiri mevcut değildir. Bu aşırı bir örnek. Re 4 gram: 1) Dougal'ın dediği gibi, her dil için bir sözlüğe ihtiyacınız olduğunu, 2) n-gram seyrek (daha hızlı arama) ve 3) eğilimindedir, sadece birkaç bayt olarak temsil edilebilirler.
justanotherbrain

1
@loretoparisi - İki değiş tokuş var: Birincisi, model karmaşıklığı (büyük N = daha karmaşık) ve genelleme hatası (bazı test setlerinde ne kadar iyi yaptığınız) arasında - fazla harcama yapmak istemiyorsunuz. İkinci değiş tokuş hesaplama karmaşıklığıdır. Bellek karmaşıklığı N ile katlanarak büyür. Eğitim genellikle metindeki sözcük sayısı ile doğrusaldır, bu nedenle çok uzun bir metne sahip olmak genellikle sorun değildir. Bununla birlikte, büyük metin genellikle sözlüğünüzde D daha fazla kelime anlamına gelir. Bu nedenle, bellek karmaşıklığı O (D ^ N). Uygulamada, genellikle mümkün olduğunca büyük bir N'yi hesaplamak için kullanmak en iyisidir.
justanotherbrain

1
@loretoparisi - Bunu takiben, daha önce de belirtildiği gibi, N-gram seyrek olma eğilimindedir, ancak bu her zaman doğru değildir. Belirli bir metniniz için seyrek ise, farklı N ile çapraz doğrulama en uygun N'yi bulmak için en iyi yaklaşımdır (yine hesaplama kısıtlamaları ile).
justanotherbrain

3

Birkaç nedenden dolayı kelimeler yerine N-gram harf kullanılır:

1) Belirli bir dil için gereken kelimelerin listesi oldukça büyüktür, belki de hızlı, daha hızlı, en hızlı, oruçlu, oruç, oruç, ... tüm farklı kelimeler gibi düşünürseniz. 80 dil için, çok fazla yer kaplayan yaklaşık 50x kelimeye ihtiyacınız var - 50+ megabayt.

2) 26 harfli bir alfabe için harf trigram sayısı 26 ** 3 veya yaklaşık 17,000 ve dörtgenler (N = 4) için bu alfabeyi kullanan TÜM dilleri kapsayan yaklaşık 450.000'dir. 30-100 karakterlik daha büyük harflerle N-gram için benzer ancak biraz daha büyük sayılar. Han alfabesinde 4000+ harf içeren CJK dilleri için unigramlar (N = 1) yeterlidir. Bazı Unicode komut dosyaları için, komut dosyası başına yalnızca bir dil (Yunanca, Ermenice) vardır, bu nedenle harf kombinasyonuna gerek yoktur (nil gram N = 0 olarak adlandırılır)

3) Kelimelerde, sözlükte olmayan bir sözcük verildiğinde hiçbir bilginiz olmazken, N-gram harfleriyle bu sözcük içinde en az birkaç yararlı harf birleşimine sahip olursunuz.

CLD2, Latince, Kiril ve Arapça dahil olmak üzere çoğu Unicode alfabesi (alfabe) için quadgramlar, CJK komut dosyaları için unigramlar, diğer komut dosyaları için nilgramlar ve ayrıca ayırt etmek için sınırlı sayıda oldukça farklı ve oldukça yaygın tam kelime ve kelime çifti içerir Endonezce ve Malayca gibi istatistiksel olarak benzer dillerden oluşan zor gruplar içinde. Harf bigramları ve trigramları belki de az sayıda dili ayırt etmek için yararlıdır (yaklaşık sekiz, bkz. Https://docs.google.com/document/d/1NtErs467Ub4yklEfK0C9AYef06G_1_9NHL5dPuKIH7k/edit), ancak düzinelerce dili ayırt etmek için işe yaramaz. Bu nedenle, CLD2, her harf kombinasyonuyla ilişkili olarak bu kombinasyonu kullanan en büyük üç dili ilişkilendiren dörtgen kullanır. Bu, 80 MB'ı 1,5 MB tablolarla ve 160 dili 5MB tablolarla daha ayrıntılı olarak kapsamayı sağlar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.