N-gramm. Belső optimalizálás javítása a versenytársak segítségével Nézze meg, mi az "N-gram" más szótárakban

N-gramm használatával

Az N-gramok általános használata

  • adatok kinyerése a Földről az űrből készült műholdképsorozatok csoportosításához, hogy aztán eldöntsék, a Föld mely részei vannak a képen,
  • genetikai szekvenciák keresése,
  • a genetika területén annak meghatározására használják, hogy melyik állatfajtól gyűjtenek DNS-mintákat,
  • számítógépes tömörítésnél,
  • N-gramok használatával rendszerint a hanggal kapcsolatos adatok indexelésre kerülnek.

Az N-grammokat a természetes nyelvi feldolgozásban is széles körben használják.

N-gramok használata természetes nyelvi feldolgozási igényekhez

A természetes nyelvi feldolgozás területén az N-grammokat elsősorban valószínűségi modelleken alapuló előrejelzésre használják. Az N-gram modell az N-gram utolsó szava valószínűségét számítja ki, ha az összes előző ismert. Amikor ezt a megközelítést alkalmazzuk egy nyelv modellezésére, feltételezzük, hogy az egyes szavak megjelenése csak az előző szavaktól függ.

Az N-gramok másik alkalmazása a plágium kimutatása. Ha a szöveget több apró, n-grammal ábrázolt töredékre osztja, könnyen összehasonlíthatók egymással, és így megkaphatja a szabályozott dokumentumok hasonlóságának mértékét. Az N-gramokat gyakran sikeresen használják szöveg és nyelv kategorizálására. Emellett olyan függvények készítésére is használhatók, amelyek szöveges adatokból ismeretszerzést tesznek lehetővé. Az N-gramok használatával hatékonyan találhatunk jelölteket a hibásan írt szavak helyettesítésére.

Google kutatási projektek

A Google kutatóközpontjai számos kutatáshoz és fejlesztéshez használtak N-gram modelleket. Ezek közé tartoznak az olyan projektek, mint a statisztikai fordítás egyik nyelvről a másikra, a beszédfelismerés, a helyesírás-javítás, az információ kinyerése stb. E projektek céljaira több billió szót tartalmazó korpuszszövegeket használtak fel.

A Google úgy döntött, hogy létrehozza saját oktatási épületét. A projekt neve Google teracorpus, és 1 024 908 267 229 szót tartalmaz nyilvános webhelyekről.

Módszerek n-gramok kinyerésére

Az N-gramok gyakori használata különféle feladatok megoldására, megbízható és gyors algoritmus szükséges ezeknek a szövegből való kiemeléséhez. Egy megfelelő n-gram kivonatoló eszköznek képesnek kell lennie korlátlan szövegmérettel dolgozni, gyorsan kell dolgoznia és hatékonyan kell kihasználnia a rendelkezésre álló erőforrásokat. Számos módszer létezik az N-gramok szövegből való kinyerésére. Ezek a módszerek különböző elveken alapulnak:

Megjegyzések

Lásd még


Wikimédia Alapítvány. 2010 .

  • n-tv
  • N-kadherin

