N-gramů. Zlepšení vnitřní optimalizace s pomocí konkurentů Podívejte se, co je „N-gram“ v jiných slovnících

Použití N-gramů

Obecné použití N-gramů

  • extrakci dat pro seskupení série satelitních snímků Země z vesmíru, aby se pak rozhodlo, které konkrétní části Země jsou na snímku,
  • hledat genetické sekvence,
  • v oblasti genetiky se používají k určení, od kterých konkrétních živočišných druhů jsou odebírány vzorky DNA,
  • v počítačové kompresi,
  • pomocí N-gramů jsou zpravidla indexována data související se zvukem.

N-gramy jsou také široce používány při zpracování přirozeného jazyka.

Použití N-gramů pro potřeby zpracování přirozeného jazyka

V oblasti zpracování přirozeného jazyka se N-gramy používají především k predikci na základě pravděpodobnostních modelů. N-gramový model počítá pravděpodobnost posledního slova N-gramu, pokud jsou známa všechna předchozí. Při použití tohoto přístupu k modelování jazyka se předpokládá, že vzhled každého slova závisí pouze na předchozích slovech.

Další aplikací N-gramů je odhalování plagiátorství. Pokud text rozdělíte na několik malých fragmentů, reprezentovaných n-gramy, lze je snadno vzájemně porovnávat a získat tak míru podobnosti kontrolovaných dokumentů. N-gramy se často úspěšně používají ke kategorizaci textu a jazyka. Kromě toho je lze použít k vytvoření funkcí, které vám umožní získat znalosti z textových dat. Pomocí N-gramů lze efektivně najít kandidáty na nahrazení chybně napsaných slov.

Výzkumné projekty Google

Výzkumná centra Google používají N-gramové modely pro širokou škálu výzkumu a vývoje. Patří mezi ně projekty jako statistický překlad z jednoho jazyka do druhého, rozpoznávání řeči, opravy pravopisu, extrakce informací a další. Pro účely těchto projektů byly použity korpusové texty obsahující několik bilionů slov.

Google se rozhodl vytvořit vlastní vzdělávací budovu. Projekt se jmenuje Google teracorpus a obsahuje 1 024 908 267 229 slov shromážděných z veřejných webů.

Metody extrakce n-gramů

Vzhledem k častému používání N-gramů pro řešení různých problémů je k jejich extrakci z textu potřeba spolehlivý a rychlý algoritmus. Vhodný nástroj pro extrakci n-gramů by měl umět pracovat s neomezenou velikostí textu, pracovat rychle a efektivně využívat dostupné zdroje. Existuje několik metod pro extrakci N-gramů z textu. Tyto metody jsou založeny na různých principech:

Poznámky

viz také


Nadace Wikimedia. 2010

  • n-tv
  • N-cadherin

