N-gramov. Zlepšenie internej optimalizácie pomocou konkurentov Pozrite sa, čo je „N-gram“ v iných slovníkoch

Použitie N-gramov

Všeobecné použitie N-gramov

  • extrakcia údajov na zoskupenie série satelitných snímok Zeme z vesmíru, aby sa potom rozhodlo, ktoré konkrétne časti Zeme sú na snímke,
  • hľadanie genetických sekvencií,
  • v oblasti genetiky sa používajú na určenie, od ktorých konkrétnych živočíšnych druhov sa odoberajú vzorky DNA,
  • v počítačovej kompresii,
  • pomocou N-gramov sa spravidla indexujú údaje súvisiace so zvukom.

N-gramy sú tiež široko používané pri spracovaní prirodzeného jazyka.

Použitie N-gramov pre potreby spracovania prirodzeného jazyka

V oblasti spracovania prirodzeného jazyka sa N-gramy využívajú najmä na predikciu na základe pravdepodobnostných modelov. N-gramový model vypočíta pravdepodobnosť posledného slova N-gramu, ak sú známe všetky predchádzajúce. Pri použití tohto prístupu na modelovanie jazyka sa predpokladá, že vzhľad každého slova závisí iba od predchádzajúcich slov.

Ďalšou aplikáciou N-gramov je odhaľovanie plagiátov. Ak text rozdelíte na niekoľko malých fragmentov, reprezentovaných n-gramami, dajú sa ľahko navzájom porovnávať a získať tak stupeň podobnosti kontrolovaných dokumentov. N-gramy sa často úspešne používajú na kategorizáciu textu a jazyka. Okrem toho sa dajú použiť na vytváranie funkcií, ktoré vám umožnia získať znalosti z textových údajov. Pomocou N-gramov je možné efektívne nájsť kandidátov na nahradenie nesprávne napísaných slov.

Výskumné projekty Google

Výskumné centrá Google použili N-gramové modely pre širokú škálu výskumu a vývoja. Patria sem projekty ako štatistický preklad z jedného jazyka do druhého, rozpoznávanie reči, oprava pravopisu, extrakcia informácií a ďalšie. Pre účely týchto projektov boli použité korpusové texty obsahujúce niekoľko biliónov slov.

Google sa rozhodol vytvoriť vlastnú vzdelávaciu budovu. Projekt sa volá Google teracorpus a obsahuje 1 024 908 267 229 slov zozbieraných z verejných webových stránok.

Metódy extrakcie n-gramov

Vzhľadom na časté používanie N-gramov na riešenie rôznych problémov je potrebný spoľahlivý a rýchly algoritmus na ich extrakciu z textu. Vhodný nástroj na extrakciu n-gramov by mal vedieť pracovať s neobmedzenou veľkosťou textu, pracovať rýchlo a efektívne využívať dostupné zdroje. Existuje niekoľko metód na extrakciu N-gramov z textu. Tieto metódy sú založené na rôznych princípoch:

Poznámky

pozri tiež


Nadácia Wikimedia. 2010.

  • n-tv
  • N-kadherín

