N-gram. Rakiplerin yardımıyla dahili optimizasyonu iyileştirme Diğer sözlüklerde "N-gram"ın ne olduğunu görün

N-gram kullanma

N-gramların genel kullanımı

  • Dünya'nın hangi belirli bölümlerinin görüntüde olduğuna karar vermek için, uzaydan Dünya'nın bir dizi uydu görüntüsünü kümelemek için verilerin çıkarılması,
  • genetik dizileri aramak,
  • genetik alanında hangi spesifik hayvan türlerinden DNA örneklerinin toplandığını belirlemek için kullanılır,
  • bilgisayar sıkıştırma,
  • Kural olarak N-gram kullanılarak sesle ilgili veriler indekslenir.

N-gramlar ayrıca doğal dil işlemede yaygın olarak kullanılmaktadır.

Doğal dil işleme ihtiyaçları için N-gram kullanma

Doğal dil işleme alanında, N-gramlar çoğunlukla olasılık modellerine dayalı tahmin için kullanılır. N-gram modeli, öncekilerin tümü biliniyorsa, N-gramın son kelimesinin olasılığını hesaplar. Bir dili modellemek için bu yaklaşımı kullanırken, her kelimenin görünümünün sadece önceki kelimelere bağlı olduğu varsayılır.

N-gram'ın bir başka uygulaması da intihal tespitidir. Metni n-gram ile temsil edilen birkaç küçük parçaya bölerseniz, bunlar birbirleriyle kolayca karşılaştırılabilir ve böylece kontrollü belgelerin benzerlik derecesini elde edebilirsiniz. N-gramlar genellikle metin ve dili sınıflandırmak için başarıyla kullanılır. Ek olarak, metin verilerinden bilgi edinmenize izin veren işlevler oluşturmak için kullanılabilirler. N-gramları kullanarak, yanlış yazılmış sözcüklerin yerini alacak adayları verimli bir şekilde bulabilir.

Google Araştırma Projeleri

Google araştırma merkezleri, çok çeşitli araştırma ve geliştirme için N-gram modellerini kullandı. Bunlar, bir dilden diğerine istatistiksel çeviri, konuşma tanıma, yazım düzeltme, bilgi çıkarma ve daha fazlası gibi projeleri içerir. Bu projelerin amaçları için birkaç trilyon kelime içeren derlem metinleri kullanıldı.

Google, kendi eğitim binasını oluşturmaya karar verdi. Proje Google teracorpus olarak adlandırılıyor ve genel web sitelerinden toplanan 1.024.908.267.229 kelime içeriyor.

n-gram çıkarma yöntemleri

N-gramların çeşitli problemlerin çözümünde sıklıkla kullanılması nedeniyle, bunları metinden çıkarmak için güvenilir ve hızlı bir algoritmaya ihtiyaç vardır. Uygun bir n-gram çıkarma aracı sınırsız metin boyutuyla çalışabilmeli, hızlı çalışmalı ve mevcut kaynakları verimli bir şekilde kullanabilmelidir. Metinden N-gram çıkarmak için birkaç yöntem vardır. Bu yöntemler farklı ilkelere dayanmaktadır:

notlar

Ayrıca bakınız


Wikimedia Vakfı. 2010 .

  • n-tv
  • N-kaderin