Podívejte se, co je "N-gram" v jiných slovnících:

    GRAM- (francouzský gramme, z řeckého gramma trait). francouzská jednotka. hmotnost \u003d hmotnost 1 kubického centimetru destilované vody \u003d 22,5 ruštiny. akcie. Slovník cizích slov zahrnutých v ruském jazyce. Chudinov A.N., 1910. GRAM jednotka míry hmotnosti ve Francii ... Slovník cizích slov ruského jazyka

    gram- gram, rod. pl. gramů a přípustných (v ústní řeči po číslovkách) gramů. Sto gramů (gramů). Na obranu nové formy rodu. případ pl. počet gramů vyrobil znalec ruského spisovatele K. Čukovského. Zde je to, co napsal v knize "Living as Life": ... ... Slovník problémů s výslovností a stresem v moderní ruštině

    GRAM- GRAM, gram, manžel. (z řeckého gramma znak, písmeno). Základní jednotka hmotnosti v metrické soustavě, rovná se hmotnosti 1 centimetru krychlového vody. Gram váží asi 1/400 libry. ❖ Gram atom (fyz.) počet gramů látky rovný její atomové hmotnosti. ... ... Vysvětlující slovník Ushakova

    gram-roentgen- gram rentgen / n, gram rentgen / na, tyč. pl. gram rentgenu a gram rentgenu... sloučeny. Odděleně. Přes pomlčku.

    gram- Grame, toto jednoduché slovo by nemohlo být uvedeno ve slovníku chyb, nebýt dvou okolností; za prvé, pokud se chcete pochlubit naprosto správným jazykem, pak po příchodu do obchodu omráčte prodejce tím správným: Navažte mi dvě stě gramů (ne ... ... Slovník ruských jazykových chyb

    GRAM-ATOM- GRAM ATOM, množství prvku, jehož hmotnost v gramech se rovná jeho ATOMOVÉ HMOTNOSTI. To bylo nahrazeno jednotkou SI mol. Například jeden gram atomu vodíku (H, atomová hmotnost = 1) se rovná jednomu gramu. b>EKVIVALENT GRAMU, hmotnost v gramech tohoto… … Vědeckotechnický encyklopedický slovník

    GRAM- GRAM, ach, rod. pl. gramy a gramy, manžel. Jednotka hmotnosti v desítkové soustavě měr, tisícina kilogramu. Ani unce (ne) čehokoli (hovorového) vůbec, vůbec ne. Tento muž (ne)má ani špetku svědomí. | adj. gram, oh, oh. Vysvětlující...... Vysvětlující slovník Ozhegov

    gram- ale; pl. rod. gramy a gramy; m. [francouzsky. gram] Jednotka hmotnosti v metrické soustavě, jedna tisícina kilogramu. ◊ Není (jediný) gram. Vůbec, vůbec ne. V kom l. ani špetku lži. Nikdo nemá ani špetku svědomí. * * * gramů (francouzský... encyklopedický slovník

    Gramm Zenob Theophilus- (Gramme) (1826 1901), elektrotechnik. Narozen v Belgii, pracoval ve Francii. Získal patent na praktický elektrický generátor s prstencovou kotvou (1869). Založil průmyslovou výrobu elektrických strojů. * * * GRAM Zenob… … encyklopedický slovník

    gram atom- množství látky v gramech, které se číselně rovná její atomové hmotnosti. Termín se nedoporučuje používat. V SI se množství látky vyjadřuje v molech. * * * GRAM ATOM GRAM ATOM, množství látky v gramech, které se číselně rovná její atomové hmotnosti (viz ... encyklopedický slovník

    gram molekuly- množství látky v gramech, které se číselně rovná její molekulové hmotnosti. Termín se nedoporučuje používat. V SI se množství látky vyjadřuje v molech. * * * MOLEKULA GRAM MOLEKULA GRAM, množství látky v gramech, které se číselně rovná jejímu ... ... encyklopedický slovník

Sémantické jádro

Pro úspěšný rozvoj a zvýšení viditelnosti webu v moderní realitě je nutné neustále rozšiřovat sémantické jádro. Jedním z nejlepších způsobů růstu je shromažďování klíčových slov konkurence.

Dnes není těžké získat sémantiku konkurentů, protože. Existuje mnoho služeb, placených i bezplatných.

Volný seznam:

— megaindex.ru — nástroj pro viditelnost webu

- xtool.ru - známá služba, která také zobrazuje klíčová slova, podle kterých je stránka hodnocena

Seznam zaplacených:

— spywords.ru — vhodné pro Yandex a Google

- semrush.ru - zaměřené pouze na Google

— prodvigator.ua — ukrajinská obdoba spywords.ru

Kromě služeb můžete využít i manuální metodu založenou na rozdělení názvu a popisu na n-gramy, v důsledku čehož se na výstupu získá další seznam frází.

N-gram - posloupnost n prvků. V praxi je N-gram běžnější jako řada slov. Často se nazývá sekvence dvou po sobě jdoucích prvků digram, nazývá se posloupnost tří prvků trigram. Nejméně čtyři nebo více prvků jsou označeny jako N-gram, N je nahrazeno počtem po sobě jdoucích prvků.

Zvažte tuto techniku ​​krok za krokem:

- Nahrajte název (popis) soutěžících. Lze provést pomocí Screaming Frog SEO.

- V textovém editoru vyčistíme výsledný seznam od obslužných slovních druhů, interpunkčních znamének a dalších odpadků. Používám funkci „vyhledat a nahradit“ v textovém editoru vznešeného textu (klávesová zkratka ctrl+H) pomocí regulárních výrazů:

- Vyberte požadovaný n-gram a nastavte frekvenci alespoň na jednu. Nejlepší možností jsou trigramy a 4 gramy:

- Dostaneme následující výsledek:

Sloupecpočetukazuje počet opakovánín-gram, sloupecfrekvence -frekvencen- gramů.

Poté, co obdržíme seznam frází, musíme jej analyzovat a vybrat vhodná klíčová slova, abychom rozšířili sémantické jádro. Více podrobností naleznete v příslušné sekci našeho blogu.

Seskupování požadavků

Je velmi důležité pochopit, jak je sémantické jádro konkurentů seskupeno, protože to pomáhá správně distribuovat klíčové fráze na stránkách webu.

Abychom to mohli udělat, po vygenerování kompletního seznamu dotazů potřebujeme získat relevantní stránky a pozice konkurentů (můžete použít službu seolib.ru) a poté porovnat s naším seskupením. Pokud vidíte, že konkurent má dobré pozice a zároveň se jeho seskupení liší od našeho (např. požadavky konkurenta jsou rozmístěny na různých stránkách, zatímco naše mají stejné požadavky na jedné stránce), je třeba věnovat pozornost toto a upravit vstupní stránky na vašem webu.

Podívejme se na malý příklad srovnání seskupení podmíněného webu a jeho konkurenta.

Jak můžete vidět z tabulky, site.ru má jednu vstupní stránku pro všechna klíčová slova. U konkurenta jsou různé stránky hodnoceny pro stejné dotazy a zaujímají TOP nebo blízko TOP pozic. Na základě toho můžeme dojít k závěru, že seskupení na site.ru je třeba revidovat, zejména je nutné vytvořit samostatnou stránku pro klíčové fráze se slovem „fasáda“.

Kvalita textu

První a nejdůležitější věcí, které je třeba věnovat pozornost při analýze textů konkurence, není kvantitativní složka (počet výskytů, délka textu atd.), ale kvalitativní či sémantická – jak užitečné jsou informace, co konkurence nabízí a jak to dělá.

Podívejme se na pár příkladů.

Řekněme, že doručujete květiny a na hlavní stránce v textu ručíte za jejich čerstvost. Například takto:

Doručovací služba květinmísto. enzaručuje bezpečnost kytic i v chladném období.

Zde je příklad od jednoho z konkurentů:

Objednávat vonné kompozice u nás je výhodné, protože v případě pochybností o čerstvosti květin garantujeme 100% záruku vrácení peněz.

Záruka konkurence je kryta penězi, což je důležitější než abstraktní záruka.

Zvažte další příklad - text na stránce kategorie "keramické dlaždice" internetového obchodu:

Tento text nenese žádnou užitečnou sémantickou zátěž, pevná voda. S největší pravděpodobností chce člověk, který přišel na web a rozhoduje se o nákupu, znát výhody produktu a možné konfigurace, místo toho dostává nesmyslnou sadu znaků.

Nyní se podívejme na text soutěžícího:

Tento text je užitečnější, protože stručně popisuje rozdíly mezi dlaždicemi a pomáhá vám pochopit, jak vybrat tu správnou.

Porovnáním textů konkurentů s vašimi vlastními tak můžete získat mnoho užitečných informací, které copywriterům pomohou při sestavování TOR.

Relevance textů

Pokračujeme-li v tématu kvality textů, nelze se nedotknout jejich relevance. Dnes k tomu, aby byl text relevantní, nestačí pouze zahrnout klíčová slova. Abyste zvýšili relevanci stránky a zároveň aby ​​text nebyl spamový, musíte použít slova související s tématem.

Při posuzování relevance textu k dotazu vyhledávač analyzuje nejen přítomnost klíčových slov, ale i doplňujících slov, a tak určuje význam textu. Pokud například napíšeme text o slonovi, lze za související slova považovat: „chobot“, „kly“, „příroda“, „zoo“. Pokud je text o šachové figurce „slon“, pak tato slova budou: „figurka“, „kontrola“, „královna“ atd.

V textech konkurence můžete získat nejvhodnější seznam slov pro vaše potřeby. Chcete-li to provést, musíte provést následující kroky:

— Zkopírujeme všechny texty z TOP-10 pro požadovaný vysokofrekvenční požadavek do různých textových souborů.

- Odstraňujeme obslužné části řeči, interpunkční znaménka a čísla z textů (uvažováno dříve).

- Seřaďte slova do řádku - použijte funkci "hledat a nahradit" s regulárními výrazy. Nahraďte mezeru za \n.

- Dále musíte uvést všechny tvary slov do normálního slovníkového tvaru (lemma). K tomu můžete použít službu https://tools.k50project.ru/lemma/. Do pole zadejte seznam slov z každého souboru zvlášť a klikněte na tlačítko "lemmetizovat a vypsat jako csv tabulku". Výsledkem by mělo být 10 souborů s lemmetizovanými slovy.

- V každém souboru odstraňujeme duplicitní slova.

- Spojte slova ze souborů do jednoho seznamu.

— Nyní potřebujeme vytvořit frekvenční slovník. Chcete-li to provést, přidejte výsledný seznam do služby https://tools.k50project.ru/lemma/ a klikněte na „vytvořit frekvenční slovník ve formě CSV“.

- Náš seznam slov je připraven:

Pokud je frekvence 10, pak bylo toto slovo použito na všech 10 stránkách, pokud 8, pak pouze na 8 atd. Doporučujeme používat nejfrekventovanější slova, nicméně mezi vzácnými slovy lze nalézt zajímavá řešení.

Tímto jednoduchým způsobem můžete získat seznam tematických slov pro sestavení TOR pro copywritery.

Jak vidíte, konkurenti jsou velmi důležitým zdrojem informací, které vám mohou pomoci lépe optimalizovat vaše stránky. V tomto článku jsem nepokryl zdaleka všechny aspekty a v budoucnu budu pokračovat v psaní o tom, co je užitečné a jak se můžete učit od svých konkurentů.

Odebírat novinky Tyto algoritmy jsou navrženy pro vyhledávání v dříve neznámém textu a lze je použít například v textových editorech, prohlížečích dokumentů nebo webových prohlížečích k vyhledávání na stránce. Nevyžadují předběžné zpracování textu a mohou pracovat s nepřetržitým proudem dat.

Lineární vyhledávání

Jednoduchá sekvenční aplikace dané metriky (například Levenshteinovy ​​metriky) na slova ze vstupního textu. Při použití metriky s limitem vám tato metoda umožňuje dosáhnout optimálního výkonu. Ale zároveň tím víc k, čím déle se prodlužuje doba běhu. Asymptotický odhad času - O(kn).

Bitap (také známý jako Shift-Or nebo Baeza-Yates-Gonnet a jeho modifikace z Wu-Manber)

Algoritmus bitap a jeho různé modifikace se nejčastěji používají pro fuzzy vyhledávání bez indexování. Jeho variace se používá například v unixové utilitě agrep , která plní funkce podobné standardnímu grep , ale s podporou chyb ve vyhledávacím dotazu a dokonce poskytuje omezené možnosti použití regulárních výrazů.

Poprvé byla myšlenka tohoto algoritmu navržena občany Ricardo Baeza-Yates A Gaston Gonnet, publikující související článek v roce 1992.
Původní verze algoritmu se zabývá pouze záměnami znaků a ve skutečnosti počítá vzdálenost Hamming. Ale o něco později slunce wu A Udi Manber navrhl modifikaci tohoto algoritmu pro výpočet vzdálenosti Levenshtein, tj. přinesl podporu pro vkládání a mazání a na jejím základě vyvinul první verzi nástroje agrep.






Výsledná hodnota

Kde k- počet chyb, j- index znaků, s x - maska ​​znaku (v masce jsou jednotlivé bity umístěny na pozicích odpovídajících pozicím daného znaku v požadavku).
Shoda nebo neshoda s dotazem je určena úplně posledním bitem výsledného vektoru R.

Vysoká rychlost tohoto algoritmu je zajištěna bitovým paralelismem výpočtů - v jedné operaci je možné provádět výpočty na 32 i více bitech současně.
Triviální implementace zároveň podporuje vyhledávání slov o délce maximálně 32. Toto omezení je dáno šířkou standardního typu int(na 32bitových architekturách). Můžete také použít typy velkých rozměrů, ale to může do určité míry zpomalit algoritmus.

Nehledě na to, že asymptotická doba běhu tohoto algoritmu O(kn) je stejná jako lineární metoda, je mnohem rychlejší s dlouhými dotazy a počtem chyb k přes 2.

Testování

Testování bylo provedeno na textu o 3,2 milionu slov, průměrná délka slova byla 10.
Přesné vyhledávání
Doba vyhledávání: 3562 ms
Vyhledávejte pomocí Levenshteinovy ​​metriky
Čas hledání v k=2: 5728 ms
Čas hledání v k=5: 8385 ms
Vyhledávejte pomocí algoritmu Bitap s úpravami Wu-Manber
Čas hledání v k=2: 5499 ms
Čas hledání v k=5: 5928 ms

Je zřejmé, že jednoduché vyhledávání pomocí metriky, na rozdíl od algoritmu Bitap, je vysoce závislé na počtu chyb. k.

Pokud však dojde k prohledávání velkého množství nezměněného textu, lze dobu hledání výrazně zkrátit předzpracováním takového textu, tzv. indexování.

Fuzzy vyhledávací algoritmy s indexováním (offline)

Charakteristickým rysem všech fuzzy vyhledávacích algoritmů s indexováním je, že index je vytvořen podle slovníku sestaveného ze zdrojového textu nebo seznamu záznamů v databázi.

Tyto algoritmy používají různé přístupy k řešení problému – některé využívají redukci na přesné vyhledávání, jiné využívají vlastnosti metriky k budování různých prostorových struktur a tak dále.

Nejprve se v prvním kroku ze zdrojového textu sestaví slovník obsahující slova a jejich pozice v textu. Můžete také počítat frekvence slov a frází, abyste zlepšili kvalitu výsledků vyhledávání.

Předpokládá se, že index, stejně jako slovník, je plně načten do paměti.

Taktické a technické vlastnosti slovníku:

  • Zdrojový text - 8,2 gigabajtů materiálů z knihovny Moshkov (lib.ru), 680 milionů slov;
  • Velikost slovníku - 65 megabajtů;
  • Počet slov - 3,2 milionu;
  • Průměrná délka slova je 9,5 znaků;
  • Délka středního čtvercového slova (může být užitečná při vyhodnocování některých algoritmů) - 10,0 znaků;
  • Abeceda - velká písmena A-Z, bez E (pro zjednodušení některých operací). Slova obsahující neabecední znaky nejsou zahrnuta do slovníku.
Závislost velikosti slovníku na objemu textu není striktně lineární - do určitého objemu se tvoří základní slovní rámec v rozmezí od 15 % při 500 tisíc slov do 5 % při 5 milionech a dále se závislost blíží lineárně. pomalu klesající a dosahující 0,5 % při 680 milionech slov. Následné udržování růstu je zajištěno z větší části vzácnými slovy.

Ukázkový expanzní algoritmus

Tento algoritmus se často používá v systémech kontroly pravopisu (tj. kontroly pravopisu), kde je velikost slovníku malá nebo kde rychlost není hlavním kritériem.
Je založen na redukci problému fuzzy hledání na problém přesného hledání.

Z původního dotazu se sestaví množina „chybných“ slov, u každého se pak provede přesné vyhledávání ve slovníku.

Jeho doba běhu silně závisí na počtu k chyb a na velikosti abecedy A a v případě použití binárního slovníkového vyhledávání je:

Například kdy k = 1 a slova o délce 7 (například „Krokodýl“) v ruské abecedě bude mít soubor chybných slov velikost asi 450, to znamená, že bude nutné provést 450 slovníkových dotazů, což je docela přijatelné.
Ale již v k = 2 velikost takové sady bude více než 115 tisíc možností, což odpovídá úplnému výčtu malého slovníku, v našem případě 1/27, a proto bude běhová doba poměrně velká. Zároveň by se nemělo zapomínat, že pro každé z těchto slov je nutné hledat ve slovníku přesnou shodu.

zvláštnosti:
Algoritmus lze snadno upravit tak, aby generoval "chybné" varianty podle libovolných pravidel, a navíc nevyžaduje žádné předběžné zpracování slovníku, a tedy další paměť.
Možná vylepšení:
Je možné generovat ne celou množinu „chybných“ slov, ale pouze ta z nich, která se s největší pravděpodobností vyskytují v reálné situaci, například slova beroucí v úvahu běžné pravopisné nebo překlepové chyby.

Tato metoda existuje již dlouhou dobu a je nejpoužívanější, protože její implementace je extrémně jednoduchá a poskytuje poměrně dobrý výkon. Algoritmus je založen na principu:
"Pokud slovo A odpovídá slovu B, za předpokladu několika chyb, pak s vysokou mírou pravděpodobnosti budou mít alespoň jeden společný podřetězec délky N."
Tyto podřetězce délky N se nazývají N-gramy.
Během indexování je slovo rozděleno na takové N-gramy a poté je toto slovo zahrnuto do seznamů pro každý z těchto N-gramů. Při vyhledávání se dotaz také rozdělí na N-gramy a pro každý z nich se postupně prohledává seznam slov obsahující takový podřetězec.

V praxi se nejčastěji používají trigramy - podřetězce délky 3. Volba větší hodnoty N vede k omezení minimální délky slova, při které je již detekce chyb možná.

zvláštnosti:
Algoritmus N-gram nenajde všechna možná chybně napsaná slova. Vezmeme-li např. slovo VOTKA, a rozložíme ho na trigramy: IN T KA → VO T O T NA T KA - vidíte, že všechny obsahují chybu T. Slovo "VODKA" tedy nebude nalezeno, protože neobsahuje žádný z těchto trigramů, a nebude spadat do seznamů, které jim odpovídají. Čím kratší je délka slova a čím více chyb obsahuje, tím vyšší je šance, že nebude spadat do seznamů odpovídajících N-gramům dotazu a nebude přítomno ve výsledku.

Mezitím metoda N-gram ponechává plný prostor pro použití vašich vlastních metrik s libovolnými vlastnostmi a složitostí, ale musíte za to zaplatit - při jejím použití musíte stále postupně vyjmenovat asi 15% slovníku, což je docela hodně pro velké slovníky.

Možná vylepšení:
Hašovací tabulky N-gramů je možné rozdělit podle délky slov a podle polohy N-gramu ve slově (úprava 1). Jak se délka hledaného slova a dotazu nemůže lišit o více než k a pozice N-gramu ve slově se mohou lišit maximálně o k. Bude tedy nutné zkontrolovat pouze tabulku odpovídající pozici tohoto N-gramu ve slově, dále k tabulek vlevo a k tabulek vpravo, tzn. Celkový 2 tisíc + 1 sousední stoly.

Velikost sady potřebnou ke skenování můžete dále zmenšit rozdělením tabulek podle délky slova a podobným prohlížením pouze sousedních tabulek. 2 tisíc + 1 tabulky (úprava 2).

Tento algoritmus je popsán v článku L. M. Boytsova. Hašování podpisu. Vychází z celkem zřejmé reprezentace „struktury“ slova ve formě bitů, používaných jako hash (podpis) v hashovací tabulce.

Během indexování se takové hash vypočítávají pro každé ze slov a do tabulky se zanese korespondence seznamu slov ze slovníku s tímto hashem. Poté se během vyhledávání vypočítá hash pro dotaz a vytřídí se všechny sousední hashe, které se od původního liší maximálně o k bitů. Pro každý z těchto hashů je prohledán seznam odpovídajících slov.

Proces výpočtu hashe - každému bitu hashe je přiřazena skupina znaků z abecedy. Bit 1 na pozici i v hash znamená, že původní slovo obsahuje znak z i-tý abecední skupiny. Pořadí písmen ve slově je absolutně irelevantní.

Odebráním jednoho znaku se buď nezmění hašovací hodnota (pokud jsou ve slově stále znaky ze stejné skupiny abecedy), nebo se bit odpovídající této skupině změní na 0. Při vložení stejným způsobem se buď jeden bit nastavit na 1, jinak nedojde k žádným změnám. Při výměně znaků je vše trochu složitější - hash může buď zůstat nezměněný, nebo se může změnit na 1 nebo 2 pozicích. Při permutaci nedochází k žádným změnám, protože se nebere v úvahu pořadí znaků při konstrukci hashe, jak bylo uvedeno výše. Chcete-li tedy zcela pokrýt k chyb, musíte alespoň změnit 2k bit v hash.

Průběžná doba v průměru s k "neúplnými" chybami (vložení, vymazání a transpozice, stejně jako malá část nahrazení):

zvláštnosti:
Vzhledem k tomu, že při nahrazení jednoho znaku se mohou změnit dva bity najednou, algoritmus, který implementuje například zkreslení maximálně 2 bitů současně, ve skutečnosti neprodukuje plné množství výsledků kvůli absenci významná (v závislosti na poměru velikosti hash a abeceda) část slov se dvěma záměnami (a čím větší je velikost hashe, tím častěji záměna znaků povede ke zkreslení dvou bitů najednou, a tím méně kompletní výsledek bude). Tento algoritmus navíc neumožňuje vyhledávání prefixů.

BK stromy

Stromy Burkhard-Keller jsou metrické stromy, algoritmy pro konstrukci takových stromů jsou založeny na vlastnosti metriky splnit trojúhelníkovou nerovnost:

Tato vlastnost umožňuje metrikám vytvářet metrické prostory libovolné dimenze. Takové metrické prostory nejsou nezbytně nutné euklidovský, tedy například metriky Levenshtein A Damerau-Levenshtein formulář neeuklidovské prostor. Na základě těchto vlastností můžete sestavit datovou strukturu, která vyhledává v takovém metrickém prostoru, kterým jsou Barkhard-Kellerovy stromy.

Vylepšení:
Schopnost některých metrik můžete využít k výpočtu vzdálenosti s omezením nastavením horní hranice rovnající se součtu maximální vzdálenosti k potomkům vrcholu a výsledné vzdálenosti, což proces mírně urychlí:

Testování

Testování probíhalo na notebooku s Intel Core Duo T2500 (2GHz/667MHz FSB/2MB), 2Gb RAM, OS - Ubuntu 10.10 Desktop i686, JRE - OpenJDK 6 Update 20.

Testování bylo provedeno pomocí vzdálenosti Damerau-Levenshtein a počtu chyb k = 2. Velikost indexu je uvedena společně se slovníkem (65 MB).

Velikost indexu: 65 MB
Doba vyhledávání: 320 ms / 330 ms
Úplnost výsledků: 100 %

N-gramů (originál)
Velikost indexu: 170 MB
Doba vytvoření indexu: 32 s
Doba vyhledávání: 71 ms / 110 ms
Úplnost výsledků: 65 %
N-gramů (modifikace 1)
Velikost indexu: 170 MB
Doba vytvoření indexu: 32 s
Doba vyhledávání: 39 ms / 46 ms
Úplnost výsledků: 63 %
N-gramů (modifikace 2)
Velikost indexu: 170 MB
Doba vytvoření indexu: 32 s
Doba vyhledávání: 37 ms / 45 ms
Úplnost výsledků: 62 %

Velikost indexu: 85 MB
Čas vytvoření indexu: 0,6 s
Doba vyhledávání: 55 ms
Úplnost výsledků: 56,5 %

BK stromy
Velikost indexu: 150 MB
Doba vytvoření indexu: 120 s
Doba vyhledávání: 540 ms
Úplnost výsledků: 63 %

Celkový

Většina indexovaných fuzzy vyhledávacích algoritmů není skutečně sublineární (tj. mají asymptotickou dobu běhu O(log n) nebo nižší) a jejich rychlost provozu je obvykle přímo závislá N. Nicméně četná vylepšení a vylepšení umožňují dosáhnout dostatečně krátké doby běhu i u velmi velkých objemů slovníků.

Existuje také mnoho rozmanitějších a neefektivnějších metod založených mimo jiné na přizpůsobení různých technik a technik již používaných jinde dané tematické oblasti. Mezi tyto metody patří přizpůsobení prefixových stromů (Trie) problémům fuzzy vyhledávání, které jsem nechal bez dozoru kvůli jeho nízké účinnosti. Existují však také algoritmy založené na originálních přístupech, například algoritmus Maass-Novák, který má sice sublineární asymptotickou dobu běhu, ale je extrémně neefektivní kvůli obrovským konstantám skrytým za takovým časovým odhadem, které se projevují v podobě obrovské velikosti indexu.

Praktické použití fuzzy vyhledávacích algoritmů ve skutečných vyhledávačích úzce souvisí s fonetickými algoritmy, lexikálními stemming algoritmy - zvýrazněním základní části různých slovních forem stejného slova (takovou funkci poskytují například Snowball a Yandex mystem), jako také hodnocení na základě statistických informací nebo pomocí složitých sofistikovaných metrik.

  • Levenshteinova vzdálenost (s možností oříznutí a předpony);
  • Vzdálenost Damerau-Levenshtein (s možností oříznutí a předpony);
  • Bitap algoritmus (Shift-OR / Shift-AND s modifikacemi Wu-Manber);
  • Ukázkový expanzní algoritmus;
  • N-gram metoda (původní a s úpravami);
  • metoda hašování podpisu;
  • BK-stromy.
Chtěl jsem, aby byl kód snadno srozumitelný a zároveň dostatečně efektivní pro praktické použití. Vymáčknutí poslední šťávy z JVM nebylo součástí mých úkolů. užívat si.

Stojí za zmínku, že v procesu studia tohoto tématu jsem přišel s některými svými vlastními pokroky, které mi umožňují řádově zkrátit dobu vyhledávání v důsledku mírného nárůstu velikosti indexu a určitého omezení v svobodu výběru metrik. Ale to je úplně jiný příběh.


Definice Příklad Aplikace Vytvoření n-gramového jazykového modelu Výpočet n-gramové pravděpodobnosti Eliminace vzácnosti trénovacího korpusu o Add-one Smoothing o Witten-Bell Discounting o Good-Turing Discounting o Katzs Backoff o Odstraněná interpolace Odhad n-gramového jazykového modelu pomocí entropie Obsah


N-gram (anglicky N-gram) podsekvence N prvků nějaké sekvence. Zvažte posloupnosti slov. Unigramy kočka, pes, kůň,... Bigramy malá kočka, velký pes, silný kůň,... Trigramy malá kočka žere, velký pes štěká, silný kůň běží,... Definice


Příklady aplikovaných úloh Rozpoznávání řeči. Některá slova s ​​různým pravopisem se vyslovují stejně. Úkolem je vybrat správné slovo v kontextu. Generování textů na zadané téma. Příklad: Yandex.Abstracts. Hledejte sémantické chyby. Snaží se to doladit - z hlediska syntaxe je pravda, z hlediska sémantiky ne. Snaží se to zjistit – správně. pokus o zjištění se v anglických textech vyskytuje mnohem častěji než pokus o vyjasnění, což znamená, že pokud jsou k dispozici statistiky, můžete tento druh chyby najít a odstranit


Vytvoření jazykového modelu n-gramů Pro řešení uvedených aplikovaných problémů je nutné vytvořit jazykový model N-gramů. K vytvoření modelu je potřeba: 1. Spočítat pravděpodobnosti n-gramů v tréninkovém korpusu. 2. Opravte problém s řídkostí trupu pomocí jedné z metod vyhlazování. 3. Zhodnoťte kvalitu výsledného jazykového modelu n-gramů pomocí entropie.


Výpočet pravděpodobnosti N-gramů (1) V tréninkovém korpusu se určité n-gramy vyskytují s různými frekvencemi. Pro každý n-gram můžeme spočítat, kolikrát se vyskytuje v korpusu. Na základě získaných dat lze sestavit pravděpodobnostní model, pomocí kterého lze následně odhadnout pravděpodobnost n-gramů v některém testovacím korpusu.


Výpočet pravděpodobnosti N-gramů (2) Zvažte příklad. Nechť se korpus skládá z jedné věty: Piknikovali u bazénu, pak si lehli do trávy a dívali se na hvězdy Vyberme n-gramy. Unigramy: Oni, štípaní, … Digramy: Piknikovaní, štípaní, … Trigramy, štípaní, štípaní, u bazénu, …


Výpočet pravděpodobnosti N-gramů (3) Nyní je možné počítat n-gramů. Všechny vybrané bi- a trigramy se v korpusu vyskytují jednou. Všechny unigramy, s výjimkou slova the, se také vyskytují jednou. Slovo the se vyskytuje třikrát. Nyní, když víme, kolikrát se každý n-gram vyskytuje, můžeme sestavit pravděpodobnostní model n-gramů. V případě unigramů lze pravděpodobnost slova u vypočítat podle vzorce: Například pro slovo bude pravděpodobnost 3/16 (protože v korpusu je 16 slov, z nichž 3 jsou slovo the) . Počet výskytů slova u v tréninkovém korpusu Udělali si piknik u bazénu, pak si lehli zpět do trávy a dívali se na hvězdy


1 je pravděpodobnost uvažována poněkud jinak. Vezměme si případ bigramů: nechť je nutné vypočítat pravděpodobnost toho, že bigram bude hromada. Pokud považujeme každé slovo bigramu za nějakou událost, pak věřit" title="(!LANG:N-gramový výpočet pravděpodobnosti (4) Pro n-gramy, kde n>1, se pravděpodobnost počítá poněkud jinak. Uvažujme případ bigramů : ať je třeba vypočítat digram the pool Pokud každé slovo digramu považujeme za nějakou událost, pak věřit" class="link_thumb"> 9 !} Výpočet pravděpodobnosti N-gramů (4) Pro n-gramy, kde n>1, se pravděpodobnost počítá poněkud odlišně. Vezměme si případ bigramů: nechť je nutné vypočítat pravděpodobnost toho, že bigram bude hromada. Pokud považujeme každé slovo bigramu za nějakou událost, pak pravděpodobnost souboru událostí lze vypočítat podle vzorce: Pravděpodobnost bigramu je tedy pool:, kde 1 je pravděpodobnost uvažována poněkud jinak. Vezměme si případ bigramů: nechť je nutné vypočítat pravděpodobnost toho, že bigram bude hromada. Pokud považujeme každé slovo bigramu za nějakou událost, pak při víře "> 1 se pravděpodobnost uvažuje poněkud jinak. Uvažujme případ bigramů: je třeba vypočítat pravděpodobnost bigramu the pool. Pokud každé slovo bigramu považujeme za nějakou událost, pak lze pravděpodobnost množiny událostí vypočítat podle vzorce : Pravděpodobnost bigramu je tedy pool:, kde "> 1, pravděpodobnost se počítá trochu jinak. Vezměme si případ bigramů: nechť je nutné vypočítat pravděpodobnost toho, že bigram bude hromada. Pokud považujeme každé slovo bigramu za nějakou událost, pak věřit" title="(!LANG:N-gramový výpočet pravděpodobnosti (4) Pro n-gramy, kde n>1, se pravděpodobnost počítá poněkud jinak. Uvažujme případ bigramů : ať je třeba vypočítat digram the pool Pokud každé slovo digramu považujeme za nějakou událost, pak věřit"> title="Výpočet pravděpodobnosti N-gramů (4) Pro n-gramy, kde n>1, se pravděpodobnost počítá poněkud odlišně. Vezměme si případ bigramů: nechť je nutné vypočítat pravděpodobnost toho, že bigram bude hromada. Pokud považujeme každé slovo digramu za nějakou událost, pak věřit"> !}


Výpočet pravděpodobnosti N-gramů (5) Nyní zvažte výpočet pravděpodobnosti libovolného n-gramu (nebo věty o délce n). Rozšířením případu bigramů získáme pravděpodobnostní vzorec pro n-gramy Výpočet pravděpodobnosti věty je tedy redukován na výpočet podmíněné pravděpodobnosti N-gramů, které tvoří tuto větu:




Eliminace řídkosti korpusu (1) Problém jednoduchého (nevyhlazeného) jazykového modelu n-gramů: u některých n-gramů může být pravděpodobnost značně podhodnocena (nebo dokonce nulová), ačkoli ve skutečnosti (v testovacím korpusu) tyto n-gramy se mohou vyskytovat poměrně často. Důvod: omezený tréninkový korpus a jeho specifičnost. Řešení: Snížením pravděpodobnosti některých n-gramů zvyšte pravděpodobnost těch n-gramů, které se v trénovacím korpusu nevyskytovaly (nebo se s nimi setkaly poměrně zřídka).




Eliminace řídkého korpusu (3) V algoritmech eliminace řídkosti se používají následující koncepty: Typy – různá slova (sekvence slov) v textu. Tokeny jsou všechna slova (sekvence slov) v textu. Udělali si piknik u bazénu, pak si lehli do trávy a dívali se na hvězdy – 14 druhů, 16 žetonů





Add-one smoothing (4) Metoda vyvolává velkou chybu ve výpočtech (např. na předchozím snímku bylo ukázáno, že u slova čínština se počet bigramů snížil 8krát). Testy ukázaly, že nevyhlazený model často ukazuje přesnější výsledky. Proto je metoda zajímavá pouze z teoretického hlediska.


Witten-Bell Discounting (1) Na základě jednoduché myšlenky: použijte data o n-gramech vyskytujících se v tréninkovém korpusu k odhadu pravděpodobnosti chybějících n-gramů. Myšlenka metody je převzata z kompresních algoritmů: jsou uvažovány dva typy událostí - setkaly se s novým znakem (typem) a setkaly se se znakem (tokenem). Pravděpodobnostní vzorec pro všechny chybějící n-gramy (tedy pravděpodobnost setkání s n-gramem v testovacím korpusu, který nebyl v tréninkovém korpusu): N je počet tokenů v tréninkovém korpusu, T je počet typů se kterými se již ve školicím korpusu setkali






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




Good-Turingův diskont (1) Myšlenka: Pro n-gramy, které se vyskytují nulakrát (ckrát), je skóre úměrné počtu n-gramů, které se vyskytují jednou (c + 1krát). Zvažte příklad: Předpokládejme, že bylo chyceno 18 ryb. Celkem bylo uloveno 6 různých druhů a u tří druhů byl uloven pouze jeden zástupce. Musíme najít pravděpodobnost, že další ryba bude patřit novému druhu. Možných druhů je celkem 7 (uloveno již 6 druhů).








Katzs Backoff (2) Koeficient α je nezbytný pro správné rozdělení zbytkové pravděpodobnosti N-gramů v souladu s rozdělením pravděpodobnosti (N-1)-gramů. Pokud nezadáte α, bude odhad chybný, protože rovnost nebude splněna: Výpočet α je uveden na konci zprávy. Vyhodnocení jazykového modelu pomocí entropie (1) Entropie je mírou nejistoty. Pomocí entropie lze určit nejvhodnější jazykový model N-gramů pro danou aplikovanou úlohu. Vzorec binární entropie: Příklad: Vypočítejte entropii testu házení mincí. Odpověď: 1 bit, za předpokladu, že výsledky experimentu jsou stejně pravděpodobné (každá strana vypadne s pravděpodobností 1/2).




Vyhodnocení jazykového modelu pomocí entropie (3) Křížová entropie se používá k porovnání různých jazykových modelů: Čím blíže je hodnota křížové entropie H(p,m) ke skutečné entropii H(p), tím lepší je jazykový model: V našem případě je H(p ) entropie testovacího korpusu. m(w) – jazykový model (např. N-gramový model)


Hodnocení jazykového modelu pomocí entropie (4) Existuje další metoda hodnocení kvality jazykového modelu, založená na tzv. indikátor konektivity (zmatenost). Nápad: Vypočítejte pravděpodobnost celého testovacího korpusu. Lepší model bude vykazovat vyšší pravděpodobnost. vzorec zmatku: Čím menší zmatek, tím lepší model. Zmatenost lze interpretovat jako průměrný počet slov, která mohou následovat za určitým slovem (tj. čím větší zmatek, tím vyšší nejednoznačnost, a tedy horší jazykový model). Vztah mezi perplexitou a binární entropií:


Odhad jazykového modelu pomocí entropie (5) Jako příklad uvažujme hodnoty perplexity pro nějaký korpus, získané pomocí trénovaných modelů unigramů, bigramů a trigramů: V případě trigramů je perplexita nejmenší, protože jednoznačnost je usnadněna nejdelší délkou historie ze všech modelů (rovná se 2) při výpočtu podmíněných pravděpodobností trigramů. UnigramBigramTrigram Zmatenost


Chci implementovat nějaké n-gramové aplikace (nejlépe v PHP).

Jaký typ n-gramů je pro většinu účelů vhodnější? Úroveň slova nebo úroveň postavy n-gram úroveň? Jak lze implementovat n-gramatický tokenizer v PHP?

Nejprve bych rád věděl, co jsou N-gramy. Je to správné? Takto rozumím n-gramům:

Návrh: "Žiji v New Yorku."

biramy na úrovni slova (2 pro n): "# já", "žiju", "bydlím v", "v New Yorku", "NY #"

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

Jakmile budete mít toto pole n-gramových částí, hodíte duplikáty a přidáte počítadlo pro každou část, která určuje frekvenci:

biggramy na úrovni slova:

biggramy na úrovni postavy:

Je to správně?

Také bych rád věděl více o tom, co můžete dělat s n-gramy:

  • Jak zjistím jazyk textu pomocí n-gramů?
  • Je možné provést strojový překlad pomocí n-gramů, i když nemáte dvojjazyčný korpus?
  • Jak vytvořit spamový filtr (spam, ham)? Kombinovat n-gramy s Bayesovským filtrem?
  • Jak najdu téma? Například: existuje text o basketbalu nebo psech? Můj přístup (udělejte následující s článkem Wikipedie pro „psi“ a „basketbal“): vykreslete n-gramové vektory pro oba dokumenty, normalizujte je, vypočítejte vzdálenost Manhattan/Euclid, čím blíže je výsledek k 1, tím vyšší podobnost bude

Jak se vám líbí moje přihláška, zvláště ta poslední?

Doufám, že mi můžete pomoci. Díky předem!

2 odpovědi

Slovo n-gram bude obecně užitečnější pro většinu aplikací pro analýzu textu, které jste zmínil, s možnou výjimkou definice jazyka, kde by něco jako znakové trigramy mohlo poskytovat lepší výsledky. Efektivně byste vytvořili vektor n-gramů pro tělo textu v každém jazyce, který vás zajímá, a poté porovnali frekvence trigramů v každém korpusu s frekvencemi v dokumentu, který klasifikujete. Například trigram the se pravděpodobně objeví mnohem častěji v angličtině než v němčině a poskytne určitou úroveň statistické korelace. Jakmile budete mít n-gramové dokumenty, máte na výběr z mnoha algoritmů pro další analýzu, Baysovské filtry, N Nearest Neighbor, Support Vector Machines atd.

Z aplikací, které jste zmínil, je strojový překlad pravděpodobně nejvzdálenější, protože samotné n-gramy vás příliš daleko nedostanou. Převod vstupního souboru na n-gramovou reprezentaci je jen způsob, jak vložit data do formátu pro další analýzu funkcí, ale protože ztratíte spoustu kontextových informací, nemusí to být užitečné pro překlad.

Jedna věc, kterou je třeba poznamenat, je, že nestačí vytvořit vektor pro jeden dokument a vektor pro jiný dokument, pokud se rozměry neshodují. To znamená, že první záznam ve vektoru nemůže být v jednom dokumentu a je v jiném, jinak nebudou algoritmy fungovat. Skončíte s vektory jako , protože většina dokumentů nebude obsahovat více než n-gramů, které vás zajímají. Tato "podšívka" také vyžaduje, abyste si předem určili, které ngramy zahrnete do své analýzy. Často je to implementováno jako dvouprůchodový algoritmus, který nejprve rozhodne o statistické významnosti různých n-gramů, aby se rozhodlo, co zachovat. Google "výběr funkcí" pro více informací.

Slovní n-gramy plus podpora vektorových strojů je skvělý způsob, jak definovat téma, ale k přípravě klasifikátoru potřebujete velký korpus textu předem roztříděného na témata „on-topic“ a „off-topic“. Na webu jako je citeseerx najdete velké množství výzkumných prací vysvětlujících různé přístupy k tomuto problému. K tomuto problému bych nedoporučoval přístup euklidovské vzdálenosti, protože neváží jednotlivé n-gramy na základě statistické významnosti, takže dva dokumenty, které obsahují , a , je a of by byly považovány za lepší shodu než dva dokumenty , který zahrnoval Baysian. Odstranění zastavovacích slov z vašich n-gramů zájmu by to trochu zlepšilo.

S definicí n-gramů máte pravdu.

Pro aplikace typu vyhledávání můžete použít n-gramy na úrovni slova. N-gramy na úrovni znaků lze použít spíše k analýze samotného textu. Například pro identifikaci jazyka textu bych použil četnosti písmen oproti zavedeným jazykovým frekvencím. To znamená, že text by měl přibližně odpovídat frekvenci výskytu písmen v tomto jazyce.

N-gramatický tokenizer pro slova v PHP lze provést pomocí strtok:

Pro postavy použijte split:

Poté můžete pole rozdělit, jak chcete, na libovolný počet n-gramů.

Bayesovské filtry musí být vyškoleny pro použití jako spamové filtry, které lze použít ve spojení s n-gramy. Musíte mu však dát hodně informací, aby se učil.

Váš poslední přístup zní slušně, protože se učí kontext stránky... je to však stále docela složité, ale n-gramy se zdají být dobrým výchozím bodem pro toto.