Pozrite sa, čo je „N-gram“ v iných slovníkoch:

    GRAM- (francúzsky gramme, z gréckeho grama rys). francúzska jednotka. hmotnosť \u003d hmotnosť 1 kubického centimetra destilovanej vody \u003d 22,5 ruštiny. akcií. Slovník cudzích slov zahrnutých v ruskom jazyku. Chudinov A.N., 1910. GRAM jednotka miery hmotnosti vo Francúzsku ... Slovník cudzích slov ruského jazyka

    gram- gram, rod. pl. gramov a prípustných (v ústnej reči po číslovkách) gramov. Sto gramov (gramov). Na obranu novej formy rodu. prípad pl. počet gramov vyrobil znalec ruského spisovateľa K. Čukovského. Tu je to, čo napísal v knihe "Žiť ako život": ... ... Slovník problémov s výslovnosťou a stresom v modernej ruštine

    GRAM- GRAM, gram, manžel. (z gréčtiny gramma znak, písmeno). Základná jednotka hmotnosti v metrickom systéme, ktorá sa rovná hmotnosti 1 kubického centimetra vody. Gram váži asi 1/400 libry. ❖ Gramatóm (fyz.) počet gramov látky rovný jej atómovej hmotnosti. ... ... Vysvetľujúci slovník Ushakov

    gram-röntgen- gram rtg / n, gram rtg / na, tyč. pl. gram röntgen a gram röntgen... zlúčené. Oddelene Cez pomlčku.

    gram- Gram, toto jednoduché slovo by nemohlo byť uvedené v slovníku chýb, ak nie za dvoch okolností; po prvé, ak sa chcete predviesť s absolútne správnym jazykom, potom, keď prídete do obchodu, omráčte predajcu tým správnym: Odvážte ma dvesto gramov (nie ... ... Slovník chýb ruského jazyka

    GRAM-ATÓM- GRAM ATOM, množstvo prvku, ktorého hmotnosť v gramoch sa rovná jeho ATÓMOVEJ HMOTNOSTI. Nahradila ho jednotka SI mol. Napríklad jeden gram atómu vodíka (H, atómová hmotnosť = 1) sa rovná jednému gramu. b>EKVIVALENT GRAMU, hmotnosť v gramoch tohto… … Vedecko-technický encyklopedický slovník

    GRAM- GRAM, ach, rod. pl. gramy a gramy, manžel. Jednotka hmotnosti v desatinnej sústave mier, tisícina kilogramu. Ani unca (nie) čohokoľvek (hovorového) vôbec, vôbec nie. Tento muž (ne)má ani kúsok svedomia. | adj. gram, oh, oh. Vysvetľujúce ...... Vysvetľujúci slovník Ozhegov

    gram- ale; pl. rod. gramy a gramy; m. [francúzsky. gram] Jednotka hmotnosti v metrickom systéme, jedna tisícina kilogramu. ◊ Neexistuje (jediný) gram. Vôbec, vôbec nie. U koho l. ani štipka klamstva. Nikto nemá ani kúsok svedomia. * * * gramov (francúzsky... encyklopedický slovník

    Gramm Zenob Theophilus- (Gramme) (1826 1901), elektrotechnik. Narodil sa v Belgicku, pracoval vo Francúzsku. Získal patent na praktický elektrický generátor s prstencovou kotvou (1869). Založil priemyselnú výrobu elektrických strojov. * * * GRAM Zenob… … encyklopedický slovník

    gramatóm- množstvo látky v gramoch, ktoré sa číselne rovná jej atómovej hmotnosti. Tento výraz sa neodporúča používať. V SI sa množstvo látky vyjadruje v móloch. * * * GRAM ATOM GRAM ATOM, množstvo látky v gramoch, ktoré sa číselne rovná jej atómovej hmotnosti (pozri ... encyklopedický slovník

    gram molekuly- množstvo látky v gramoch, ktoré sa číselne rovná jej molekulovej hmotnosti. Tento výraz sa neodporúča používať. V SI sa množstvo látky vyjadruje v móloch. * * * MOLEKULA GRAM MOLEKULA GRAM, množstvo látky v gramoch, ktoré sa číselne rovná jej ... ... encyklopedický slovník

Sémantické jadro

Pre úspešný rozvoj a zvýšenie viditeľnosti stránky v modernej realite je potrebné neustále rozširovať sémantické jadro. Jedným z najlepších spôsobov rastu je zhromažďovanie kľúčových slov konkurencie.

Dnes nie je ťažké získať sémantiku konkurentov, pretože. Existuje veľa služieb, platených aj bezplatných.

Voľný zoznam:

— megaindex.ru — Nástroj na viditeľnosť stránok

- xtool.ru - známa služba, ktorá zobrazuje aj kľúčové slová, podľa ktorých je stránka hodnotená

Zoznam platených:

— spywords.ru — vhodné pre Yandex a Google

- semrush.ru - zameraná iba na Google

— prodvigator.ua — ukrajinský analóg spywords.ru

Okrem služieb môžete použiť aj manuálnu metódu založenú na rozdelení názvu a popisu na n-gramy, v dôsledku čoho sa na výstupe získa dodatočný zoznam fráz.

N-gram - postupnosť n prvkov. V praxi je N-gram bežnejší ako séria slov. Často sa nazýva postupnosť dvoch po sebe nasledujúcich prvkov diagram, sa nazýva postupnosť troch prvkov trigram. Najmenej štyri alebo viac prvkov sú označené ako N-gram, N je nahradené počtom po sebe nasledujúcich prvkov.

Zvážte túto techniku ​​krok za krokom:

- Nahrajte názov (popis) súťažiacich. Dá sa to urobiť pomocou Screaming Frog SEO.

- V textovom editore vyčistíme výsledný zoznam od obslužných častí reči, interpunkčných znamienok a iných odpadkov. V textovom editore používam funkciu „vyhľadať a nahradiť“ (klávesová skratka ctrl+H) pomocou regulárnych výrazov:

- Vyberte požadovaný n-gram a nastavte frekvenciu aspoň na jednu. Najlepšou možnosťou sú trigramy a 4 gramy:

- Dostaneme nasledujúci výsledok:

Stĺpecpočítaťzobrazuje počet opakovanín-gram, stĺpecfrekvencia — frekvencian- gramov.

Keď dostaneme zoznam fráz, musíme ho analyzovať a vybrať vhodné kľúčové slová na rozšírenie sémantického jadra. Viac podrobností nájdete v príslušnej časti nášho blogu.

Zoskupovanie žiadostí

Je veľmi dôležité pochopiť, ako je zoskupené sémantické jadro konkurentov, pretože pomáha to správne distribuovať kľúčové frázy na stránkach lokality.

Aby sme to dosiahli, po vygenerovaní úplného zoznamu dopytov musíme získať relevantné stránky a pozície konkurentov (môžete použiť službu seolib.ru) a potom ich porovnať s naším zoskupením. Ak vidíte, že konkurent má dobré pozície a zároveň sa jeho zoskupenie líši od nášho (napríklad požiadavky konkurenta sú rozmiestnené na rôznych stránkach, zatiaľ čo naša má rovnaké požiadavky na jednej stránke), musíte venovať pozornosť a upravte vstupné stránky na svojom webe.

Zoberme si malý príklad porovnania zoskupenia podmieneného webu a jeho konkurenta.

Ako môžete vidieť z tabuľky, site.ru má jednu vstupnú stránku pre všetky kľúčové slová. U konkurenta sú rôzne stránky hodnotené pre rovnaké dopyty a obsadzujú TOP alebo blízko TOP pozícií. Na základe toho môžeme konštatovať, že zoskupenie na site.ru je potrebné revidovať, najmä je potrebné vytvoriť samostatnú stránku pre kľúčové frázy so slovom „fasáda“.

Kvalita textu

Prvou a najdôležitejšou vecou, ​​na ktorú treba pri analýze konkurenčných textov dávať pozor, nie je kvantitatívna zložka (počet výskytov, dĺžka textu a pod.), ale kvalitatívna alebo sémantická – nakoľko sú informácie užitočné, čo ponúka konkurencia a ako to robí.

Pozrime sa na pár príkladov.

Povedzme, že doručujete kvety a na hlavnej stránke v texte garantujete ich čerstvosť. Napríklad takto:

Donášková služba kvetovstránky. enzaručuje bezpečnosť kytíc aj v chladnom období.

Tu je príklad od jedného z konkurentov:

Je výhodné objednať si vonné kompozície u nás, pretože v prípade pochybností o čerstvosti kvetov garantujeme 100% záruku vrátenia peňazí.

Záruka konkurenta je krytá peniazmi, čo je dôležitejšie ako abstraktná záruka.

Zvážte ďalší príklad - text na stránke kategórie „keramické dlaždice“ v internetovom obchode:

Tento text nenesie žiadnu užitočnú sémantickú záťaž, pevná voda. S najväčšou pravdepodobnosťou chce osoba, ktorá prišla na stránku a rozhoduje sa o kúpe, poznať výhody produktu a možné konfigurácie, namiesto toho dostane nezmyselnú sadu znakov.

Teraz sa pozrime na text konkurenta:

Tento text je užitočnejší, pretože stručne informuje o rozdieloch medzi dlaždicami a pomôže vám pochopiť, ako si vybrať tú správnu.

Porovnaním textov konkurentov s vašimi vlastnými tak môžete získať veľa užitočných informácií, ktoré pomôžu copywriterom pri zostavovaní TOR.

Relevantnosť textov

Pri pokračovaní témy kvality textov sa nemožno nedotknúť ich relevantnosti. Dnes na to, aby bol text relevantný, nestačí len zaradiť kľúčové slová. Ak chcete zvýšiť relevantnosť stránky a zároveň nerobiť text spamom, musíte použiť slová súvisiace s témou.

Pri vyhodnocovaní relevantnosti textu k dopytu vyhľadávač analyzuje nielen prítomnosť kľúčových slov, ale aj ďalších slov, čím určuje význam textu. Napríklad, ak napíšeme text o slonovi, príbuzné slová možno považovať za: „chobot“, „kly“, „príroda“, „zoo“. Ak je text o šachovej figúre „slon“, potom tieto slová budú: „postava“, „kontrola“, „kráľovná“ atď.

V textoch konkurentov môžete získať najvhodnejší zoznam slov pre vaše potreby. Ak to chcete urobiť, musíte vykonať nasledujúce kroky:

— Všetky texty z TOP-10 pre požadovanú vysokofrekvenčnú požiadavku skopírujeme do rôznych textových súborov.

- Z textov odstraňujeme servisné časti reči, interpunkčné znamienka a čísla (uvedené vyššie).

- Zoraďte slová do riadku - použite funkciu "hľadať a nahradiť" s regulárnymi výrazmi. Medzeru nahraďte \n.

- Ďalej musíte uviesť všetky tvary slov do normálneho slovníkového tvaru (lemma). Na tento účel môžete použiť službu https://tools.k50project.ru/lemma/. Do poľa zadajte zoznam slov z každého súboru samostatne a kliknite na tlačidlo "lemmetizovať a vypísať ako tabuľku csv". Výsledkom by malo byť 10 súborov s lemmetizovanými slovami.

- V každom súbore odstraňujeme duplicitné slová.

- Skombinujte slová zo súborov do jedného zoznamu.

— Teraz musíme vytvoriť frekvenčný slovník. Ak to chcete urobiť, pridajte výsledný zoznam do služby https://tools.k50project.ru/lemma/ a kliknite na „vytvoriť frekvenčný slovník vo forme CSV“.

- Náš zoznam slov je pripravený:

Ak je frekvencia 10, potom sa toto slovo použilo na všetkých 10 stránkach, ak 8, potom iba na 8 atď. Odporúčame používať najfrekventovanejšie slová, medzi zriedkavými slovami sa však dajú nájsť zaujímavé riešenia.

Takýmto jednoduchým spôsobom môžete získať zoznam tematických slov na zostavenie TOR pre copywriterov.

Ako vidíte, konkurenti sú veľmi dôležitým zdrojom informácií, ktoré vám môžu pomôcť lepšie optimalizovať vaše stránky. V tomto článku som obsiahol zďaleka všetky aspekty a v budúcnosti budem pokračovať v písaní o tom, čo je užitočné a ako sa môžete naučiť od svojich konkurentov.

Odoberať novinky Tieto algoritmy sú určené na vyhľadávanie v predtým neznámom texte a možno ich použiť napríklad v textových editoroch, prehliadačoch dokumentov alebo webových prehliadačoch na vyhľadávanie na stránke. Nevyžadujú predbežné spracovanie textu a dokážu pracovať s nepretržitým prúdom dát.

Lineárne vyhľadávanie

Jednoduchá postupná aplikácia danej metriky (napríklad Levenshteinovej metriky) na slová zo vstupného textu. Pri použití metriky s limitom vám táto metóda umožňuje dosiahnuť optimálny výkon. Ale zároveň, čím viac k, čím dlhšie sa predlžuje doba chodu. Asymptotický odhad času - O(kn).

Bitap (tiež známy ako Shift-Or alebo Baeza-Yates-Gonnet a jeho modifikácia z Wu-Manber)

Algoritmus bitap a jeho rôzne modifikácie sa najčastejšie používajú na fuzzy vyhľadávanie bez indexovania. Jeho variácia sa používa napríklad v unixovej utilite agrep , ktorá vykonáva funkcie podobné štandardnému grep , no s podporou chýb vo vyhľadávacom dopyte a dokonca poskytuje obmedzené možnosti použitia regulárnych výrazov.

Po prvýkrát bola myšlienka tohto algoritmu navrhnutá občanmi Ricardo Baeza-Yates A Gaston Gonnet, ktorý v roku 1992 uverejnil súvisiaci článok.
Pôvodná verzia algoritmu sa zaoberá iba náhradami znakov a skutočne vypočítava vzdialenosť Hamming. Ale o niečo neskôr slnko wu A Udi Manber navrhol modifikáciu tohto algoritmu na výpočet vzdialenosti Levenshtein, t.j. priniesol podporu pre vkladanie a mazanie a na jej základe vyvinul prvú verziu nástroja agrep.






Výsledná hodnota

Kde k- počet chýb, j- index znakov, s x - maska ​​znaku (v maske sú jednotlivé bity umiestnené na pozíciách zodpovedajúcich pozíciám daného znaku v požiadavke).
Zhoda alebo nezhoda s dopytom je určená úplne posledným bitom výsledného vektora R.

Vysoká rýchlosť tohto algoritmu je zabezpečená bitovým paralelizmom výpočtov - v jednej operácii je možné vykonávať výpočty na 32 alebo viacerých bitoch súčasne.
Triviálna implementácia zároveň podporuje vyhľadávanie slov s dĺžkou najviac 32. Toto obmedzenie je dané šírkou štandardného typu int(na 32-bitových architektúrach). Môžete použiť aj typy veľkých rozmerov, ale to môže do určitej miery spomaliť algoritmus.

Napriek tomu, že asymptotická doba chodu tohto algoritmu O(kn) je rovnaká ako lineárna metóda, je oveľa rýchlejšia s dlhými dopytmi a množstvom chýb k cez 2.

Testovanie

Testovanie sa uskutočnilo na texte 3,2 milióna slov, priemerná dĺžka slova bola 10.
Presné vyhľadávanie
Čas vyhľadávania: 3562 ms
Vyhľadávajte pomocou Levenshteinovej metriky
Čas vyhľadávania o k=2: 5728 ms
Čas vyhľadávania o k=5: 8385 ms
Hľadajte pomocou algoritmu Bitap s úpravami Wu-Manber
Čas vyhľadávania o k=2: 5499 ms
Čas vyhľadávania o k=5: 5928 ms

Je zrejmé, že jednoduché vyhľadávanie pomocou metriky, na rozdiel od algoritmu Bitap, veľmi závisí od počtu chýb. k.

Pokiaľ však ide o vyhľadávanie veľkého množstva nezmeneného textu, čas vyhľadávania možno výrazne skrátiť predspracovaním takéhoto textu, tzv. indexovanie.

Fuzzy vyhľadávacie algoritmy s indexovaním (offline)

Vlastnosťou všetkých fuzzy vyhľadávacích algoritmov s indexovaním je, že index je zostavený podľa slovníka zostaveného zo zdrojového textu alebo zo zoznamu záznamov v databáze.

Tieto algoritmy využívajú rôzne prístupy k riešeniu problému – niektoré využívajú redukciu na presné vyhľadávanie, iné využívajú vlastnosti metriky na vytváranie rôznych priestorových štruktúr atď.

V prvom kroku sa zo zdrojového textu zostaví slovník, ktorý obsahuje slová a ich pozície v texte. Môžete tiež spočítať frekvenciu slov a fráz, aby ste zlepšili kvalitu výsledkov vyhľadávania.

Predpokladá sa, že index, podobne ako slovník, je plne načítaný do pamäte.

Taktické a technické vlastnosti slovníka:

  • Zdrojový text - 8,2 gigabajtov materiálov z knižnice Moshkov (lib.ru), 680 miliónov slov;
  • Veľkosť slovníka - 65 megabajtov;
  • Počet slov - 3,2 milióna;
  • Priemerná dĺžka slova je 9,5 znaku;
  • Dĺžka stredného štvorcového slova (môže byť užitočná pri vyhodnocovaní niektorých algoritmov) - 10,0 znakov;
  • Abeceda - veľké písmená A-Z, bez E (pre zjednodušenie niektorých operácií). Slová obsahujúce iné ako abecedné znaky nie sú zahrnuté v slovníku.
Závislosť veľkosti slovníka od objemu textu nie je striktne lineárna - do určitého objemu sa vytvorí základný rámec slov v rozmedzí od 15% pri 500 tisíc slovách do 5% pri 5 miliónoch a potom sa závislosť blíži lineárne. pomaly klesá a dosahuje 0,5 % pri 680 miliónoch slov. Následné udržanie rastu zabezpečujú z väčšej časti zriedkavé slová.

Vzorový algoritmus rozšírenia

Tento algoritmus sa často používa v systémoch na kontrolu pravopisu (t. j. na kontrolu pravopisu), kde je veľkosť slovníka malá alebo kde rýchlosť nie je hlavným kritériom.
Je založená na redukcii problému fuzzy vyhľadávania na presný problém vyhľadávania.

Z pôvodného dopytu sa zostaví množina „chybných“ slov, pre každé z nich sa následne vykoná presné vyhľadávanie v slovníku.

Jeho doba chodu silne závisí od počtu k chýb a od veľkosti abecedy A a v prípade použitia binárneho slovníkového vyhľadávania je:

Napríklad kedy k = 1 a slová s dĺžkou 7 (napríklad „Krokodíl“) v ruskej abecede, súbor chybných slov bude mať veľkosť asi 450, to znamená, že bude potrebné vykonať 450 slovníkových dopytov, čo je celkom prijateľné.
Ale už o k = 2 veľkosť takejto sady bude viac ako 115 tisíc možností, čo zodpovedá úplnému vymenovaniu malého slovníka alebo v našom prípade 1/27, a preto bude prevádzková doba pomerne veľká. Zároveň netreba zabúdať, že pre každé z týchto slov je potrebné vyhľadať v slovníku presnú zhodu.

Zvláštnosti:
Algoritmus je možné ľahko upraviť tak, aby generoval "chybné" varianty podľa ľubovoľných pravidiel a navyše nevyžaduje žiadne predbežné spracovanie slovníka, a teda dodatočnú pamäť.
Možné vylepšenia:
Je možné generovať nie celú množinu „chybných“ slov, ale iba tie z nich, ktoré sa s najväčšou pravdepodobnosťou vyskytnú v reálnej situácii, napríklad slová zohľadňujúce bežné pravopisné alebo preklepové chyby.

Táto metóda existuje už dlho a je najpoužívanejšia, pretože jej implementácia je mimoriadne jednoduchá a poskytuje pomerne dobrý výkon. Algoritmus je založený na princípe:
"Ak sa slovo A zhoduje so slovom B, vzhľadom na niekoľko chýb, potom s vysokou pravdepodobnosťou budú mať aspoň jeden spoločný podreťazec dĺžky N."
Tieto podreťazce dĺžky N sa nazývajú N-gramy.
Počas indexovania sa slovo rozdelí na takéto N-gramy a potom sa toto slovo zaradí do zoznamov pre každý z týchto N-gramov. Pri vyhľadávaní sa dopyt tiež rozdelí na N-gramy a pre každý z nich sa postupne hľadá zoznam slov obsahujúcich takýto podreťazec.

V praxi sa najčastejšie používajú trigramy - podreťazce dĺžky 3. Voľba väčšej hodnoty N vedie k obmedzeniu minimálnej dĺžky slova, pri ktorej je už možná detekcia chyby.

Zvláštnosti:
N-gramový algoritmus nenájde všetky možné nesprávne napísané slová. Ak si vezmeme napríklad slovo VOTKA a rozložíme ho na trigramy: IN T KA → VO T O T TO T KA - vidíte, že všetky obsahujú chybu T. Slovo "VODKA" sa teda nenájde, pretože neobsahuje žiadny z týchto trigramov a nespadá do zoznamov, ktoré im zodpovedajú. Čím je teda kratšia dĺžka slova a čím viac chýb obsahuje, tým je väčšia šanca, že nebude patriť do zoznamov zodpovedajúcich N-gramom dopytu a nebude prítomné vo výsledku.

Medzitým metóda N-gram ponecháva plný priestor na používanie vlastných metrík s ľubovoľnými vlastnosťami a zložitosťou, ale musíte za to zaplatiť - pri jej používaní musíte stále sekvenčne vymenovať asi 15% slovníka, čo je dosť veľa pre veľké slovníky.

Možné vylepšenia:
Hašovacie tabuľky N-gramov je možné rozdeliť podľa dĺžky slov a podľa polohy N-gramu v slove (úprava 1). Ako sa dĺžka hľadaného slova a dopytu nemôže líšiť o viac ako k a polohy N-gramu v slove sa môžu líšiť najviac o k. Bude teda potrebné skontrolovať len tabuľku zodpovedajúcu polohe tohto N-gramu v slove, ako aj k tabuliek vľavo a k tabuliek vpravo, t.j. Celkom 2k+1 susedné stoly.

Veľkosť množiny potrebnej na skenovanie môžete ďalej zmenšiť rozdelením tabuliek podľa dĺžky slova a podobným pohľadom iba na susedné tabuľky. 2k+1 tabuľky (úprava 2).

Tento algoritmus je opísaný v článku L.M. Boytsova. Hašovanie podpisu. Je založená na celkom zrejmom znázornení „štruktúry“ slova vo forme bitov, používaných ako hash (podpis) v hašovacej tabuľke.

Počas indexovania sa takéto hash vypočítajú pre každé zo slov a do tabuľky sa zapíše súlad zoznamu slov zo slovníka s týmto hashom. Potom sa počas vyhľadávania vypočíta hash pre dotaz a vytriedia sa všetky susedné hash, ktoré sa líšia od pôvodného nie o viac ako k bitov. Pre každý z týchto hashov sa vyhľadá zoznam zodpovedajúcich slov.

Proces výpočtu hashu – každému bitu hashu je priradená skupina znakov z abecedy. Bit 1 na pozícii i v hash znamená, že pôvodné slovo obsahuje znak z i-tý abecedné skupiny. Poradie písmen v slove je absolútne irelevantné.

Odstránenie jedného znaku buď nezmení hodnotu hash (ak sú v slove stále znaky z rovnakej abecednej skupiny), alebo sa bit zodpovedajúci tejto skupine zmení na 0. Pri vložení rovnakým spôsobom sa buď jeden bit nastaviť na 1, inak nedôjde k žiadnym zmenám. Pri výmene znakov je všetko trochu komplikovanejšie - hash môže buď zostať nezmenený, alebo sa môže zmeniť na 1 alebo 2 pozíciách. Pri permutácii nedochádza k žiadnym zmenám, pretože poradie znakov pri vytváraní hashu, ako už bolo uvedené, sa nezohľadňuje. Preto, aby ste úplne pokryli k chýb, musíte ich zmeniť aspoň 2k bit v hash.

Priebeh v priemere s k „neúplnými“ chybami (vloženia, vymazania a transpozície, ako aj malá časť nahradenia):

Zvláštnosti:
Vzhľadom na skutočnosť, že pri výmene jedného znaku sa môžu zmeniť dva bity naraz, algoritmus, ktorý implementuje napríklad skreslenie nie viac ako 2 bitov súčasne, v skutočnosti neprodukuje úplné množstvo výsledkov kvôli absencii významná (v závislosti od pomeru veľkosti hash a abeceda) časť slov s dvoma zámenami (a čím väčšia je veľkosť hash, tým častejšie bude zámena znaku viesť k skresleniu dvoch bitov naraz, a tým menej úplné výsledok bude). Okrem toho tento algoritmus neumožňuje vyhľadávanie prefixov.

BK stromy

Stromy Burkhard-Keller sú metrické stromy, algoritmy na konštrukciu takýchto stromov sú založené na vlastnosti metriky splniť trojuholníkovú nerovnosť:

Táto vlastnosť umožňuje metrikám vytvárať metrické priestory ľubovoľnej dimenzie. Takéto metrické priestory nie sú nevyhnutne euklidovský, teda napríklad metriky Levenshtein A Damerau-Levenshtein formulár neeuklidovské priestor. Na základe týchto vlastností môžete zostaviť dátovú štruktúru, ktorá vyhľadáva v takom metrickom priestore, akým sú Barkhard-Kellerove stromy.

Vylepšenia:
Schopnosť niektorých metrík môžete použiť na výpočet vzdialenosti s obmedzením nastavením hornej hranice rovnajúcej sa súčtu maximálnej vzdialenosti k potomkom vrcholu a výslednej vzdialenosti, čo mierne urýchli proces:

Testovanie

Testovanie prebiehalo na notebooku s Intel Core Duo T2500 (2GHz/667MHz FSB/2MB), 2Gb RAM, OS - Ubuntu 10.10 Desktop i686, JRE - OpenJDK 6 Update 20.

Testovanie sa uskutočnilo s použitím vzdialenosti Damerau-Levenshtein a počtu chýb k = 2. Veľkosť indexu je uvedená spolu so slovníkom (65 MB).

Veľkosť indexu: 65 MB
Čas vyhľadávania: 320 ms / 330 ms
Úplnosť výsledkov: 100%

N-gramov (originál)
Veľkosť indexu: 170 MB
Čas vytvorenia indexu: 32 s
Čas vyhľadávania: 71 ms / 110 ms
Úplnosť výsledkov: 65%
N-gramov (modifikácia 1)
Veľkosť indexu: 170 MB
Čas vytvorenia indexu: 32 s
Čas vyhľadávania: 39 ms / 46 ms
Úplnosť výsledkov: 63%
N-gramov (modifikácia 2)
Veľkosť indexu: 170 MB
Čas vytvorenia indexu: 32 s
Čas vyhľadávania: 37 ms / 45 ms
Úplnosť výsledkov: 62 %

Veľkosť indexu: 85 MB
Čas vytvorenia indexu: 0,6 s
Čas vyhľadávania: 55 ms
Úplnosť výsledkov: 56,5 %

BK stromy
Veľkosť indexu: 150 MB
Čas vytvorenia indexu: 120 s
Čas vyhľadávania: 540 ms
Úplnosť výsledkov: 63%

Celkom

Väčšina indexovaných fuzzy vyhľadávacích algoritmov nie je skutočne sublineárna (t. j. má asymptotický čas O (log n) alebo nižšia) a rýchlosť ich prevádzky je zvyčajne priamo závislá N. Napriek tomu početné vylepšenia a vylepšenia umožňujú dosiahnuť dostatočne krátky prevádzkový čas aj pri veľmi veľkých objemoch slovníkov.

Existuje tiež mnoho rôznorodejších a neefektívnych metód založených okrem iného na prispôsobení rôznych techník a techník už používaných inde na danú oblasť. Medzi tieto metódy patrí prispôsobenie prefixových stromov (Trie) na problémy s fuzzy vyhľadávaním, ktoré som nechal bez dozoru pre jeho nízku efektivitu. Existujú však aj algoritmy založené na pôvodných prístupoch, napríklad algoritmus Maass-Novák, ktorá má síce sublineárnu asymptotickú dobu chodu, ale je mimoriadne neefektívna kvôli obrovským konštantám skrytým za takýmto časovým odhadom, ktoré sa prejavujú v podobe obrovskej veľkosti indexu.

Praktické využitie fuzzy vyhľadávacích algoritmov v skutočných vyhľadávačoch úzko súvisí s fonetickými algoritmami, algoritmami lexikálnych kmeňov - zvýraznením základnej časti rôznych slovných foriem toho istého slova (takúto funkcionalitu poskytujú napríklad Snowball a Yandex mystem), napr. ako aj hodnotenie založené na štatistických informáciách alebo pomocou zložitých sofistikovaných metrík.

  • Levenshteinova vzdialenosť (s možnosťou orezania a predpony);
  • Vzdialenosť Damerau-Levenshtein (s možnosťou orezania a predpony);
  • Bitap algoritmus (Shift-OR / Shift-AND s modifikáciami Wu-Manber);
  • Vzorový algoritmus rozšírenia;
  • N-gramová metóda (pôvodná a s úpravami);
  • metóda hašovania podpisu;
  • BK-stromy.
Chcel som, aby bol kód ľahko zrozumiteľný a zároveň dostatočne efektívny na praktické použitie. Vytláčanie poslednej šťavy z JVM nebolo súčasťou mojich úloh. Užite si to.

Stojí za zmienku, že v procese štúdia tejto témy som prišiel s niektorými svojimi vlastnými vývojmi, ktoré mi umožňujú skrátiť čas vyhľadávania rádovo kvôli miernemu zvýšeniu veľkosti indexu a určitému obmedzeniu v sloboda výberu metrík. Ale to je úplne iný príbeh.


Definícia Príklad Aplikácie Vytvorenie n-gramového jazykového modelu Výpočet n-gramovej pravdepodobnosti Eliminácia riedkosti tréningového korpusu o Add-one Smoothing o Witten-Bell Discounting o Good-Turing Discounting o Katzs Backoff o Vymazaná interpolácia Odhad n-gramového jazykového modelu pomocou entropia Obsah


N-gram (anglicky N-gram) podsekvencia N prvkov nejakej sekvencie. Zvážte sekvencie slov. Unigramy mačka, pes, kôň,... Bigramy malá mačka, veľký pes, silný kôň,... Trigramy malá mačka žerie, veľký pes šteká, silný kôň beží,... Definícia


Príklady aplikovaných úloh Rozpoznávanie reči. Niektoré slová s rôznym pravopisom sa vyslovujú rovnako. Úlohou je vybrať správne slovo v kontexte. Generovanie textov na danú tému. Príklad: Yandex.Abstracts. Hľadajte sémantické chyby. Snaží sa to doladiť – z hľadiska syntaxe je pravda, z hľadiska sémantiky nie. Snaží sa to zistiť – správne. snaha zistiť sa nachádza v anglických textoch oveľa častejšie ako snaha zistiť, čo znamená, že ak sú k dispozícii štatistiky, môžete tento druh chyby nájsť a odstrániť


Vytvorenie jazykového modelu n-gramov Pre riešenie uvedených aplikovaných problémov je potrebné vytvoriť jazykový model N-gramov. Na vytvorenie modelu je potrebné: 1. Vypočítať pravdepodobnosti n-gramov v tréningovom korpuse. 2. Opravte problém s riedkosťou trupu pomocou jednej z metód vyhladzovania. 3. Vyhodnoťte kvalitu výsledného jazykového modelu n-gramov pomocou entropie.


Výpočet pravdepodobnosti N-gramov (1) V tréningovom korpuse sa určité n-gramy vyskytujú s rôznymi frekvenciami. Pre každý n-gram môžeme spočítať, koľkokrát sa vyskytuje v korpuse. Na základe získaných údajov možno zostaviť pravdepodobnostný model, pomocou ktorého možno následne odhadnúť pravdepodobnosť n-gramov v niektorom testovacom korpuse.


Výpočet pravdepodobnosti N-gramov (2) Uvažujme o príklade. Nech sa korpus skladá z jednej vety: Piknikovali pri bazéne, potom si ľahli späť do trávy a pozerali na hviezdy Vyberme n-gramy. Unigramy: Oni, ošklbaní, ... Digramy: Piknikovaní, škriabaní, ... Trigramy, ktoré zbierali, zbierali, pri bazéne, ...


Výpočet pravdepodobnosti N-gramov (3) Teraz je možné počítať n-gramov. Všetky vybrané bi- a trigramy sa v korpuse vyskytujú raz. Všetky unigramy, s výnimkou slova the, sa tiež vyskytujú raz. Slovo the sa vyskytuje trikrát. Teraz, keď vieme, koľkokrát sa každý n-gram vyskytuje, môžeme zostaviť pravdepodobnostný model n-gramov. V prípade unigramov možno pravdepodobnosť slova u vypočítať pomocou vzorca: Napríklad pre slovo bude pravdepodobnosť 3/16 (pretože v korpuse je 16 slov, z ktorých 3 sú slovo the) . Počet výskytov slova u v tréningovom korpuse Piknikovali pri bazéne, potom si ľahli späť do trávy a pozerali na hviezdy


1, pravdepodobnosť sa posudzuje trochu inak. Zoberme si prípad bigramov: nech je potrebné vypočítať pravdepodobnosť, že bigram bude v bazéne. Ak považujeme každé slovo bigramu za nejakú udalosť, potom veriť" title="(!LANG:N-gramový výpočet pravdepodobnosti (4) Pre n-gramy, kde n>1, sa pravdepodobnosť počíta trochu inak. Uvažujme prípad bigramov : nech je potrebné vypočítať diagram bazén Ak každé slovo diagramu považujeme za nejakú udalosť, potom veriť" class="link_thumb"> 9 !} Výpočet pravdepodobnosti N-gramov (4) Pre n-gramy, kde n>1, sa pravdepodobnosť počíta trochu inak. Zoberme si prípad bigramov: nech je potrebné vypočítať pravdepodobnosť, že bigram bude v bazéne. Ak považujeme každé slovo bigramu za nejakú udalosť, potom pravdepodobnosť súboru udalostí možno vypočítať podľa vzorca: Pravdepodobnosť bigramu je teda skupina:, kde 1, pravdepodobnosť sa posudzuje trochu inak. Zoberme si prípad bigramov: nech je potrebné vypočítať pravdepodobnosť, že bigram bude v bazéne. Ak považujeme každé slovo bigramu za nejakú udalosť, potom pri verení "> 1 sa pravdepodobnosť považuje za trochu inak. Uvažujme prípad bigramov: nech je potrebné vypočítať pravdepodobnosť bigramu za bazén. Ak každé slovo bigramu považujeme za nejaká udalosť, potom sa pravdepodobnosť množiny udalostí dá vypočítať podľa vzorca : Pravdepodobnosť bigramu je teda pool:, kde "> 1, pravdepodobnosť sa vypočíta trochu inak. Zoberme si prípad bigramov: nech je potrebné vypočítať pravdepodobnosť, že bigram bude v bazéne. Ak považujeme každé slovo bigramu za nejakú udalosť, potom veriť" title="(!LANG:N-gramový výpočet pravdepodobnosti (4) Pre n-gramy, kde n>1, sa pravdepodobnosť počíta trochu inak. Uvažujme prípad bigramov : nech je potrebné vypočítať diagram bazén Ak každé slovo diagramu považujeme za nejakú udalosť, potom veriť"> title="Výpočet pravdepodobnosti N-gramov (4) Pre n-gramy, kde n>1, sa pravdepodobnosť počíta trochu inak. Zoberme si prípad bigramov: nech je potrebné vypočítať pravdepodobnosť, že bigram bude v bazéne. Ak považujeme každé slovo diagramu za nejakú udalosť, potom veriť"> !}


Výpočet pravdepodobnosti N-gramov (5) Teraz zvážte výpočet pravdepodobnosti ľubovoľného n-gramu (alebo vety dĺžky n). Rozšírením prípadu bigramov získame vzorec pravdepodobnosti pre n-gramy Výpočet pravdepodobnosti vety sa teda redukuje na výpočet podmienenej pravdepodobnosti N-gramov, ktoré tvoria túto vetu:




Eliminácia riedkosti korpusu (1) Problém jednoduchého (nevyhladeného) jazykového modelu n-gramov: pre niektoré n-gramy môže byť pravdepodobnosť značne podhodnotená (alebo dokonca nulová), hoci v skutočnosti (v testovacom korpuse) tieto n-gramy sa môžu vyskytovať pomerne často. Dôvod: obmedzený tréningový korpus a jeho špecifickosť. Riešenie: znížením pravdepodobnosti niektorých n-gramov zvýšte pravdepodobnosť tých n-gramov, ktoré sa v tréningovom korpuse nevyskytovali (alebo sa s nimi stretávali dosť zriedkavo).




Eliminácia riedkych korpusov (3) V algoritmoch eliminácie riedkych korpusov sa používajú tieto koncepty: Typy – rôzne slová (sekvencie slov) v texte. Tokeny sú všetky slová (sekvencie slov) v texte. Piknikovali pri bazéne, potom si ľahli späť do trávy a pozerali sa na hviezdy – 14 druhov, 16 žetónov





Add-one smoothing (4) Metóda vyvoláva silnú chybu vo výpočtoch (napríklad na predchádzajúcej snímke sa ukázalo, že pri slove čínština sa počet bigramov znížil 8-krát). Testy ukázali, že nevyhladený model často ukazuje presnejšie výsledky. Preto je metóda zaujímavá len z teoretického hľadiska.


Witten-Bellovo diskontovanie (1) Na základe jednoduchej myšlienky: použite údaje o n-gramoch vyskytujúcich sa v tréningovom korpuse na odhad pravdepodobnosti chýbajúcich n-gramov. Myšlienka metódy je prevzatá z kompresných algoritmov: zvažujú sa dva typy udalostí - stretli sa s novým znakom (typ) a stretli sa so znakom (token). Vzorec pravdepodobnosti pre všetky chýbajúce n-gramy (teda pravdepodobnosť, že sa v testovacom korpuse stretne s n-gramom, ktorý nebol v trénovacom korpuse): N je počet tokenov v trénovacom korpuse, T je počet typov s ktorými sme sa už v tréningovom korpuse stretli






Witten-Bell Diskontovanie (4) =>=> =>"> =>"> =>" title="(!LANG:Witten-Bell Discounting (4) =>=>"> title="Witten-Bell Diskontovanie (4) =>=>"> !}




Good-Turing Discounting (1) Myšlienka: Pre n-gramy, ktoré sa vyskytujú nulakrát (c-krát), je skóre úmerné počtu n-gramov, ktoré sa vyskytujú raz (c + 1-krát). Zoberme si príklad: Predpokladajme, že bolo ulovených 18 rýb. Celkovo bolo ulovených 6 rôznych druhov a v troch druhoch bol ulovený len jeden zástupca. Musíme nájsť pravdepodobnosť, že ďalšia ryba bude patriť novému druhu. Celkovo je možných 7 druhov (ulovených už bolo 6 druhov).








Katzs Backoff (2) Koeficient α je potrebný pre správne rozdelenie zvyškovej pravdepodobnosti N-gramov v súlade s rozdelením pravdepodobnosti (N-1)-gramov. Ak nezadáte α, odhad bude chybný, pretože nebude splnená rovnosť: Výpočet α je uvedený na konci správy. Hodnotenie jazykového modelu pomocou entropie (1) Entropia je miera neistoty. Pomocou entropie je možné určiť najvhodnejší jazykový model N-gramov pre danú aplikovanú úlohu. Vzorec binárnej entropie: Príklad: Vypočítajte entropiu testu hodu mincou. Odpoveď: 1 bit za predpokladu, že výsledky experimentu sú rovnako pravdepodobné (každá strana vypadne s pravdepodobnosťou 1/2).




Vyhodnotenie jazykového modelu pomocou entropie (3) Krížová entropia sa používa na porovnanie rôznych jazykových modelov: Čím je hodnota krížovej entropie H(p,m) bližšia k skutočnej entropii H(p), tým lepší je jazykový model: V našom prípade je H(p ) entropia testovacieho korpusu. m(w) – jazykový model (napr. N-gramový model)


Hodnotenie jazykového modelu pomocou entropie (4) Existuje aj iná metóda hodnotenia kvality jazykového modelu, založená na tzv. indikátor konektivity (zmätenosť). Nápad: Vypočítajte pravdepodobnosť celého testovacieho korpusu. Lepší model bude vykazovať vyššiu pravdepodobnosť. vzorec zmätku: Teda čím je zmätok menší, tým je model lepší. Zmätenosť možno interpretovať ako priemerný počet slov, ktoré môžu nasledovať po určitom slove (t. j. čím väčšia zmätok, tým vyššia nejednoznačnosť, a teda horší jazykový model). Vzťah medzi zmätenosťou a binárnou entropiou:


Odhad jazykového modelu pomocou entropie (5) Ako príklad uvažujme hodnoty zmätenosti pre nejaký korpus, získané pomocou trénovaných modelov unigramov, bigramov a trigramov: V prípade trigramov je zložitosť najmenšia, pretože jednoznačnosť uľahčuje najdlhšia dĺžka histórie zo všetkých modelov (rovnajúca sa 2) pri výpočte podmienených pravdepodobností trigramov. UnigramBigramTrigram Zmätenosť


Chcem implementovať nejaké n-gramové aplikácie (najlepšie v PHP).

Aký typ n-gramov je vhodnejší na väčšinu účelov? Úroveň slova alebo úroveň postavy n-gram úroveň? Ako možno implementovať n-gramatický tokenizér v PHP?

Najprv by som chcel vedieť, čo sú N-gramy. Je to správne? Takto chápem n-gramy:

Návrh: "Bývam v New Yorku."

biramy na úrovni slova (2 pre n): "# ja", "žijem", "žijem v", "v New Yorku", "NY #"

biramy na úrovni postavy (2 pre n): "#I", "I #", "#l", "li", "iv", "ve", "e #", "#i", "in", "n#", "#N", "NY", "Y#"

Keď máte toto pole n-gramových častí, hodíte duplikáty a pre každú časť pridáte počítadlo, ktoré určuje frekvenciu:

biggramy na úrovni slova:

biggramy na úrovni postavy:

Je to správne?

Tiež by som chcel vedieť viac o tom, čo môžete robiť s n-gramami:

  • Ako zistím jazyk textu pomocou n-gramov?
  • Je možné urobiť strojový preklad pomocou n-gramov, aj keď nemáte dvojjazyčný korpus?
  • Ako vytvoriť spamový filter (spam, ham)? Kombinovať n-gramy s Bayesovským filtrom?
  • Ako nájdem tému? Napríklad: existuje text o basketbale alebo psoch? Môj prístup (v článku na Wikipédii pre „psy“ a „basketbal“ postupujte takto: vykreslite n-gramové vektory pre oba dokumenty, normalizujte ich, vypočítajte vzdialenosť Manhattan/Euclid, čím je výsledok bližšie k 1, tým vyšší podobnosť bude

Ako sa vám páči moja žiadosť, najmä tá posledná?

Dúfam, že mi pomôžete. Vopred ďakujem!

2 odpovede

Slovo n-gram bude vo všeobecnosti užitočnejšie pre väčšinu aplikácií na analýzu textu, ktoré ste spomenuli, možno s výnimkou definície jazyka, kde by niečo ako trigramy znakov mohlo poskytnúť lepšie výsledky. Účinne by ste vytvorili vektor n-gramov pre telo textu v každom jazyku, ktorý vás zaujíma, a potom porovnali frekvencie trigramov v každom korpuse s frekvenciami v dokumente, ktorý klasifikujete. Napríklad trigram the sa pravdepodobne vyskytuje oveľa častejšie v angličtine ako v nemčine a poskytuje určitú úroveň štatistickej korelácie. Akonáhle máte n-gramové dokumenty, máte na výber z mnohých algoritmov na ďalšiu analýzu, Baysovské filtre, N Najbližší sused, Podporné vektorové stroje atď.

Z aplikácií, ktoré ste spomenuli, je strojový preklad pravdepodobne najzaujímavejší, pretože samotné n-gramy vás na ceste veľmi ďaleko nedostanú. Konverzia vstupného súboru na n-gramovú reprezentáciu je len spôsob, ako dať údaje do formátu pre ďalšiu analýzu funkcií, ale keďže stratíte veľa kontextových informácií, nemusí to byť užitočné na preklad.

Jedna vec, ktorú treba poznamenať, je, že nestačí vytvoriť vektor pre jeden dokument a vektor pre iný dokument, ak sa rozmery nezhodujú. To znamená, že prvá položka vo vektore nemôže byť v jednom dokumente a je v inom, inak algoritmy nebudú fungovať. Skončíte s vektormi ako , pretože väčšina dokumentov nebude obsahovať viac ako n-gramov, ktoré vás zaujímajú. Táto „podšívka“ tiež vyžaduje, aby ste si vopred určili, ktoré ngramy zahrniete do svojej analýzy. Často sa to implementuje ako dvojpriechodový algoritmus, aby sa najprv rozhodlo o štatistickej významnosti rôznych n-gramov, aby sa rozhodlo, čo ponechať. Viac informácií nájdete v Google "výber funkcií".

Word-based n-grams plus podpora pre vektorové stroje je skvelý spôsob, ako definovať tému, ale na prípravu klasifikátora potrebujete veľký korpus textu vopred zatriedeného do tém „on-topic“ a „off-topic“. Na stránke ako je citeseerx nájdete veľké množstvo výskumných prác vysvetľujúcich rôzne prístupy k tomuto problému. Neodporúčal by som k tomuto problému prístup euklidovskej vzdialenosti, pretože neváži jednotlivé n-gramy na základe štatistickej významnosti, takže dva dokumenty, ktoré obsahujú , a , je a of by sa považovali za lepšiu zhodu ako dva dokumenty , medzi ktoré patril Baysian. Odstránenie zastavovacích slov z vašich n-gramov záujmu by to trochu zlepšilo.

S definíciou n-gramov máš pravdu.

Pre aplikácie typu vyhľadávania môžete použiť n-gramy na úrovni slov. N-gramy na úrovni znakov sa dajú použiť viac na analýzu samotného textu. Napríklad na identifikáciu jazyka textu by som použil frekvenciu písmen oproti zavedeným jazykovým frekvenciám. To znamená, že text by mal približne zodpovedať frekvencii výskytu písmen v tomto jazyku.

N-gramatický tokenizér pre slová v PHP možno vykonať pomocou strtok:

Pre znaky použite rozdelenie:

Potom môžete pole rozdeliť, akokoľvek chcete, na ľubovoľný počet n-gramov.

Bayesovské filtre musia byť vyškolené na použitie ako spamové filtre, ktoré možno použiť v spojení s n-gramami. Musíte mu však dať veľa vstupov, aby sa učil.

Váš posledný prístup znie slušne, pretože sa učí kontext stránky... je to však stále dosť zložité, ale n-gramy sa zdajú byť dobrým východiskovým bodom.