Diğer sözlüklerde "N-gram" ın ne olduğunu görün:

    GRAM- (Fransızca gram, Yunanca gramer özelliğinden). Fransız birimi. ağırlık \u003d 1 santimetreküp damıtılmış su ağırlığı \u003d 22,5 Rusça. hisse. Rus diline dahil olan yabancı kelimelerin sözlüğü. Chudinov A.N., 1910. Fransa'da GRAM ağırlık ölçü birimi ... Rus dilinin yabancı kelimeler sözlüğü

    gram- gram, cins. lütfen. gram ve izin verilen (sayılardan sonra sözlü konuşmada) gram. Yüz gram (gram). Cinsin yeni formunun savunmasında. vaka pl. gram sayısı, Rus dili yazarı K. Chukovsky'nin bir uzmanı tarafından yapıldı. İşte Yaşam Olarak Yaşamak adlı kitabında yazdıkları: ... ... Modern Rusça'da telaffuz ve stres zorlukları sözlüğü

    GRAM- GRAM, gram, koca. (Yunanca gramer işaretinden, mektuptan). Metrik sistemdeki temel ağırlık birimi, 1 santimetreküp suyun ağırlığına eşittir. Bir gram yaklaşık 1/400 pound ağırlığındadır. ❖ Gram atom (fizik) Bir maddenin atom ağırlığına eşit gram sayısı. ... ... Ushakov'un Açıklayıcı Sözlüğü

    gram-röntgen- gram röntgen / n, gram röntgen / açık, çubuk. lütfen. gram röntgen ve gram röntgen... birleştirildi. Ayrı. Bir kısa çizgi aracılığıyla.

    gram- Gram, bu basit kelime, iki koşul olmasaydı, hatalar sözlüğünde verilemezdi; öncelikle, kesinlikle doğru bir dille hava atmak istiyorsanız, o zaman mağazaya geldikten sonra satıcıyı doğru olanla şaşırtın: Bana iki yüz gram tartın (değil ... ... Rusça dil hataları sözlüğü

    GRAM-ATOM- GRAM ATOM, kütlesi gram olarak ATOM KÜÇESİne eşit olan bir elementin miktarı. SI birim köstebek ile değiştirildi. Örneğin, bir hidrojen atomunun bir gramı (H, atom kütlesi = 1) bir grama eşittir. b>GRAM EŞDEĞERİ, bunun gram cinsinden ağırlığı… … Bilimsel ve teknik ansiklopedik sözlük

    GRAM- GRAM, ah, cins. lütfen. gram ve gram, kocam. Ondalık ölçü sisteminde bir kilogramın binde biri olan kütle birimi. Bir gram (değil) hiçbir şey (konuşma dili) değil, hiç değil. Bu adamda bir gram vicdan (yok) yok. | sf. gram, oh, oh. açıklayıcı ... ... Ozhegov'un açıklayıcı sözlüğü

    gram- a; lütfen. cins. gram ve gram; m [Fransızca. gram] Metrik sistemdeki bir kütle birimi, kilogramın binde biri. ◊ (Tek) gram yoktur. Hiç değil, hiç değil. kimde l. bir gram yalan değil. Kimsede bir gram vicdan yok. * * * gram (Fransızca ... ansiklopedik sözlük

    Gramm Zenob Theophilus- (Gramme) (1826 1901), elektrik mühendisi. Belçika'da doğdu, Fransa'da çalıştı. Dairesel armatürlü pratik bir elektrik jeneratörü için patent aldı (1869). Elektrik makinelerinin endüstriyel üretimini kurdu. * * * GRAM Zenob… … ansiklopedik sözlük

    gram atomu- bir maddenin gram cinsinden, sayısal olarak atom kütlesine eşit miktarı. Terimin kullanılması tavsiye edilmez. SI'da bir maddenin miktarı mol olarak ifade edilir. * * * GRAM ATOM GRAM ATOM, bir maddenin gram cinsinden miktarı, sayısal olarak atom kütlesine eşittir (bkz. ... ansiklopedik sözlük

    gram molekül- bir maddenin moleküler ağırlığına sayısal olarak eşit olan gram cinsinden miktarı. Terimin kullanılması tavsiye edilmez. SI'da bir maddenin miktarı mol olarak ifade edilir. * * * GRAM MOLEKÜL GRAM MOLEKÜL, bir maddenin gram cinsinden miktarı, sayısal olarak ona eşit ... ... ansiklopedik sözlük

anlamsal çekirdek

Sitenin modern gerçekliklerde görünürlüğünü başarılı bir şekilde geliştirmek ve artırmak için anlamsal çekirdeği sürekli genişletmek gerekir. Büyümenin en iyi yollarından biri, rakip anahtar kelimeleri toplamaktır.

Bugün, rakiplerin anlamlarını elde etmek zor değil, çünkü. Hem ücretli hem de ücretsiz birçok hizmet var.

Ücretsiz liste:

— megaindex.ru — Site Görünürlüğü aracı

- xtool.ru - sitenin sıralandığı anahtar kelimeleri de gösteren iyi bilinen bir hizmet

Ücretli listesi:

— spywords.ru — Yandex ve Google için uygun

- semrush.ru - yalnızca Google'a odaklandı

— prodvigator.ua — spywords.ru'nun Ukraynalı analoğu

Hizmetlere ek olarak, başlık ve açıklamayı n-gram'a bölmeye dayalı manuel bir yöntem de kullanabilirsiniz, bunun sonucunda çıktıda ek bir kelime öbeği listesi elde edilir.

N-gram - n eleman dizisi. Pratikte, N-gram bir dizi kelime olarak daha yaygındır. Ardışık iki öğeden oluşan bir diziye genellikle denir. diyagram, üç elemanlı bir dizi denir trigram. En az dört veya daha fazla eleman bir N-gram olarak tanımlanır, N, ardışık elemanların sayısı ile değiştirilir.

Bu tekniği adım adım düşünün:

- Rakiplerin başlığını (açıklamasını) yükleyin. Screaming Frog SEO ile yapılabilir.

- Bir metin düzenleyicide, ortaya çıkan listeyi konuşmanın hizmet bölümlerinden, noktalama işaretlerinden ve diğer çöplerden temizleriz. Normal ifadeler kullanarak metin düzenleyici yüce metinde (kısayol tuşu ctrl+H) "ara ve değiştir" işlevini kullanıyorum:

- İstenen n-gram'ı seçin ve frekansı en az bir olarak ayarlayın. En iyi seçenek trigramlar ve 4 gramdır:

- Aşağıdaki sonucu elde ederiz:

Kolonsaymaktekrar sayısını gösterirn-gram, sütunSıklık - Sıklıkn-gram.

Bir kelime öbeği listesi aldıktan sonra, onu analiz etmemiz ve anlamsal çekirdeği genişletmek için uygun anahtar kelimeleri seçmemiz gerekiyor. Daha fazla ayrıntı blogumuzun ilgili bölümünde bulunabilir.

Gruplandırma istekleri

Rakiplerin anlamsal çekirdeğinin nasıl gruplandığını anlamak çok önemlidir, çünkü bu, anahtar kelime öbeklerini sitenin sayfalarında doğru bir şekilde dağıtmaya yardımcı olur.

Bunu yapmak için, tam bir istek listesi oluşturduktan sonra, rakiplerin ilgili sayfalarını ve pozisyonlarını almamız (seolib.ru hizmetini kullanabilirsiniz) ve ardından gruplamamızla karşılaştırmamız gerekiyor. Bir rakibin iyi pozisyonlara sahip olduğunu ve aynı zamanda bizimkinden farklı gruplama yaptığını (örneğin, bir rakibin talepleri farklı sayfalara dağıtılırken bizimkinin istekleri bir sayfada aynı) görüyorsanız, dikkat etmeniz gerekir. bunu ve sitenizdeki açılış sayfalarını gözden geçirin.

Koşullu bir sitenin ve rakibinin gruplandırmasını karşılaştırmanın küçük bir örneğini ele alalım.

Tablodan da görebileceğiniz gibi site.ru, tüm anahtar kelimeler için bir açılış sayfasına sahiptir. Bir rakipte, aynı sorgular için farklı sayfalar sıralanır ve TOP veya TOP'a yakın konumları işgal eder. Buna dayanarak, site.ru'daki gruplandırmanın revize edilmesi gerektiği, özellikle “cephe” kelimesiyle anahtar ifadeler için ayrı bir sayfa oluşturulması gerektiği sonucuna varabiliriz.

metin kalitesi

Rakiplerin metinlerini analiz ederken dikkat edilmesi gereken ilk ve en önemli şey, niceliksel bileşen (geçiş sayısı, metin uzunluğu vb.) değil, niteliksel veya anlamsal bileşendir - bilginin ne kadar yararlı olduğu, rakibin sunduğu ve bunu nasıl yapıyor.

Birkaç örneğe bakalım.

Diyelim ki çiçek gönderiyorsunuz ve ana sayfada metindeki tazeliklerini garanti ediyorsunuz. Örneğin, bunun gibi:

Çiçek teslimat hizmetialan. trsoğuk mevsimde bile buketlerin güvenliğini garanti eder.

İşte rakiplerden birinden bir örnek:

Bizden kokulu kompozisyonlar sipariş etmek karlı, çünkü çiçeklerin tazeliğinden şüphe duyulursa %100 para iade garantisi veriyoruz.

Bir rakibin garantisi, soyut bir garantiden daha önemli olan para ile desteklenir.

Başka bir örnek düşünün - bir çevrimiçi mağazanın "seramik karolar" kategorisinin sayfasındaki metin:

Bu metin, herhangi bir yararlı anlamsal yük, katı su taşımamaktadır. Büyük olasılıkla, siteye gelen ve satın alma kararı veren kişi, ürünün faydalarını ve olası konfigürasyonları bilmek istiyor, bunun yerine anlamsız bir dizi karakter alıyor.

Şimdi bir rakibin metnine bakalım:

Bu metin daha kullanışlı çünkü fayanslar arasındaki farkları kısa ve öz bir şekilde iletir ve doğru olanı nasıl seçeceğinizi anlamanıza yardımcı olur.

Böylece rakiplerinizin metinlerini kendi metinlerinizle karşılaştırarak metin yazarlarına TOR derlerken yardımcı olacak birçok faydalı bilgi edinebilirsiniz.

metinlerin alaka düzeyi

Metinlerin kalitesi temasını sürdürürken, bunların alaka düzeyine değinmekten başka bir şey gelmiyor. Günümüzde metnin alakalı olması için sadece anahtar kelimelere yer vermek yeterli değildir. Sayfanın alaka düzeyini artırmak ve aynı zamanda metni spam yapmamak için konuyla ilgili kelimeler kullanmanız gerekir.

Bir metnin bir sorguyla ilişkisini değerlendirirken, arama motoru yalnızca anahtar kelimelerin varlığını değil, aynı zamanda ek kelimeleri de analiz eder ve böylece metnin anlamını belirler. Örneğin, bir fil hakkında bir metin yazarsak, ilgili kelimeler düşünülebilir: “gövde”, “dişler”, “doğa”, “hayvanat bahçesi”. Satranç taşıyla ilgili metin “fil” ise, bu kelimeler “şekil”, “kontrol”, “kraliçe” vb. olacaktır.

Rakiplerin metinlerinde ihtiyaçlarınıza en uygun kelime listesine ulaşabilirsiniz. Bunu yapmak için aşağıdaki adımları yapmanız gerekir:

— İstenilen yüksek frekans talebi için TOP-10'daki tüm metinleri farklı metin dosyalarına kopyalıyoruz.

- Konuşmanın hizmet kısımlarını, noktalama işaretlerini ve sayıları metinlerden kaldırıyoruz (daha önce ele alındı).

- Kelimeleri bir satırda sıralayın - normal ifadelerle "ara ve değiştir" işlevini kullanın. Boşluğu \n ile değiştirin.

- Ardından, tüm kelime formlarını normal sözlük formuna (lemma) getirmeniz gerekir. Bunu yapmak için https://tools.k50project.ru/lemma/ hizmetini kullanabilirsiniz. Alana her dosyadan ayrı ayrı kelime listesi girin ve "lemmetize et ve csv tablosu olarak çıktı al" butonuna tıklayın. Sonuç, lemmetized kelimelerle 10 dosya olmalıdır.

- Her dosyada yinelenen kelimeleri kaldırıyoruz.

- Dosyalardaki kelimeleri tek bir listede birleştirin.

— Şimdi bir frekans sözlüğü oluşturmamız gerekiyor. Bunu yapmak için, ortaya çıkan listeyi https://tools.k50project.ru/lemma/ hizmetine ekleyin ve "CSV biçiminde bir frekans sözlüğü oluştur" u tıklayın.

- Kelime listemiz hazır:

Sıklık 10 ise, bu kelime 10 sitenin hepsinde, 8 ise, o zaman sadece 8'de vb. En sık kullanılan kelimeleri kullanmanızı öneririz, ancak nadir kelimeler arasında ilginç çözümler bulunabilir.

Bu kadar basit bir şekilde, metin yazarları için TOR derlemek için tematik kelimelerin bir listesini alabilirsiniz.

Gördüğünüz gibi, rakipler sitelerinizi daha iyi optimize etmenize yardımcı olabilecek çok önemli bir bilgi kaynağıdır. Bu yazıda tüm yönlerden çok uzaklara değindim ve gelecekte neyin faydalı olduğunu ve rakiplerinizden nasıl öğrenebileceğinizi yazmaya devam edeceğim.

Haberlere kayıt ol Bu algoritmalar önceden bilinmeyen metinlerde arama yapmak üzere tasarlanmıştır ve örneğin metin düzenleyicilerde, belge görüntüleyicilerde veya bir sayfada arama yapmak için web tarayıcılarında kullanılabilir. Metnin ön işlenmesini gerektirmezler ve sürekli bir veri akışıyla çalışabilirler.

Doğrusal arama

Belirli bir metriğin (örneğin, Levenshtein metriği) girdi metnindeki sözcüklere basit bir ardışık uygulaması. Limitli bir metrik kullanırken, bu yöntem optimum performans elde etmenizi sağlar. Ama aynı zamanda, daha k, çalışma süresi uzadıkça artar. Asimptotik zaman tahmini - O(kn).

Bitap (Shift-Or veya Baeza-Yates-Gonnet olarak da bilinir ve Wu-Manber'den modifikasyonu)

algoritma bitap ve çeşitli modifikasyonları, çoğunlukla indeksleme olmadan bulanık arama için kullanılır. Varyasyonu, örneğin, standart grep işlevine benzer işlevleri yerine getiren, ancak arama sorgusundaki hataları destekleyen ve hatta normal ifadeleri kullanmak için sınırlı fırsatlar sağlayan unix yardımcı programında agrep kullanılır.

İlk defa bu algoritma fikri vatandaşlar tarafından önerildi. Ricardo Baeza-Yates ve Gaston Gonnet, 1992'de ilgili bir makale yayınladı.
Algoritmanın orijinal versiyonu sadece karakter değişimleriyle ilgilenir ve aslında mesafeyi hesaplar. çekiçleme. Ama biraz sonra güneş wu ve Udi Manber mesafeyi hesaplamak için bu algoritmanın bir modifikasyonunu önerdi Levenştein, yani eklemeler ve silmeler için destek getirdi ve buna dayalı olarak agrep yardımcı programının ilk sürümünü geliştirdi.






Sonuç değeri

Neresi k- hata sayısı, j- karakter dizini, s x - karakter maskesi (maskede, istekte verilen karakterin konumlarına karşılık gelen konumlarda tek bitler bulunur).
Sorguyla eşleşme veya eşleşmeme, elde edilen R vektörünün en son biti tarafından belirlenir.

Bu algoritmanın yüksek hızı, hesaplamaların bit paralelliği ile sağlanır - bir işlemde 32 veya daha fazla bit üzerinde aynı anda hesaplamalar yapmak mümkündür.
Aynı zamanda, önemsiz uygulama, uzunluğu 32'den fazla olmayan kelimelerin aranmasını destekler. Bu sınırlama, standart türün genişliği ile belirlenir. int(32 bit mimarilerde). Büyük boyut türlerini de kullanabilirsiniz, ancak bu algoritmayı bir dereceye kadar yavaşlatabilir.

Bu algoritmanın asimptotik çalışma süresi O(kn) doğrusal yöntemle aynıdır, uzun sorgular ve hata sayısı ile çok daha hızlıdır k 2'nin üzerinde

Test yapmak

3,2 milyon kelimelik bir metin üzerinde test yapıldı, ortalama kelime uzunluğu 10'du.
Tam arama
Arama süresi: 3562 ms
Levenshtein metriğini kullanarak arama yapın
Arama zamanı k=2: 5728 ms
Arama zamanı k=5: 8385 ms
Wu-Manber değişiklikleriyle Bitap algoritmasını kullanarak arama yapın
Arama zamanı k=2: 5499 ms
Arama zamanı k=5: 5928 ms

Açıkçası, Bitap algoritmasının aksine metriği kullanan basit bir arama, büyük ölçüde hata sayısına bağlıdır. k.

Bununla birlikte, büyük miktarda değişmemiş metin aramak söz konusu olduğunda, bu tür metinlerin önceden işlenmesiyle arama süresi önemli ölçüde azaltılabilir. indeksleme.

İndekslemeli Bulanık Arama Algoritmaları (Çevrimdışı)

Dizinlemeli tüm bulanık arama algoritmalarının bir özelliği, dizinin kaynak metinden derlenen bir sözlüğe veya bir veritabanındaki kayıt listesine göre oluşturulmasıdır.

Bu algoritmalar sorunu çözmek için farklı yaklaşımlar kullanır - bazıları kesin arama için indirgeme kullanır, diğerleri çeşitli uzamsal yapılar oluşturmak için metriğin özelliklerini kullanır vb.

Her şeyden önce, ilk adımda, kaynak metinden sözcükleri ve metindeki konumlarını içeren bir sözlük oluşturulur. Ayrıca, arama sonuçlarının kalitesini artırmak için kelimelerin ve kelime öbeklerinin sıklıklarını da sayabilirsiniz.

İndeksin sözlük gibi tamamen belleğe yüklendiği varsayılır.

Sözlüğün taktik ve teknik özellikleri:

  • Kaynak metin - Moshkov kütüphanesinden (lib.ru) 8,2 gigabayt malzeme, 680 milyon kelime;
  • Sözlük boyutu - 65 megabayt;
  • Kelime sayısı - 3,2 milyon;
  • Ortalama kelime uzunluğu 9,5 karakterdir;
  • Kök ortalama kare kelime uzunluğu (bazı algoritmaları değerlendirirken faydalı olabilir) - 10.0 karakter;
  • Alfabe - büyük harfler A-Z, E olmadan (bazı işlemleri basitleştirmek için). Alfabetik olmayan karakterler içeren kelimeler sözlükte yer almamaktadır.
Sözlük boyutunun metnin hacmine bağımlılığı kesinlikle doğrusal değildir - belirli bir hacme kadar, 500 bin kelimede% 15'ten 5 milyonda% 5'e kadar değişen temel bir kelime çerçevesi oluşturulur ve daha sonra bağımlılık doğrusal hale gelir. , yavaş yavaş azalıyor ve 680 milyon kelimede % 0,5'e ulaşıyor. Daha sonra büyümenin sürdürülmesi, çoğunlukla nadir kelimelerle sağlanır.

Örnek Genişletme Algoritması

Bu algoritma genellikle sözlüğün boyutunun küçük olduğu veya hızın ana kriter olmadığı yazım denetimi sistemlerinde (yani yazım denetleyicilerinde) kullanılır.
Bulanık arama problemini tam arama problemine indirgemeye dayanır.

Orijinal sorgudan, her biri için daha sonra sözlükte tam bir arama yapılan bir dizi "hatalı" kelime oluşturulur.

Çalışma süresi, büyük ölçüde hata sayısına ve A alfabesinin boyutuna bağlıdır ve ikili sözlük araması kullanılması durumunda:

Örneğin, ne zaman k = 1 ve Rus alfabesindeki 7 uzunluğundaki kelimeler (örneğin, "Timsah"), hatalı kelimeler kümesi yaklaşık 450 boyutunda olacaktır, yani oldukça kabul edilebilir olan 450 sözlük sorgusu yapmak gerekecektir.
Ama zaten k = 2 böyle bir kümenin boyutu, küçük bir sözlüğün tam bir numaralandırmasına veya bizim durumumuzda 1/27'ye karşılık gelen 115 binden fazla seçenek olacaktır ve bu nedenle, çalışma süresi oldukça büyük olacaktır. Aynı zamanda, bu kelimelerin her biri için sözlükte tam bir eşleşme aramak gerektiğini unutmamak gerekir.

özellikler:
Algoritma, keyfi kurallara göre "hatalı" varyantlar oluşturmak için kolayca değiştirilebilir ve ayrıca, sözlüğün herhangi bir ön işlenmesini ve buna bağlı olarak ek bellek gerektirmez.
Olası iyileştirmeler:
Tüm "hatalı" sözcükleri değil, yalnızca gerçek bir durumda ortaya çıkma olasılığı en yüksek olanları, örneğin yaygın yazım veya yazım hatalarını hesaba katan sözcükleri oluşturmak mümkündür.

Bu yöntem uzun süredir kullanılmaktadır ve uygulanması son derece basit olduğundan ve oldukça iyi performans sağladığından en yaygın olarak kullanılmaktadır. Algoritma şu prensibe dayanmaktadır:
"Eğer A kelimesi B kelimesiyle eşleşirse, birkaç hata verilirse, o zaman yüksek bir olasılıkla, en az bir ortak N uzunluğunda alt dizgiye sahip olacaklardır."
N uzunluğundaki bu alt dizilere N-gram denir.
İndeksleme sırasında, kelime bu tür N-gramlara bölünür ve daha sonra bu kelime, bu N-gramların her biri için listelere dahil edilir. Arama sırasında, sorgu da N-gram'a bölünür ve her biri için böyle bir alt diziyi içeren bir kelime listesi sırayla aranır.

Uygulamada en yaygın olarak kullanılanlar trigramlardır - uzunluk 3'ün alt dizileri. Daha büyük bir N değeri seçmek, minimum kelime uzunluğu üzerinde bir kısıtlamaya yol açar, bu durumda hata tespiti zaten mümkündür.

özellikler:
N-gram algoritması, olası tüm yanlış yazılmış kelimeleri bulmaz. Örneğin, VOTKA kelimesini alıp trigramlara ayırırsak: IN T KA → VO TÖ Tİle T KA - hepsinin T hatası içerdiğini görebilirsiniz. Böylece, bu trigramların hiçbirini içermediğinden "VODKA" kelimesi bulunmayacak ve bunlara karşılık gelen listelere girmeyecektir. Böylece, bir kelimenin uzunluğu ne kadar kısaysa ve ne kadar çok hata içeriyorsa, sorgunun N-gramlarına karşılık gelen listelere girmeme ve sonuçta bulunmama şansı o kadar yüksek olur.

Bu arada, N-gram yöntemi, keyfi özellikler ve karmaşıklık ile kendi metriklerinizi kullanmak için tam bir kapsam bırakır, ancak bunun için ödeme yapmanız gerekir - kullanırken, yine de sözlüğün yaklaşık %15'ini sıralı olarak numaralandırmanız gerekir, bu oldukça büyük bir değerdir. büyük sözlükler için çok şey.

Olası iyileştirmeler:
N-gramların hash tablolarını, kelimelerin uzunluğuna ve N-gramın kelime içindeki konumuna göre bölmek mümkündür (değişiklik 1). Aranan kelimenin ve sorgunun uzunluğunun nasıl daha fazla farklılık gösteremeyeceği k, ve bir sözcükteki N-gramın konumları k'den fazla farklı olamaz. Bu nedenle, yalnızca bu N-gramın word'deki konumuna karşılık gelen tablonun yanı sıra soldaki k tabloları ve sağdaki k tabloları, yani. Toplam 2k+1 bitişik tablolar.

Tabloları sözcük uzunluğuna göre bölerek ve benzer şekilde yalnızca komşu tablolara bakarak taramak için gereken kümenin boyutunu daha da azaltabilirsiniz. 2k+1 tablolar (değişiklik 2).

Bu algoritma, L.M. Boytsov'un makalesinde açıklanmıştır. İmza karma. Bir kelimenin "yapısının", bir özet tablosunda bir özet (imza) olarak kullanılan bit biçiminde oldukça açık bir temsiline dayanır.

İndeksleme sırasında her bir kelime için bu tür hash'ler hesaplanır ve sözlük kelime listesinin bu hash'e uygunluğu tabloya girilir. Ardından, arama sırasında, sorgu için bir karma hesaplanır ve orijinalinden en fazla k bit farklı olan tüm komşu karmalar sıralanır. Bu karmaların her biri için karşılık gelen kelimelerin listesi aranır.

Karma hesaplama işlemi - karmanın her bitine alfabeden bir grup karakter atanır. Bit 1 konumunda ben hash, orijinal kelimenin bir karakter içerdiği anlamına gelir. ben alfabe grupları. Kelimedeki harflerin sırası kesinlikle alakasız.

Bir karakterin çıkarılması ya hash değerini değiştirmeyecektir (kelime içinde hala aynı alfabe grubundan karakterler varsa) ya da bu gruba karşılık gelen bit 0 olarak değişecektir. Aynı şekilde eklendiğinde, bir bitten herhangi biri değişecektir. 1 olarak ayarlanır, aksi takdirde değişiklik olmaz. Karakterleri değiştirirken, her şey biraz daha karmaşıktır - karma ya hiç değişmeden kalabilir ya da 1 veya 2 konumda değişebilir. İzin verirken hiçbir değişiklik olmaz, çünkü daha önce belirtildiği gibi bir karma oluştururken karakterlerin sırası dikkate alınmaz. Bu nedenle, k hatayı tamamen kapatmak için en azından değiştirmeniz gerekir. 2k hash içinde biraz.

Ortalama olarak, k "eksik" (eklemeler, silmeler ve aktarmalar ile değiştirmelerin küçük bir kısmı) hatalarıyla çalışma süresi:

özellikler:
Bir karakter değiştirilirken iki bitin aynı anda değişebilmesi nedeniyle, örneğin aynı anda 2 bitten fazla olmayan distorsiyon uygulayan bir algoritma, iki değiştirmeli kelimelerin (karma boyutunun alfabeye oranına bağlı olarak) önemli bir kısmı (ve karma boyutu ne kadar büyükse, bir karakter değiştirmesi aynı anda iki bitin bozulmasına neden olur ve daha az tamamlanmış olur) sonuç olacaktır). Ayrıca bu algoritma önek aramalarına izin vermez.

BK ağaçları

ağaçlar Burkhard-Keller Metrik ağaçlar ise, bu tür ağaçları oluşturmaya yönelik algoritmalar, ölçünün üçgen eşitsizliğini karşılama özelliğine dayalıdır:

Bu özellik, metriklerin keyfi boyutta metrik uzaylar oluşturmasına olanak tanır. Bu tür metrik uzaylar mutlaka Öklidyen, örneğin, metrikler Levenştein ve Damerau-Levenshtein biçim Öklid olmayan Uzay. Bu özelliklere dayanarak, Barkhard-Keller ağaçları olan böyle bir metrik uzayda arama yapan bir veri yapısı oluşturabilirsiniz.

İyileştirmeler:
Bazı metriklerin, tepe noktasının torunlarına olan maksimum mesafenin toplamına eşit bir üst sınır ayarlayarak bir kısıtlama ile mesafeyi hesaplama yeteneğini ve sonuçta ortaya çıkan mesafeyi kullanabilirsiniz, bu da süreci biraz hızlandıracaktır:

Test yapmak

Test, Intel Core Duo T2500 (2GHz/667MHz FSB/2MB), 2Gb RAM, OS - Ubuntu 10.10 Desktop i686, JRE - OpenJDK 6 Update 20'ye sahip bir dizüstü bilgisayarda gerçekleştirildi.

Test, Damerau-Levenshtein mesafesi ve hata sayısı kullanılarak yapıldı. k = 2. Dizin boyutu sözlükle birlikte belirtilir (65 MB).

Dizin boyutu: 65 MB
Arama süresi: 320ms / 330ms
Sonuçların eksiksizliği: %100

N-gram (orijinal)
Dizin boyutu: 170 MB
Dizin oluşturma süresi: 32 s
Arama süresi: 71ms / 110ms
Sonuçların eksiksizliği: %65
N-gram (değişiklik 1)
Dizin boyutu: 170 MB
Dizin oluşturma süresi: 32 s
Arama süresi: 39ms / 46ms
Sonuçların eksiksizliği: %63
N-gram (değişiklik 2)
Dizin boyutu: 170 MB
Dizin oluşturma süresi: 32 s
Arama süresi: 37ms / 45ms
Sonuçların eksiksizliği: %62

Dizin boyutu: 85 MB
Dizin oluşturma süresi: 0,6 sn
Arama süresi: 55ms
Sonuçların eksiksizliği: %56.5

BK ağaçları
Dizin boyutu: 150 MB
Dizin oluşturma süresi: 120 s
Arama süresi: 540ms
Sonuçların eksiksizliği: %63

Toplam

İndekslenmiş bulanık arama algoritmalarının çoğu gerçekten alt-doğrusal değildir (yani asimptotik bir çalışma süresine sahiptir). O(günlük n) veya daha düşük) ve çalışma hızları genellikle doğrudan bağlıdır N. Bununla birlikte, çok sayıda iyileştirme ve iyileştirme, çok büyük hacimli sözlüklerle bile yeterince kısa bir çalışma süresi elde etmeyi mümkün kılmaktadır.

Diğer şeylerin yanı sıra, başka yerlerde halihazırda kullanılan çeşitli teknik ve tekniklerin belirli bir konu alanına uyarlanmasına dayanan çok daha çeşitli ve verimsiz yöntemler de vardır. Bu yöntemlerden biri de ön ek ağaçlarının (Trie) düşük verimliliğinden dolayı başıboş bıraktığım bulanık arama problemlerine uyarlanmasıdır. Ancak orijinal yaklaşımlara dayanan algoritmalar da vardır, örneğin algoritma Maass Novak Bu, bir alt doğrusal asimptotik çalışma süresine sahip olmasına rağmen, kendilerini büyük bir indeks boyutu şeklinde gösteren böyle bir zaman tahmininin arkasına gizlenmiş devasa sabitler nedeniyle son derece verimsizdir.

Bulanık arama algoritmalarının gerçek arama motorlarında pratik kullanımı, fonetik algoritmalar, sözcüksel kök alma algoritmaları ile yakından ilgilidir - aynı kelimenin farklı kelime biçimlerinin temel kısmını vurgulama (örneğin, bu işlevsellik Snowball ve Yandex mystem tarafından sağlanır), gibi yanı sıra istatistiksel bilgilere dayalı sıralama veya karmaşık karmaşık ölçümler kullanma.

  • Levenshtein mesafesi (kırpma ve önek seçeneği ile);
  • Damerau-Levenshtein mesafesi (kırpma ve önek seçeneğiyle);
  • Bitap algoritması (Wu-Manber modifikasyonları ile Shift-OR / Shift-AND);
  • Örnek genişletme algoritması;
  • N-gram yöntemi (orijinal ve modifikasyonlarla);
  • İmza karma yöntemi;
  • BK ağaçları.
Kodun anlaşılmasını kolaylaştırmak ve aynı zamanda pratik kullanım için yeterince verimli hale getirmek istedim. JVM'den son meyve sularını sıkmak görevlerimin bir parçası değildi. eğlence.

Bu konuyu inceleme sürecinde, indeks boyutundaki ılımlı bir artış ve bazı sınırlamalar nedeniyle arama süresini bir büyüklük sırasına göre azaltmama izin veren kendi geliştirmelerimden bazılarını bulduğumu belirtmekte fayda var. metriklerin seçim özgürlüğü. Ama bu tamamen farklı bir hikaye.


Tanım Örnek Uygulamalar Bir n-gram dil modeli oluşturma n-gram olasılığını hesaplama Bir eğitim korpusunun seyrekliğini ortadan kaldırma o Add-one Smoothing o Witten-Bell İndirimi o Good-Turing İndirimi o Katzs Backoff o Silinmiş İnterpolasyon Kullanarak bir n-gram dil modelini tahmin etme entropi İçindekiler


N-gram (İngilizce N-gram) bir dizinin N elemanının bir alt dizisi. Kelime dizilerini düşünün. Unigrams kedi, köpek, at,... Bigrams küçük kedi, büyük köpek, güçlü at,... Trigramlar küçük kedi yiyor, büyük köpek havlıyor, güçlü at koşuyor,... Tanım


Uygulanan görev örnekleri Konuşma tanıma. Yazılışları farklı olan bazı kelimeler aynı şekilde telaffuz edilir. Görev, bağlamda doğru kelimeyi seçmektir. Belirli bir konuda metin oluşturma. Örnek: Yandex.Özetler. Anlamsal hataları arayın. Cezalandırmaya çalışıyor - sözdizimi açısından, doğru, anlambilim açısından hayır. Öğrenmeye çalışıyor - doğru. bulmaya çalışmak, İngilizce metinlerde para cezası vermeye çalışmaktan çok daha sık bulunur; bu, istatistikler mevcutsa, bu tür hataları bulup ortadan kaldırabileceğiniz anlamına gelir.


Bir n-gram dil modelinin oluşturulması Listelenen uygulamalı problemleri çözmek için, bir N-gram dil modeli oluşturmak gereklidir. Bir model oluşturmak için yapmanız gerekenler: 1. Eğitim külliyatındaki n-gramların olasılıklarını hesaplayın. 2. Gövde seyrekliği sorununu kenar yumuşatma yöntemlerinden biriyle düzeltin. 3. Entropi kullanarak elde edilen n-gram dil modelinin kalitesini değerlendirin.


N-gram olasılığının hesaplanması (1) Eğitim korpusunda, farklı frekanslarda belirli n-gramlar oluşur. Her n-gram için, korpusta kaç kez meydana geldiğini sayabiliriz. Elde edilen verilere dayanarak, daha sonra bazı test korpuslarında n-gramların olasılığını tahmin etmek için kullanılabilecek bir olasılık modeli oluşturulabilir.


N-gram olasılığının hesaplanması (2) Bir örnek düşünün. Derlem tek bir cümleden oluşsun: Havuz başında piknik yaptılar, sonra çimenlere uzanıp yıldızlara baktılar. N-gram seçelim. Unigramlar: Onlar, picknicked, by, … Digrams: Piknik yaptılar, picknicked by, by, … Trigrams Onlar tarafından picknicked, havuz kenarında, …


N-gram olasılığının hesaplanması (3) Artık n-gramları saymak mümkündür. Seçilen tüm bi- ve trigramlar korpusta bir kez oluşur. Kelime hariç tüm unigramlar da bir kez geçer. Kelime üç defa geçer. Artık her bir n-gramın kaç kez oluştuğunu bildiğimize göre, n-gramların olasılıksal bir modelini oluşturabiliriz. Unigramlar söz konusu olduğunda, u kelimesinin olasılığı şu formül kullanılarak hesaplanabilir: Örneğin, kelime için olasılık 3/16 olacaktır (çünkü derlemde 3'ü kelime olan 16 kelime vardır) . Eğitim külliyatında u kelimesinin geçiş sayısı Havuz kenarında piknik yaptılar, sonra çimenlere uzanıp yıldızlara baktılar.


1, olasılık biraz farklı olarak kabul edilir. Bigram örneğini düşünün: havuzun bigram olasılığını hesaplamak gerekli olsun. Her bigram kelimesini bir olay olarak kabul edersek, o zaman inanmak" title="(!LANG:N-gram olasılık hesaplaması (4) n>1 olan n-gramlar için, olasılık biraz farklı hesaplanır. Bigram örneğini düşünün. : Digramın havuzunu hesaplamak gerekli olsun Digramın her kelimesini bir olay olarak kabul edersek, o zaman inanmak" class="link_thumb"> 9 !} N-gram olasılığının hesaplanması (4) n>1 olduğu n-gramlar için, olasılık biraz farklı hesaplanır. Bigram örneğini düşünün: havuzun bigram olasılığını hesaplamak gerekli olsun. Her bigram kelimesini bir olay olarak kabul edersek, o zaman bir dizi olayın olasılığı şu formülle hesaplanabilir: Böylece, bigramın olasılığı havuzdur:, burada 1, olasılık biraz farklı olarak kabul edilir. Bigram örneğini düşünün: havuzun bigram olasılığını hesaplamak gerekli olsun. Her bigram kelimesini bir olay olarak kabul edersek, o zaman "> 1'e inanarak, olasılık biraz farklı kabul edilir. Bigram örneğini düşünün: bigram havuzunun olasılığını hesaplamak gerekli olsun. Her bigram kelimesini şöyle düşünürsek bir olay varsa, o zaman bir dizi olayın olasılığı şu formülle hesaplanabilir: Böylece, bigramın olasılığı havuzdur: burada "> 1, olasılık biraz farklı hesaplanır. Bigram örneğini düşünün: havuzun bigram olasılığını hesaplamak gerekli olsun. Her bigram kelimesini bir olay olarak kabul edersek, o zaman inanmak" title="(!LANG:N-gram olasılık hesaplaması (4) n>1 olan n-gramlar için, olasılık biraz farklı hesaplanır. Bigram örneğini düşünün. : Digramın havuzunu hesaplamak gerekli olsun Digramın her kelimesini bir olay olarak kabul edersek, o zaman inanmak"> title="N-gram olasılığının hesaplanması (4) n>1 olduğu n-gramlar için, olasılık biraz farklı hesaplanır. Bigram örneğini düşünün: havuzun bigram olasılığını hesaplamak gerekli olsun. Diyagramın her bir kelimesini bir olay olarak kabul edersek, o zaman inanmak"> !}


N-gram olasılığının hesaplanması (5) Şimdi keyfi bir n-gramın (veya n uzunluğunda bir cümlenin) olasılığının hesaplanmasını düşünün. Bigram durumunu genişleterek, n-gram için olasılık formülünü elde ederiz. Böylece, bir cümlenin olasılığını hesaplamak, bu cümleyi oluşturan N-gramların koşullu olasılığını hesaplamaya indirgenir:




Derlem seyrekliğinin ortadan kaldırılması (1) n-gramların basit (düzeltilmemiş) dil modeli sorunu: bazı n-gramlar için olasılık büyük ölçüde küçümsenebilir (hatta sıfır olabilir), ancak gerçekte (test tümcesinde) bunlar n-gramlar oldukça sık ortaya çıkabilir. Sebep: sınırlı eğitim külliyatı ve özgüllüğü. Çözüm: Bazı n-gramların olasılığını azaltarak, eğitim külliyatında meydana gelmeyen (veya oldukça nadiren karşılaşılan) n-gramların olasılığını artırın.




Derlem seyrekliği eleme (3) Seyreklik eleme algoritmalarında aşağıdaki kavramlar kullanılır: Türler – metindeki farklı kelimeler (kelime dizileri). Belirteçler, metindeki tüm kelimelerdir (kelime dizileri). Havuz başında piknik yaptılar, sonra çimenlere uzanıp yıldızlara baktılar - 14 çeşit, 16 jeton





Add-one yumuşatma (4) Yöntem, hesaplamalarda güçlü bir hataya neden olur (örneğin, önceki slaytta, Çince kelimesi için bigram sayısının 8 kat azaldığı gösterilmiştir). Testler, düzleştirilmemiş modelin genellikle daha doğru sonuçlar verdiğini göstermiştir. Bu nedenle, yöntem yalnızca teorik bir bakış açısından ilginçtir.


Witten-Bell İndirimi (1) Basit bir fikre dayanarak: eksik n-gram olasılığını tahmin etmek için eğitim derleminde meydana gelen n-gramlar hakkındaki verileri kullanın. Yöntem fikri sıkıştırma algoritmalarından alınmıştır: iki tür olay düşünülür - yeni bir karakterle (tür) tanıştılar ve bir karakterle (belirteç) karşılaştılar. Tüm eksik n-gramlar için olasılık formülü (yani, eğitim derleminde olmayan test derleminde bir n-gram ile karşılaşma olasılığı): N, eğitim derlemindeki belirteçlerin sayısıdır, T türlerin sayısıdır eğitim korpusunda daha önce karşılaşılmış olan






Witten-Bell İndirimi (4) =>=> =>"> =>"> =>" title="(!LANG:Witten-Bell İndirimi (4) =>=>"> title="Witten-Bell İndirimi (4) =>=>"> !}




İyi Turing İndirimi (1) Fikir: Sıfır kez (c kez) oluşan n-gramlar için puan, bir kez (c + 1 kez) oluşan n-gram sayısıyla orantılıdır. Bir örnek düşünün: Diyelim ki 18 balık yakalandı. Toplamda 6 farklı tür yakalanmış olup, üç türden yalnızca bir temsilci yakalanmıştır. Bir sonraki balığın yeni bir türe ait olma olasılığını bulmamız gerekiyor. Toplamda 7 olası tür vardır (6 tür zaten yakalanmıştır).








Katzs Backoff (2) α katsayısı, (N-1)-gramların olasılık dağılımına göre N-gramların kalıntı olasılığının doğru dağılımı için gereklidir. α girmezseniz, tahmin hatalı olacaktır, çünkü eşitlik sağlanmayacaktır: α'nın hesaplanması raporun sonunda verilmiştir. Entropi kullanarak bir dil modelinin değerlendirilmesi (1) Entropi, belirsizliğin bir ölçüsüdür. Entropi yardımıyla, belirli bir uygulamalı görev için en uygun N-gram dil modeli belirlenebilir. İkili Entropi Formülü: Örnek: Yazı-tura atma testinin entropisini hesaplayın. Cevap: Deneyin sonuçlarının eşit derecede olası olması koşuluyla 1 bit (her iki taraf da 1/2 olasılıkla düşer).




Entropi kullanarak dil modelinin değerlendirilmesi (3) Çapraz entropi, farklı dil modellerini karşılaştırmak için kullanılır: Çapraz entropi H(p,m)'nin değeri gerçek entropiye H(p) ne kadar yakınsa, dil modeli o kadar iyi: Bizim durumumuzda H(p ) test korpusunun entropisidir. m(w) – dil modeli (örn. N-gram modeli)


Entropi kullanarak bir dil modelinin değerlendirilmesi (4) Sözde dayalı bir dil modelinin kalitesini değerlendirmek için başka bir yöntem vardır. bağlantı göstergesi (şaşkınlık). Fikir: Tüm test korpusunun olasılığını hesaplayın. Daha iyi bir model daha yüksek bir olasılık gösterecektir. şaşkınlık formülü: Bu nedenle, şaşkınlık ne kadar küçükse, model o kadar iyi olur. Şaşkınlık, belirli bir kelimeden sonra gelebilecek ortalama kelime sayısı olarak yorumlanabilir (yani, şaşkınlık ne kadar fazlaysa, belirsizlik o kadar yüksek ve dolayısıyla dil modeli o kadar kötü olur). Şaşkınlık ve ikili entropi arasındaki ilişki:


Entropi kullanarak bir dil modelinin tahmini (5) Örnek olarak, eğitimli unigram, bigram ve trigram modelleri kullanılarak elde edilen bazı korpuslar için şaşkınlık değerlerini göz önünde bulundurun: Trigramlar söz konusu olduğunda, şaşkınlık en küçüktür, çünkü netleştirme, trigramların koşullu olasılıkları hesaplanırken tüm modellerin en uzun geçmiş uzunluğu (2'ye eşit) ile kolaylaştırılır. UnigramBigramTrigram Şaşkınlığı


Bazı n-gram uygulamalarını (tercihen PHP'de) uygulamak istiyorum.

Çoğu amaç için hangi tür n-gram daha uygundur? Kelime seviyesi veya karakter seviyesi n-gram seviyesi? PHP'de bir n-dilbilgisel belirteç nasıl uygulanabilir?

İlk olarak, N-gram'ın ne olduğunu bilmek istiyorum. Bu doğru? N-gramları şu şekilde anlıyorum:

Öneri: "New York'ta yaşıyorum."

kelime düzeyinde biramlar (n için 2): "# I", "I yaşıyorum", "yaşıyorum", "New York'ta", "NY #"

karakter seviyesi biramlar (n için 2): "#I", "I #", "#l", "li", "iv", "ve", "e #", "#i", "in", "n#", "#N", "NY", "Y#"

Bu n-gram parça dizisine sahip olduğunuzda, kopyaları atar ve frekansı belirten her parça için bir sayaç eklersiniz:

kelime seviyesi bigramları:

karakter seviyesi bigramları:

Doğru mu?

Ayrıca, n-gramlarla neler yapabileceğiniz hakkında daha fazla bilgi edinmek istiyorum:

  • n-gram kullanarak bir metnin dilini nasıl tespit edebilirim?
  • İki dilli bir derleminiz olmasa bile n-gram kullanarak makine çevirisi yapmak mümkün müdür?
  • Bir spam filtresi (spam, jambon) nasıl oluşturulur? n-gramları Bayes filtresiyle birleştirin mi?
  • Bir konuyu nasıl bulabilirim? Örneğin: basketbol veya köpeklerle ilgili bir metin var mı? Yaklaşımım ("köpekler" ve "basketbol" için Wikipedia makalesiyle aşağıdakileri yapın): her iki belge için n-gram vektörlerini çizin, normalleştirin, Manhattan/Öklid mesafesini hesaplayın, sonuç 1'e ne kadar yakınsa, o kadar yüksek benzerlik olacak

Başvurum hakkında, özellikle sonuncusu hakkında ne düşünüyorsunuz?

Umarım bana yardım edebilirsin. Şimdiden teşekkürler!

2 cevap

Kelime n-gramı, karakter trigramları gibi bir şeyin daha iyi sonuçlar verebileceği olası dil tanımı istisnası dışında, bahsettiğiniz metin analizi uygulamalarının çoğu için genellikle daha yararlı olacaktır. Etkili bir şekilde, ilgilendiğiniz her dilde metin gövdesi için bir n-gram vektörü oluşturacak ve ardından her derlemdeki trigram frekanslarını, sınıflandırdığınız belgedekilerle karşılaştıracaksınız. Örneğin, trigramın İngilizce'de Almanca'dan çok daha sık görünmesi muhtemeldir ve bir miktar istatistiksel korelasyon sağlayacaktır. N-gram belgelerine sahip olduğunuzda, daha fazla analiz için birçok algoritma, Baysian Filtreleri, N En Yakın Komşu, Destek Vektör Makineleri vb.

Bahsettiğiniz uygulamalar arasında, makine çevirisi muhtemelen en zorlayıcı olanıdır, çünkü n-gram tek başına sizi çok ileriye götürmez. Bir girdi dosyasını n-gram gösterimine dönüştürmek, verileri daha fazla özellik ayrıştırma için bir biçime koymanın bir yoludur, ancak birçok bağlamsal bilgiyi kaybettiğinizde çeviri için yararlı olmayabilir.

Unutulmaması gereken bir nokta, boyutların eşleşmemesi durumunda bir belge için bir vektör ve başka bir belge için bir vektör oluşturmanın yeterli olmadığıdır. Yani, vektördeki ilk giriş bir belgede olamaz ve diğerinde olabilir veya algoritmalar çalışmayacaktır. Çoğu belge ilgilendiğiniz n-gramdan fazlasını içermeyeceğinden, sonunda gibi vektörler elde edeceksiniz. Bu "astar" ayrıca, analizinize hangi ngramları dahil edeceğinizi önceden belirlemenizi gerektirir. Genellikle bu, neyin tutulacağına karar vermek için çeşitli n-gramların istatistiksel önemine karar vermek için iki geçişli bir algoritma olarak uygulanır. Daha fazla bilgi için Google "özellik seçimi".

Word tabanlı n-gram artı vektör makineleri desteği, bir konuyu tanımlamanın harika bir yoludur, ancak bir sınıflandırıcı hazırlamak için "konu içi" ve "konu dışı" konulara önceden sınıflandırılmış büyük bir metin külliyatına ihtiyacınız vardır. citeeerx gibi bir sitede bu soruna çeşitli yaklaşımları açıklayan çok sayıda araştırma makalesi bulacaksınız. Bu soruna öklid mesafesi yaklaşımını önermem, çünkü istatistiksel anlamlılığa dayalı olarak bireysel n-gramları ağırlıklandırmaz, bu nedenle , a , is ve of öğelerini içeren iki belge iki belgeden daha iyi bir eşleşme olarak kabul edilir, hangi Baysian dahil. N-gram ilginizden durdurma kelimelerini kaldırmak, bunu biraz iyileştirecektir.

n-gramların tanımı konusunda haklısın.

Arama tipi uygulamalar için kelime seviyesi n-gramlarını kullanabilirsiniz. Karakter seviyesi n-gramları, metnin kendisini ayrıştırmak için daha fazla kullanılabilir. Örneğin, bir metnin dilini belirlemek için, yerleşik dil frekanslarına karşı harf frekanslarını kullanırdım. Yani, metin yaklaşık olarak bu dilde harflerin görülme sıklığına karşılık gelmelidir.

PHP'deki kelimeler için n-gramer belirteci strtok kullanılarak yapılabilir:

Karakterler için bölmeyi kullanın:

Daha sonra diziyi istediğiniz sayıda n-grama bölebilirsiniz.

Bayes filtrelerinin, n-gram'larla birlikte kullanılabilen spam filtreleri olarak kullanılmak üzere eğitilmesi gerekir. Ancak, öğrenmesini sağlamak için ona çok fazla girdi vermeniz gerekir.

Son yaklaşımınız, sayfanın içeriğini öğrendiği için kulağa hoş geliyor... yine de bunu yapmak oldukça zor, ancak n-gram bunun için iyi bir başlangıç ​​noktası gibi görünüyor.