Nézze meg, mi az "N-gram" más szótárakban:

    GRAMM- (francia gramme, a görög gramma vonásból). francia egység. tömeg \u003d 1 köbcentiméter desztillált víz tömege \u003d 22,5 orosz. megoszt. Az orosz nyelvben szereplő idegen szavak szótára. Chudinov A.N., 1910. GRAM súlymértékegység Franciaországban ... Orosz nyelv idegen szavak szótára

    gramm- gramm, nemzetség. pl. gramm és megengedett (szóbeli beszédben a számok után) gramm. Száz gramm (gramm). A nemzetség új formájának védelmében. ügy pl. grammszámot az orosz nyelvű író, K. Csukovszkij ismerője készítette. Íme, amit a "Living as Life" című könyvében írt: ... ... A kiejtési és stressz-nehézségek szótára modern orosz nyelven

    GRAMM- GRAM, gramm, férj. (görög gramma jelből, betűből). A tömeg alapegysége a metrikus rendszerben, amely megegyezik 1 köbcentiméter víz tömegével. Egy gramm súlya körülbelül 1/400 font. ❖ Gramatom (fiz.) egy anyag atomtömegének megfelelő grammok száma. ... ... Usakov magyarázó szótára

    gramm-röntgen- gramm röntgen / n, gramm röntgen / be, rúd. pl. gramm roentgen és gramm roentgen... összevont. Egymástól. Kötőjelen keresztül.

    gramm- Nagyi, ez az egyszerű szó nem szerepelhetett volna a hibaszótárban, ha nem két körülmény; először is, ha abszolút helyes nyelvezettel akarsz mutogatni, akkor a boltba érkezve kábítsd el az eladót a megfelelővel: Mérj kétszáz grammot (nem ... ... Orosz nyelvi hibák szótára

    GRAM-ATOM- GRAM ATOM, annak az elemnek a mennyisége, amelynek tömege grammban megegyezik az ATOM TÖMEGÉVEL. Helyére az SI egységnyi mól került. Például egy gramm hidrogénatom (H, atomtömeg = 1) egyenlő egy grammal. b>GRAM-EKVIVALENTS, ennek tömege grammban… … Tudományos és műszaki enciklopédikus szótár

    GRAMM- GRAM, ah, nemzetség. pl. grammok és grammok, férj. Tömegegység a decimális mértékrendszerben, egy ezred kilogramm. Egy uncia (nem) semmi (köznyelv) egyáltalán nem, egyáltalán nem. Ennek az embernek (nincs) egy csepp lelkiismerete. | adj. gramm, oh, oh. Magyarázó ...... Ozhegov magyarázó szótára

    gramm- de; pl. nemzetség. gramm és gramm; m [francia. gramme] Tömegegység a metrikus rendszerben, egy ezred kilogramm. ◊ Nincs (egyetlen) gramm sem. Egyáltalán nem, egyáltalán nem. Akiben l. egy csepp hazugság sem. Senkinek egy csepp lelkiismerete sincs. * * * gramm (francia ... enciklopédikus szótár

    Gramm Zenob Theophilus- (Gramme) (1826 1901), villamosmérnök. Belgiumban született, Franciaországban dolgozott. Szabadalmat kapott egy praktikus, gyűrű alakú elektromos generátorra (1869). Megalapította az elektromos gépek ipari gyártását. * * * GRAM Zenob… … enciklopédikus szótár

    gramm atom- az anyag mennyisége grammban, számszerűen megegyezik az atomtömegével. A kifejezés használata nem javasolt. Az SI-ben az anyag mennyiségét mólokban fejezzük ki. * * * GRAM ATOM GRAM ATOM, az anyag mennyisége grammban, számszerűen megegyezik az atomtömegével (lásd ... enciklopédikus szótár

    gramm molekula- az anyag mennyisége grammban, számszerűen megegyezik molekulatömegével. A kifejezés használata nem javasolt. Az SI-ben az anyag mennyiségét mólokban fejezzük ki. * * * GRAM MOLEKULA GRAM MOLEKULA, egy anyag mennyisége grammban, számszerűen megegyezik a ... ... enciklopédikus szótár

Szemantikai mag

Az oldal sikeres fejlesztése és láthatóságának növelése érdekében a modern valóságban folyamatosan bővíteni kell a szemantikai magot. A növekedés egyik legjobb módja a versenytársak kulcsszavainak összegyűjtése.

Ma már nem nehéz megszerezni a versenytársak szemantikáját, mert. Számos szolgáltatás létezik, fizetős és ingyenes is.

Ingyenes lista:

— megaindex.ru — Webhely láthatósági eszköz

- xtool.ru - egy jól ismert szolgáltatás, amely megmutatja azokat a kulcsszavakat is, amelyekre az oldal rangsorolódik

Fizetettek listája:

— spywords.ru — alkalmas a Yandex és a Google számára

- semrush.ru - csak a Google-ra összpontosít

— prodvigator.ua — a spywords.ru ukrán analógja

A szolgáltatások mellett manuális módszert is használhat, amely a cím és a leírás n-grammokra való felosztásán alapul, aminek eredményeként a kimeneten egy további kifejezéslista jelenik meg.

N-gram - n elemből álló sorozat. A gyakorlatban az N-gram szósorozatként gyakoribb. Két egymást követő elem sorozatát gyakran nevezik digram, három elemből álló sorozatot nevezünk trigram. Legalább négy vagy több elemet N-grammal jelöltünk meg, N helyébe az egymást követő elemek száma kerül.

Fontolja meg ezt a technikát lépésről lépésre:

- Töltsd fel a versenyzők címét (leírását). Megtehető a Screaming Frog SEO-val.

- A szövegszerkesztőben megtisztítjuk a kapott listát a beszédrészektől, írásjelektől és egyéb szeméttől. A "keresés és csere" funkciót használom a szövegszerkesztő fenséges szövegében (ctrl+H gyorsbillentyű), reguláris kifejezésekkel:

- Válassza ki a kívánt n-grammot, és állítsa be a frekvenciát legalább egyre. A legjobb lehetőség a trigramok és a 4 grammok:

- A következő eredményt kapjuk:

Oszlopszámolaz ismétlések számát mutatjan-gramm, oszlopfrekvencia - gyakoriságn- gramm.

Miután megkaptuk a kifejezések listáját, elemeznünk kell azt, és ki kell választani a megfelelő kulcsszavakat a szemantikai mag kiterjesztéséhez. További részletek blogunk megfelelő részében találhatók.

Kérelmek csoportosítása

Nagyon fontos megérteni, hogyan csoportosul a versenytársak szemantikai magja, mert ez segít a kulcskifejezések helyes elosztásában a webhely oldalain.

Ehhez, miután elkészítettük a lekérdezések teljes listáját, meg kell szereznünk a versenytársak releváns oldalait és pozícióit (használhatja a seolib.ru szolgáltatást), majd összehasonlítani kell a csoportosításunkkal. Ha azt látja, hogy egy versenytársnak jó pozíciói vannak, és ugyanakkor a csoportosítása eltér a miénktől (például egy versenytárs kérései különböző oldalakon oszlanak meg, míg a miénk ugyanazokat a kéréseket egy oldalon), akkor figyelni kell ezt, és módosítsa webhelye céloldalait .

Nézzünk egy kis példát egy feltételes webhely és a versenytárs csoportosításának összehasonlítására.

Amint a táblázatból látható, a site.ru minden kulcsszóhoz egyetlen céloldallal rendelkezik. Egy versenytársnál különböző oldalak rangsorolják ugyanazokat a lekérdezéseket, és a TOP vagy ahhoz közeli pozíciókat foglalnak el. Ennek alapján arra a következtetésre juthatunk, hogy a site.ru csoportosítását felül kell vizsgálni, különösen külön oldalt kell létrehozni a „homlokzat” szóval ellátott kulcsmondatokhoz.

Szöveg minősége

Az első és legfontosabb dolog, amire figyelni kell a versenytársak szövegeinek elemzésekor, nem a mennyiségi komponensre (előfordulások száma, szöveghosszúság stb.), hanem a minőségi vagy szemantikai komponensre kell figyelni – hogy mennyire hasznosak az információk, mit kínál a versenyző, ill. hogyan csinálja.

Nézzünk néhány példát.

Tegyük fel, hogy virágot szállít, és a főoldalon a szövegben garantálja a frissességüket. Például így:

Virágküldő szolgáltatáswebhely. hugarantálja a csokrok biztonságát még a hideg évszakban is.

Íme egy példa az egyik versenytárstól:

Illatos kompozíciókat érdemes tőlünk rendelni, mert 100%-os pénzvisszafizetési garanciát vállalunk, ha a virágok frissessége kétséges.

A versenytárs garanciáját pénz fedezi, ami jelentősebb, mint egy absztrakt garancia.

Vegyünk egy másik példát - egy online áruház "kerámia csempe" kategóriájának oldalán található szöveget:

Ez a szöveg nem hordoz semmilyen hasznos szemantikai terhelést, szilárd vizet. Valószínűleg az oldalra érkező és vásárlási döntést hozó személy szeretné megismerni a termék előnyeit és a lehetséges konfigurációkat, helyette értelmetlen karakterkészletet kap.

Most nézzük egy versenyző szövegét:

Ez a szöveg hasznosabb, mert tömören közli a csempék közötti különbségeket, és segít megérteni, hogyan kell kiválasztani a megfelelőt.

Így a versenytársak szövegeit a sajátoddal összehasonlítva sok hasznos információhoz juthatsz, amelyek segítségére lesznek a szövegíróknak a TOR összeállítása során.

A szövegek relevanciája

Folytatva a szövegek minőségének témáját, nem lehet nem érinteni azok relevanciáját. Ma ahhoz, hogy a szöveg releváns legyen, nem elég csak kulcsszavakat feltüntetni. Ahhoz, hogy az oldal relevanciáját növelje, ugyanakkor ne legyen spam jellegű a szöveg, a témához kapcsolódó szavakat kell használni.

Egy szöveg lekérdezés szempontjából való relevanciájának felmérésekor a kereső nem csak a kulcsszavak jelenlétét, hanem további szavakat is elemzi, így határozza meg a szöveg jelentését. Például, ha egy elefántról írunk szöveget, akkor a kapcsolódó szavak jöhetnek szóba: „törzs”, „agyar”, „természet”, „állatkert”. Ha a sakkfiguráról szóló szöveg „elefánt”, akkor ezek a szavak: „figura”, „csekk”, „királynő” stb.

Az igényeinek leginkább megfelelő szólistát a versenytársak szövegeiben kaphatja meg. Ehhez a következő lépéseket kell végrehajtania:

— A kívánt nagyfrekvenciás kéréshez a TOP-10-ből az összes szöveget különböző szövegfájlokba másoljuk.

- Eltávolítjuk a szövegekből a beszédrészeket, az írásjeleket és a számokat (korábban).

- Sorolja fel a szavakat egy sorban - használja a "keresés és csere" funkciót reguláris kifejezésekkel. Cserélje ki a szóközt a következőre: \n.

- Ezután minden szóalakot át kell hoznia a normál szótári alakba (lemma). Ehhez használhatja a https://tools.k50project.ru/lemma/ szolgáltatást. A mezőbe írja be a szavak listáját az egyes fájlokból külön-külön, és kattintson a "lemmetizálás és kiadás csv-táblázatként" gombra. Az eredmény 10 fájl legyen lemmetizált szavakkal.

- Minden fájlban eltávolítjuk az ismétlődő szavakat.

- Kombinálja a szavakat fájlokból egy listába.

— Most létre kell hoznunk egy frekvenciaszótárt. Ehhez adja hozzá az eredményül kapott listát a https://tools.k50project.ru/lemma/ szolgáltatáshoz, és kattintson a "Frekvenciaszótár készítése CSV-formátumban" lehetőségre.

- Elkészült a szavaink listája:

Ha a gyakoriság 10, akkor ezt a szót mind a 10 oldalon használták, ha 8, akkor csak 8-on stb. Javasoljuk a leggyakrabban előforduló szavak használatát, azonban a ritka szavak között érdekes megoldások is találhatók.

Ilyen egyszerű módon megkaphatja a tematikus szavak listáját a szövegírók számára készült TOR összeállításához.

Amint látja, a versenytársak nagyon fontos információforrást jelentenek, amelyek segítségével jobban optimalizálhatja webhelyeit. Ebben a cikkben korántsem minden szempontra tértem ki, és a jövőben is arról fogok írni, hogy mi a hasznos, és hogyan tanulhatsz a versenytársaidtól.

Feliratkozás a hírlevélre Ezeket az algoritmusokat arra tervezték, hogy korábban ismeretlen szövegeken keressenek, és használhatók például szövegszerkesztőkben, dokumentumnézegetőkben vagy webböngészőkben az oldalon belüli keresésre. Nem igényelnek szöveg előfeldolgozását, és folyamatos adatfolyammal működhetnek.

Lineáris keresés

Egy adott metrika (például a Levenshtein metrika) egyszerű szekvenciális alkalmazása a beviteli szöveg szavaira. Ha határértékkel rendelkező mérőszámot használ, ez a módszer lehetővé teszi az optimális teljesítmény elérését. De ugyanakkor annál több k, annál hosszabb a futási idő. Aszimptotikus időbecslés - O(kn).

Bitap (más néven Shift-Or vagy Baeza-Yates-Gonnet, és módosítása a Wu-Manberből)

Algoritmus bitapés annak különféle módosításait leggyakrabban indexelés nélküli fuzzy keresésre használják. Változatát például az agrep unix segédprogram használja, amely a normál grephez hasonló funkciókat hajt végre, de támogatja a keresési lekérdezés hibáit, és még korlátozott lehetőségeket is biztosít a reguláris kifejezések használatához.

Ennek az algoritmusnak az ötletét először a polgárok javasolták Ricardo Baeza-YatesÉs Gaston Gonnet, kapcsolódó cikket publikál 1992-ben.
Az algoritmus eredeti verziója csak a karaktercserékkel foglalkozik, és valójában a távolságot számítja ki Hamming. De egy kicsit később sun wuÉs Udi Manber ennek az algoritmusnak a módosítását javasolta a távolság kiszámításához Levenshtein, azaz beszúrások és törlések támogatását hozta, és ennek alapján fejlesztette ki az agrep segédprogram első verzióját.






Eredmény értéke

Ahol k- hibák száma, j- karakterindex, s x - karaktermaszk (a maszkban az egyes bitek a kérésben szereplő adott karakter pozícióinak megfelelő pozíciókban helyezkednek el).
A lekérdezéssel való egyezést vagy nem egyezést az eredményül kapott R vektor legutolsó bitje határozza meg.

Ennek az algoritmusnak a nagy sebességét a számítások bitpárhuzamossága biztosítja - egy művelettel egyszerre 32 vagy több biten lehet számításokat végezni.
Ugyanakkor a triviális megvalósítás támogatja a 32-nél nem hosszabb szavak keresését. Ezt a korlátozást a szabványos típus szélessége határozza meg. int(32 bites architektúrákon). Használhat nagy méretű típusokat is, de ez bizonyos mértékig lelassíthatja az algoritmust.

Annak ellenére, hogy ennek az algoritmusnak aszimptotikus futási ideje O(kn) megegyezik a lineáris módszerrel, sokkal gyorsabb a hosszú lekérdezések és a hibák száma k 2 felett.

Tesztelés

A tesztelést 3,2 millió szavas szövegen végezték el, az átlagos szóhossz 10 volt.
Pontos keresés
Keresési idő: 3562 ms
Keresés a Levenshtein mérőszám segítségével
Keresés időpontja: k=2: 5728 ms
Keresés időpontja: k=5: 8385 ms
Keresés a Bitap algoritmus használatával Wu-Manber módosításokkal
Keresés időpontja: k=2: 5499 ms
Keresés időpontja: k=5: 5928 ms

Nyilvánvaló, hogy a metrikát használó egyszerű keresés a Bitap algoritmussal ellentétben nagymértékben függ a hibák számától. k.

Ha azonban nagy mennyiségű változatlan szöveg kereséséről van szó, a keresési idő jelentősen csökkenthető az ilyen szövegek előfeldolgozásával, ún. indexelés.

Fuzzy keresési algoritmusok indexeléssel (offline)

Az indexeléssel rendelkező fuzzy keresési algoritmusok jellemzője, hogy az index a forrásszövegből vagy egy adatbázis rekordlistájából összeállított szótár szerint épül fel.

Ezek az algoritmusok különböző megközelítéseket alkalmaznak a probléma megoldására – egyesek redukciót használnak a pontos kereséshez, mások a metrika tulajdonságait használják különféle térbeli struktúrák felépítésére, és így tovább.

Mindenekelőtt az első lépésben a forrásszövegből egy szótárat építünk, amely tartalmazza a szavakat és a szövegben elfoglalt helyzetüket. Ezenkívül megszámolhatja a szavak és kifejezések gyakoriságát a keresési eredmények minőségének javítása érdekében.

Feltételezzük, hogy az index, akárcsak a szótár, teljesen be van töltve a memóriába.

A szótár taktikai és technikai jellemzői:

  • Forrásszöveg - 8,2 gigabájtnyi anyag a Moshkov-könyvtárból (lib.ru), 680 millió szó;
  • Szótár mérete - 65 megabájt;
  • Szavak száma - 3,2 millió;
  • A szó átlagos hossza 9,5 karakter;
  • Négyzetgyök szóhossz (hasznos lehet egyes algoritmusok kiértékelésekor) - 10,0 karakter;
  • Ábécé - nagybetűk A-Z, E nélkül (egyes műveletek egyszerűsítése érdekében). A nem alfabetikus karaktereket tartalmazó szavak nem szerepelnek a szótárban.
A szótár méretének a szövegmennyiségtől való függése nem szigorúan lineáris - egy adott kötetig egy alapszókeret alakul ki, amely 500 ezer szónál 15%-tól 5 milliónál 5%-ig terjed, majd a függőség lineárishoz közelít. , lassan csökken, és 680 millió szónál eléri a 0,5%-ot. A növekedés későbbi fenntartását nagyrészt ritka szavak biztosítják.

Minta bővítési algoritmus

Ezt az algoritmust gyakran használják a helyesírás-ellenőrző rendszerekben (azaz a helyesírás-ellenőrzőkben), ahol kicsi a szótár mérete, vagy ahol nem a sebesség a fő kritérium.
A fuzzy keresési probléma pontos keresési problémára való redukálásán alapul.

Az eredeti lekérdezésből a "hibás" szavak halmaza épül fel, amelyek mindegyikére pontos keresést hajtanak végre a szótárban.

Futási ideje erősen függ a k hibák számától és az A ábécé méretétől, bináris szótár használata esetén pedig:

Például mikor k = 1és 7 hosszúságú szavak (például "Krokodil") az orosz ábécében, a hibás szavak halmaza körülbelül 450 méretű lesz, vagyis 450 szótári lekérdezést kell végrehajtani, ami teljesen elfogadható.
De már at k = 2 egy ilyen készlet mérete több mint 115 ezer opció lesz, ami egy kis szótár teljes felsorolásának felel meg, vagy esetünkben 1/27, és ezért a futási idő meglehetősen hosszú lesz. Ugyanakkor nem szabad elfelejteni, hogy ezeknek a szavaknak mindegyikéhez pontos egyezést kell keresni a szótárban.

Sajátosságok:
Az algoritmus könnyen módosítható úgy, hogy tetszőleges szabályok szerint "hibás" változatokat generáljon, ráadásul nem igényel semmilyen előzetes szótárfeldolgozást, és ennek megfelelően további memóriát.
Lehetséges fejlesztések:
Nem a "hibás" szavak teljes halmazát lehet generálni, hanem csak azokat, amelyek a legvalószínűbbek egy valós helyzetben, például olyan szavakat, amelyek figyelembe veszik a gyakori helyesírási vagy gépelési hibákat.

Ez a módszer már régóta létezik, és a legszélesebb körben alkalmazott, mivel megvalósítása rendkívül egyszerű és meglehetősen jó teljesítményt nyújt. Az algoritmus a következő elven alapul:
"Ha az A szó megegyezik a B szóval, több hiba is van, akkor nagy valószínűséggel lesz legalább egy közös, N hosszúságú részkarakterláncuk."
Ezeket az N hosszúságú részsztringeket N-grammoknak nevezzük.
Az indexelés során a szót ilyen N-gramokra osztják, majd ez a szó bekerül az egyes N-gramok listáiba. A keresés során a lekérdezés is N-grammokra oszlik, és mindegyiknél sorra keresik az ilyen részsztringet tartalmazó szavak listáját.

A gyakorlatban leggyakrabban használt trigramok - 3 hosszúságú részstringek. A nagyobb N érték választása a minimális szóhossz korlátozásához vezet, amelynél már lehetséges a hibadetektálás.

Sajátosságok:
Az N-gram algoritmus nem talál minden lehetséges hibás szót. Ha vesszük például a VOTKA szót, és trigramokra bontjuk: IN T KA → VO T RÓL RŐL T NAK NEK T KA - láthatja, hogy mindegyik tartalmazza a T hibát. Így a "VODKA" szó nem található, mivel nem tartalmazza ezeket a trigramokat, és nem kerül bele a megfelelő listákba. Így minél rövidebb egy szó és minél több hibát tartalmaz, annál nagyobb az esélye, hogy nem kerül be a lekérdezés N-grammjainak megfelelő listákba, és nem lesz jelen az eredményben.

Mindeközben az N-gram módszer teljes mozgásteret hagy a saját, tetszőleges tulajdonságokkal és összetettséggel rendelkező metrikák használatára, de ezért fizetni kell - használatakor továbbra is szekvenciálisan fel kell sorolni a szótár körülbelül 15%-át, ami meglehetősen sok a nagy szótárak számára.

Lehetséges fejlesztések:
Lehetőség van az N-gramok hash-táblázatainak felosztására a szavak hossza és az N-gram szóban elfoglalt helye szerint (1. módosítás). Mennyiben nem térhet el nagyobb mértékben a keresett szó és a lekérdezés hossza k, és az N-gramm pozíciói egy szóban legfeljebb k-val térhetnek el egymástól. Így csak azt a táblázatot kell ellenőrizni, amely megfelel ennek az N-gramnak a szóban elfoglalt helyének, valamint k táblázatot a bal oldalon és k táblázatot a jobb oldalon, azaz. Teljes 2k+1 szomszédos asztalok.

Tovább csökkentheti a szkenneléshez szükséges készlet méretét, ha a táblázatokat szóhossz szerint felosztja, és hasonlóképpen csak a szomszédos táblákat nézi át. 2k+1 táblázatok (2. módosítás).

Ezt az algoritmust L. M. Boytsov cikke írja le. Aláírás kivonatolása. Ez egy szó "struktúrájának" meglehetősen nyilvánvaló ábrázolásán alapul, bitek formájában, amelyet hash-ként (aláírásként) használnak egy hash-táblázatban.

Az indexelés során minden szóhoz kiszámolják az ilyen kivonatokat, és beírják a táblázatba a szótári szavak listájának ennek a hash-nek való megfelelését. Ezután a keresés során egy hash-t számítanak ki a lekérdezéshez, és kiválogatják az összes szomszédos hash-t, amely legfeljebb k bittel különbözik az eredetitől. Mindegyik kivonat esetében a rendszer megkeresi a megfelelő szavak listáját.

A hash kiszámításának folyamata – a hash minden bitjéhez hozzá van rendelve egy karaktercsoport az ábécéből. 1. bit pozícióban én a hash azt jelenti, hogy az eredeti szó egy karaktert tartalmaz i-thábécé csoportok. A betűk sorrendje a szóban teljesen lényegtelen.

Egy karakter eltávolítása vagy nem változtatja meg a hash értéket (ha még mindig vannak karakterek ugyanabból az ábécécsoportból a szóban), vagy az ennek a csoportnak megfelelő bit 0-ra változik. Ha ugyanilyen módon beszúrjuk, bármelyik bit állítsa 1-re, különben nem történik változás. A karakterek cseréjekor minden kicsit bonyolultabb - a hash vagy egyáltalán nem változhat, vagy 1 vagy 2 pozícióban változhat. A permutálás során egyáltalán nem történik változás, mivel a hash felépítésénél a karakterek sorrendjét nem veszik figyelembe, amint azt korábban említettük. Így a k hiba teljes lefedéséhez legalább módosítani kell 2k kicsit a hashben.

A futási idő átlagosan k "hiányos" (beszúrások, törlések és átültetések, valamint a cserék kis része) hibával:

Sajátosságok:
Tekintettel arra, hogy egy karakter cseréjekor két bit is megváltozhat egyszerre, egy olyan algoritmus, amely például legfeljebb 2 bites torzítást valósít meg egyszerre, valójában nem adja meg a teljes eredményt a karakter hiánya miatt. a szavak jelentős része (a hash méretének az ábécéhez viszonyított arányától függően) két helyettesítéssel (és minél nagyobb a hash mérete, a karaktercsere annál gyakrabban vezet egyszerre két bit torzulásához, és minél kevésbé teljes az eredmény lesz). Ezenkívül ez az algoritmus nem teszi lehetővé az előtagok keresését.

BK fák

fák Burkhard-Keller metrikus fák, az ilyen fák létrehozásának algoritmusai a metrika azon tulajdonságán alapulnak, hogy megfeleljen a háromszög egyenlőtlenségnek:

Ez a tulajdonság lehetővé teszi, hogy a metrikák tetszőleges dimenziójú metrikatereket alkossanak. Az ilyen metrikus terek nem feltétlenül euklideszi, így például a mérőszámok LevenshteinÉs Damerau-Levenshtein forma nem euklideszi tér. Ezen tulajdonságok alapján létrehozhat egy olyan adatstruktúrát, amely egy ilyen metrikus térben keres, ami a Barkhard-Keller fák.

Fejlesztések:
Egyes mérőszámok azon képességét, hogy a távolságot megszorítással számítsák ki, úgy állítsanak be egy felső határt, hogy megegyezzenek a csúcs leszármazottaitól mért maximális távolság és a kapott távolság összegével, ami kissé felgyorsítja a folyamatot:

Tesztelés

A tesztelést Intel Core Duo T2500 (2GHz/667MHz FSB/2MB), 2Gb RAM, OS - Ubuntu 10.10 Desktop i686, JRE - OpenJDK 6 Update 20 frissítésű laptopon végezték.

A tesztelést a Damerau-Levenshtein távolság és a hibák számának felhasználásával végeztük k = 2. Az index mérete a szótárral együtt van megadva (65 MB).

Index mérete: 65 MB
Keresési idő: 320 ms / 330 ms
Az eredmények teljessége: 100%

N-gramm (eredeti)
Index mérete: 170 MB
Index létrehozási idő: 32 s
Keresési idő: 71 ms / 110 ms
Az eredmények teljessége: 65%
N-gramm (1. módosítás)
Index mérete: 170 MB
Index létrehozási idő: 32 s
Keresési idő: 39 ms / 46 ms
Az eredmények teljessége: 63%
N-gramm (2. módosítás)
Index mérete: 170 MB
Index létrehozási idő: 32 s
Keresési idő: 37 ms / 45 ms
Az eredmények teljessége: 62%

Index mérete: 85 MB
Index létrehozási idő: 0,6 s
Keresési idő: 55 ms
Az eredmények teljessége: 56,5%

BK fák
Index mérete: 150 MB
Index létrehozási idő: 120 s
Keresési idő: 540 ms
Az eredmények teljessége: 63%

Teljes

A legtöbb indexelt fuzzy keresési algoritmus nem igazán szublineáris (azaz aszimptotikus futási idejük van O(log n) vagy alacsonyabb), és működési sebességük általában közvetlenül függ attól N. Ennek ellenére számos fejlesztés és fejlesztés lehetővé teszi a kellően rövid futási idő elérését még nagyon nagy mennyiségű szótár mellett is.

Számos változatosabb és nem hatékony módszer is létezik, amelyek többek között a különféle technikák és máshol már alkalmazott technikák adott tantárgyi területhez való adaptálásán alapulnak. E módszerek közé tartozik az előtagfák (Trie) adaptálása fuzzy keresési problémákhoz, amit alacsony hatékonysága miatt figyelmen kívül hagytam. De vannak eredeti megközelítéseken alapuló algoritmusok is, például az algoritmus Maass-Novak, amely ugyan szublineáris aszimptotikus futási idővel rendelkezik, de rendkívül hatástalan az ilyen időbecslés mögött megbúvó hatalmas állandók miatt, amelyek hatalmas indexméret formájában nyilvánulnak meg.

A fuzzy keresési algoritmusok gyakorlati alkalmazása valós keresőkben szorosan összefügg a fonetikus algoritmusokkal, a lexikális tövű algoritmusokkal - egyazon szó különböző szóalakjainak alaprészének kiemelésével (ilyen funkcionalitást például a Snowball és a Yandex mystem biztosít), mint pl. valamint statisztikai információkon alapuló rangsorolás vagy összetett, kifinomult mérőszámok használata.

  • Levenshtein távolság (kivágással és előtag opcióval);
  • Damerau-Levenshtein távolság (kivágással és előtag opcióval);
  • Bitap algoritmus (Shift-OR / Shift-AND Wu-Manber módosításokkal);
  • Mintabővítési algoritmus;
  • N-gram módszer (eredeti és módosításokkal);
  • Aláírás-kivonatolási módszer;
  • BK-fák.
Azt akartam, hogy a kód könnyen érthető legyen, ugyanakkor a gyakorlati használathoz kellően hatékony legyen. Az utolsó levek kipréselése a JVM-ből nem tartozott a feladataim közé. Élvezd.

Érdemes megjegyezni, hogy ennek a témakörnek a tanulmányozása során előálltam néhány saját fejlesztéssel, amelyek lehetővé teszik, hogy az index méretének mérsékelt növekedése és bizonyos korlátozások miatt nagyságrenddel csökkentsem a keresési időt. a mérőszámok megválasztásának szabadsága. De ez egy teljesen más történet.


Definíció Példa Alkalmazások N-gram nyelvi modell létrehozása n-gram valószínűség számítása Tanítókorpusz ritkaságának kiküszöbölése o Add-one Simítás o Witten-Bell diszkontálás o Good-Turing diszkontálás o Katzs Backoff o Törölt interpoláció N-gram nyelvi modell becslése segítségével entrópia Tartalom


N-gram (angolul N-gram) valamely sorozat N elemének részsorozata. Vegye figyelembe a szavak sorozatát. Unigramok macska, kutya, ló,... Biggramok kis macska, nagy kutya, erős ló,... Trigramok kis macska eszik, nagy kutya ugat, erős ló fut,... Definíció


Példák alkalmazott feladatokra Beszédfelismerés. Néhány különböző írásmódú szót ugyanúgy ejtenek ki. A feladat a megfelelő szó kiválasztása a szövegkörnyezetben. Adott témában szövegek generálása. Példa: Yandex.Abstracts. Keressen szemantikai hibákat. Finomítani próbál - igaz, szintaktikailag, szemantikailag nem. Megpróbálja kideríteni – igaz. a kiderítés próbálkozása sokkal gyakrabban található meg az angol szövegekben, mint a finomítás, ami azt jelenti, hogy ha rendelkezésre állnak statisztikák, akkor megtalálhatja és kiküszöbölheti ezt a fajta hibát.


Nyelvi modell készítése n-gramokból A felsorolt ​​alkalmazott problémák megoldásához szükséges az N-gramok nyelvi modelljének elkészítése. Modell létrehozásához a következőket kell tennie: 1. Számítsa ki az n-gramok valószínűségét a tanító korpuszban. 2. Javítsa ki a hajótest ritkasági problémáját az élsimítási módszerek egyikével. 3. Értékelje az n-gramok eredő nyelvi modelljének minőségét entrópia segítségével!


N-gramok valószínűségének kiszámítása (1) A tanító korpuszban bizonyos n-gramok eltérő gyakorisággal fordulnak elő. Minden n-gram esetében meg tudjuk számolni, hogy hányszor fordul elő a korpuszban. A kapott adatok alapján felállítható egy valószínűségi modell, amellyel azután becsülhető az n-gramm valószínűsége néhány tesztkorpuszban.


N-gramm valószínűségének kiszámítása (2) Tekintsünk egy példát. A korpusz egy mondatból álljon: Piknikeztek a medence mellett, majd visszafeküdtek a fűbe és nézték a csillagokat. Válasszunk n-grammokat. Unigramok: Ők, piknikeztek, … Biggramok: Piknikeztek, piknikeztek, a, … Trigramok Kiválogatták, kiválogatták, a medence mellett,…


N-gramm valószínűségének kiszámítása (3) Most már lehetséges n-grammokat számolni. Minden kiválasztott bi- és trigram egyszer fordul elő a korpuszban. Minden unigram, a the szó kivételével, szintén egyszer fordul elő. A szó háromszor fordul elő. Most, hogy tudjuk, hogy az egyes n-gramok hányszor fordulnak elő, felállíthatjuk az n-gramok valószínűségi modelljét. Unigramok esetén az u szó valószínűsége a következő képlettel számítható ki: Például a szóra a valószínűség 3/16 lesz (mivel 16 szó van a korpuszban, ebből 3 a szó) . Az u szó előfordulási gyakorisága az edzéskorpuszban Piknikeztek a medence mellett, majd visszafeküdtek a fűbe és nézték a csillagokat


1, a valószínűséget némileg másként tekintjük. Tekintsük a bigramok esetét: legyen szükséges kiszámítani a készlet bigramjának valószínűségét. Ha minden bigram szót valamilyen eseménynek tekintünk, akkor hinni" title="(!LANG:N-gram valószínűségszámítás (4) Az n-grammoknál, ahol n>1, a valószínűséget némileg másképp számítjuk. Tekintsük a bigramok esetét : legyen szükség a pool digramjának kiszámítására Ha a digram minden szavát valamilyen eseménynek tekintjük, akkor hinni" class="link_thumb"> 9 !} N-gramm valószínűségének kiszámítása (4) Az n-grammoknál, ahol n>1, a valószínűség némileg eltérően kerül kiszámításra. Tekintsük a bigramok esetét: legyen szükséges kiszámítani a készlet bigramjának valószínűségét. Ha minden bigram szót valamilyen eseménynek tekintünk, akkor az események halmazának valószínűsége a következő képlettel számítható ki: Így a biggram valószínűsége a pool:, ahol 1, a valószínűséget némileg másként tekintjük. Tekintsük a bigramok esetét: legyen szükséges kiszámítani a készlet bigramjának valószínűségét. Ha minden bigram-szót valamilyen eseménynek tekintünk, akkor "> 1-nek hinni, a valószínűséget némileg másként tekintjük. Tekintsük a bigramok esetét: legyen szükséges kiszámítani a készlet bigramjának valószínűségét. Ha minden nagyszót úgy tekintünk, mint valamilyen eseményt, akkor az események halmazának valószínűsége a következő képlettel számítható ki: Így a biggram valószínűsége a pool:, ahol "> 1, a valószínűséget kicsit másképp számítjuk ki. Tekintsük a bigramok esetét: legyen szükséges kiszámítani a készlet bigramjának valószínűségét. Ha minden bigram szót valamilyen eseménynek tekintünk, akkor hinni" title="(!LANG:N-gram valószínűségszámítás (4) Az n-grammoknál, ahol n>1, a valószínűséget némileg másképp számítjuk. Tekintsük a bigramok esetét : legyen szükség a pool digramjának kiszámítására Ha a digram minden szavát valamilyen eseménynek tekintjük, akkor hinni"> title="N-gramm valószínűségének kiszámítása (4) Az n-grammoknál, ahol n>1, a valószínűség némileg eltérően kerül kiszámításra. Tekintsük a bigramok esetét: legyen szükséges kiszámítani a készlet bigramjának valószínűségét. Ha a digram minden szavát valamilyen eseménynek tekintjük, akkor hinni"> !}


N-gramm valószínűségének kiszámítása (5) Tekintsük most egy tetszőleges n-gram (vagy egy n hosszúságú mondat) valószínűségének számítását. A biggramok esetét kibővítve megkapjuk az n-gramok valószínűségi képletét Így a mondat valószínűségének kiszámítása a mondatot alkotó N-grammok feltételes valószínűségének kiszámítására redukálódik:




A korpusz ritkaságának kiküszöbölése (1) Az n-gramok egyszerű (simítatlan) nyelvi modelljének problémája: néhány n-gram esetében a valószínűség nagymértékben alulbecsülhető (vagy akár nulla), bár a valóságban (a tesztkorpuszban) ezek n-gramm elég gyakran előfordulhat . Oka: korlátozott képzési korpusz és sajátossága. Megoldás: néhány n-gram valószínűségének csökkentésével növeljük azoknak az n-gramoknak a valószínűségét, amelyek nem fordultak elő (vagy elég ritkán találkoztak) a képzési korpuszban.




Corpus Sparity elimination (3) A ritkaság kiküszöbölésére szolgáló algoritmusokban a következő fogalmak használatosak: Típusok – különböző szavak (szósorozatok) a szövegben. A tokenek a szövegben szereplő összes szó (szósorozat). Piknikeztek a medence mellett, majd visszafeküdtek a fűbe és nézték a csillagokat - 14 típus, 16 jelző





Add-one simítás (4) A módszer erős hibát okoz a számításokban (például az előző dián látható volt, hogy a kínai szó esetében a bigmok száma 8-szorosára csökkent). A tesztek kimutatták, hogy a simítatlan modell gyakran pontosabb eredményeket mutat. Ezért a módszer csak elméleti szempontból érdekes.


Witten-Bell diszkontálás (1) Egy egyszerű ötlet alapján: használja a tanító korpuszban előforduló n-gramokra vonatkozó adatokat az n-grammok hiányának valószínűségének becslésére. A módszer ötlete a tömörítési algoritmusokból származik: kétféle eseményt veszünk figyelembe - találkoztak egy új karakterrel (típussal), és találkoztak egy karakterrel (tokennel). Valószínűségi képlet az összes hiányzó n-gramra (vagyis annak a valószínűsége, hogy a tesztkorpuszban egy olyan n-grammal találkozunk, amely nem volt a betanító korpuszban): N a tokenek száma a tanító korpuszban, T a típusok száma amelyekkel már találkoztunk a képzési korpuszban






Witten-Bell leszámítolás (4) =>=> =>"> =>"> =>" title="(!LANG:Witten-Bell Discounting (4) =>=>"> title="Witten-Bell leszámítolás (4) =>=>"> !}




Good-Turing-leszámítás (1) Ötlet: A nulla alkalommal (c-szer) előforduló n-gramok esetében a pontszám arányos az egyszer előforduló n-grammok számával (c + 1-szer). Vegyünk egy példát: Tegyük fel, hogy 18 halat fogtak. Összesen 6 különböző fajt fogtak, és három fajból csak egy képviselőt fogtak. Meg kell találnunk annak a valószínűségét, hogy a következő hal egy új fajhoz fog tartozni. Összesen 7 faj lehetséges (6 fajt már fogtak).








Katzs Backoff (2) Az α együttható szükséges az N-gramok maradékvalószínűségének helyes eloszlásához az (N-1)-gramok valószínűségi eloszlásával összhangban. Ha nem adja meg az α-t, a becslés hibás lesz, mert az egyenlőség nem teljesül: Az α számítása a jelentés végén található. Nyelvi modell értékelése entrópia segítségével (1) Az entrópia a bizonytalanság mértéke. Az entrópia segítségével meg lehet határozni az N-gramok legmegfelelőbb nyelvi modelljét egy adott alkalmazott feladathoz. Bináris entrópia képlet: Példa: Számítsa ki egy érmefeldobási teszt entrópiáját. Válasz: 1 bit, feltéve, hogy a kísérlet eredménye egyformán valószínű (mindegyik oldal 1/2-es valószínűséggel esik ki).




A nyelvi modell értékelése entrópia segítségével (3) A keresztentrópia a különböző nyelvi modellek összehasonlítására szolgál: Minél közelebb van a H(p,m) keresztentrópia értéke a H(p) valós entrópiához, annál jobb a nyelvi modell: Esetünkben H(p ) a tesztkorpusz entrópiája. m(w) – nyelvi modell (pl. N-gram modell)


Nyelvi modell értékelése entrópia segítségével (4) A nyelvi modell minőségének értékelésére létezik egy másik módszer is, amely az ún. kapcsolódási jelző (zavarodottság). Ötlet: Számítsa ki a teljes tesztkorpusz valószínűségét. A jobb modell nagyobb valószínűséget mutat. perplexitási képlet: Így minél kisebb a zavartság, annál jobb a modell. A zavartság értelmezhető úgy, mint egy adott szó után következő szavak átlagos száma (azaz minél több a zavarodottság, annál nagyobb a kétértelműség, és így annál rosszabb a nyelvi modell). A perplexitás és a bináris entrópia kapcsolata:


Nyelvi modell becslése entrópia segítségével (5) Példaként vegyük figyelembe néhány korpusz perplexitási értékeit, amelyeket az unigramok, a bigramok és a trigramok betanított modelljeivel kapunk: A trigramok esetében a perplexitás a legkisebb, mert Az egyértelműsítést megkönnyíti az összes modell leghosszabb történeti hossza (2-vel egyenlő), a trigramok feltételes valószínűségeinek kiszámításakor. UnigramBigramTrigram Perplexity


Néhány n-gram alkalmazást szeretnék megvalósítani (lehetőleg PHP-ben).

Milyen típusú n-gramok alkalmasabbak a legtöbb célra? Szószint vagy karakter szintű n-gram szint? Hogyan valósítható meg egy n-grammatikai tokenizátor a PHP-ben?

Először is szeretném tudni, mi az az N-gramm. Ez igaz? Én így értem az n-grammot:

Javaslat: "New Yorkban élek."

szószintű birams (2 az n-re): "# I", "Én élek", "élek", "New Yorkban", "NY #"

karakter szintű birams (2 az n-hez): "#I", "I #", "#l", "li", "iv", "ve", "e #", "#i", "in", "n#", "#N", "NY", "Y#"

Ha megvan ez az n-gramos részekből álló tömb, akkor duplikációkat készít, és minden részhez hozzáad egy számlálót, amely meghatározza a gyakoriságot:

szó szintű biggramok:

karakter szintű biggramok:

Ez a helyes?

Továbbá szeretnék többet megtudni arról, hogy mit lehet tenni az n-grammal:

  • Hogyan ismerhetem fel egy szöveg nyelvét n-gramok segítségével?
  • Lehetséges-e gépi fordítás n-grammal akkor is, ha nincs kétnyelvű korpusz?
  • Hogyan készítsünk spamszűrőt (spam, ham)? Kombinálja az n-gramokat Bayes-szűrővel?
  • Hogyan találhatok témát? Például: van szöveg kosárlabdáról vagy kutyákról? Az én megközelítésem (a Wikipédia "kutyák" és "kosárlabda" cikkével a következőket kell tennie): ábrázolja mindkét dokumentum n-gramos vektorait, normalizálja őket, számítsa ki a Manhattan/Euclid távolságot, minél közelebb van az eredmény 1-hez, annál nagyobb a hasonlóság lesz

Mi a véleményed a jelentkezésemről, különösen az utolsóról?

Remélem tud segíteni. Előre is köszönöm!

2 válasz

A Word n-gram általában hasznosabb az Ön által említett szövegelemző alkalmazások többségénél, kivéve a nyelvdefiníciót, ahol valami, például a karaktertrigramok jobb eredményeket adhatnak. Hatékonyan hozzon létre egy n-grammból álló vektort a szövegtörzshez minden érdekelt nyelven, majd hasonlítsa össze az egyes korpuszokban található trigram-gyakoriságokat a besorolandó dokumentumban szereplőkkel. Például a trigram valószínűleg sokkal gyakrabban jelenik meg angolul, mint németben, és bizonyos szintű statisztikai összefüggést biztosítana. Miután megvan az n-gram dokumentum, számos algoritmus közül választhat a további elemzéshez, Baysian Filters, N Nearest Neighbor, Support Vector Machines stb.

Az Ön által említett alkalmazások közül valószínűleg a gépi fordítás a legelterjedtebb, mivel az n-grammok önmagukban nem visznek messzire. A bemeneti fájl konvertálása n-gram ábrázolásra csak egy módja annak, hogy az adatokat formátumba helyezzük a további jellemzők elemzéséhez, de mivel sok kontextuális információt veszít, előfordulhat, hogy nem lesz hasznos a fordításhoz.

Egy dolog, amit meg kell jegyezni, hogy nem elég létrehozni egy vektort egy dokumentumhoz és egy vektort egy másik dokumentumhoz, ha a méretek nem egyeznek. Ez azt jelenti, hogy a vektor első bejegyzése nem lehet az egyik dokumentumban, és egy másikban van, különben az algoritmusok nem működnek. A végén olyan vektorokat fog kapni, mint a , mivel a legtöbb dokumentum nem tartalmaz többet, mint az Önt érdeklő n-gramm. Ez a „bélés” azt is megköveteli, hogy előre meghatározza, mely ngramokat fogja belefoglalni az elemzésébe. Ezt gyakran kétmenetes algoritmusként valósítják meg, hogy először eldöntsék a különböző n-gramok statisztikai szignifikanciáját, hogy eldöntsék, mit tartsanak meg. További információkért a Google "funkciókiválasztása".

A Word-alapú n-gramok, valamint a vektorgépek támogatása nagyszerű módja a téma meghatározásának, de az osztályozó elkészítéséhez nagy mennyiségű szövegre van szükség, amely előre osztályozott "on-topic" és "off-topic" témákba. Számos kutatási dokumentumot találhat, amelyek elmagyarázzák ennek a problémának a különféle megközelítéseit egy olyan webhelyen, mint például a citeseerx. Nem javaslom az euklideszi távolságmegközelítést erre a problémára, mivel az nem súlyozza az egyes n-grammokat a statisztikai szignifikancia alapján, így két olyan dokumentum, amely tartalmazza a , a , is és of karaktereket, jobban illeszkedik, mint két dokumentum, amelybe beletartozott Baysian. Ha eltávolítja a stop szavakat az n-grammokból, az javítana ezen egy kicsit.

Igazad van az n-gram definíciójával kapcsolatban.

Keresés típusú alkalmazásokhoz szószintű n-gramokat használhat. A karakterszintű n-gramok inkább magának a szövegnek az elemzésére használhatók. Például egy szöveg nyelvének azonosításához a betűgyakoriságokat használnám a beállított nyelvi frekvenciákkal szemben. Vagyis a szövegnek megközelítőleg meg kell felelnie a betűk előfordulási gyakoriságának ezen a nyelven.

A PHP-beli szavak n-grammatikai tokenizátora az strtok segítségével hajtható végre:

Karakterekhez használja a split-et:

Ezután tetszőleges számú n-grammra feloszthatja a tömböt.

A Bayes-szűrőket meg kell tanítani a spamszűrők használatára, amelyek az n-grammal együtt használhatók. Azonban sokat kell neki adni, hogy tovább tanuljon.

Utolsó megközelítése jól hangzik, mivel megtanulja az oldal kontextusát... azonban még mindig meglehetősen bonyolult megtenni, de az n-gramok jó kiindulópontnak tűnnek ehhez.