Otthon / Linux áttekintés / N-gramm. Lapon belüli optimalizálás fejlesztése a versenytársak segítségével Program n betűt gramm

N-gramm. Lapon belüli optimalizálás fejlesztése a versenytársak segítségével Program n betűt gramm


Definíció Példák alkalmazott problémákra n-gram nyelvi modell készítése n-gramok valószínűségének kiszámítása A 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ó Az n becslése -gram nyelvi modell entrópia használatával Tartalom


Az N-gram (angolul N-gram) valamely sorozat N elemének részsorozata. Nézzük meg a szavak sorozatait. 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 problémákra 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 - szintaktikai szempontból ez igaz, szemantikai szempontból nem. Megpróbálja kideríteni – ez így van. a kideríteni próbálás sokkal gyakrabban található meg az angol szövegekben, mint a finomítás, ami azt jelenti, hogy ha van statisztikája, akkor megtalálhatja és kiküszöbölheti az ilyen jellegű hibát.


Nyelvi modell készítése n-gramokból A felsorolt ​​alkalmazási problémák megoldásához létre kell hozni egy N-gram nyelvi modellt. 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 képzési korpuszban. 2. Szüntesse meg a korpusz ritkaságának problémáját valamelyik simítási módszerrel. 3. Értékelje az eredményül kapott n-gram nyelvi modell 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 előfordulnak különböző frekvenciák. Minden n-gram esetében meg tudjuk számolni, hogy hányszor jelenik meg a korpuszban. A kapott adatok alapján fel lehet építeni egy valószínűségi modellt, amellyel azután megbecsü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) Nézzü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. 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 megszámolhatja az n-grammokat. Minden azonosított bi- és trigram egyszer megjelenik a korpuszban. Minden unigram, a the szó kivételével, szintén egyszer szerepel. A szó háromszor jelenik meg. Most, hogy tudjuk, hogy az egyes n-grammok 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ó valószínűsége 3/16 lesz (mivel 16 szó van a korpuszban, ebből 3 a szó a). Az u szó előfordulásának száma az edzéskorpuszban Piknikeztek a medence mellett, majd visszafeküdtek a fűre és nézték a csillagokat


Az 1. ábrán a valószínűséget kissé eltérően számítják 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 egy bigram minden szavát valamilyen eseménynek tekintjük, akkor a valószínűség" 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 kissé eltérően kerül kiszámításra. Tekintsük a bigramok esetét: legyen szükség a pool valószínűségének kiszámítására, ha a biggram minden szavát valamilyen eseménynek tekintjük" 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éget kissé eltérően számítjuk. 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 bigram minden szavát eseménynek tekintjük, akkor az események halmazának valószínűsége a következő képlettel számítható ki: Így a bigram valószínűsége a pool:, ahol Az 1. ábrán a valószínűséget kissé eltérően számítják 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 a bigram minden szavát valamilyen eseménynek tekintjük, akkor "> 1 hiedelem, akkor 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 bigram valószínűségét a pool Ha minden szót figyelembe veszünk a biggram mint valamilyen esemény, akkor az események halmazának valószínűsége kiszámítható a következő képlettel: Így a pool: biggram valószínűsége, ahol "> 1, a valószínűsége kissé 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 egy bigram minden szavát valamilyen eseménynek tekintjük, akkor a valószínűség" 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 kissé eltérően kerül kiszámításra. Tekintsük a bigramok esetét: legyen szükség a pool valószínűségének kiszámítására, ha a biggram minden szavát valamilyen eseménynek tekintjük"> 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éget kissé eltérően számítjuk. 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 biggram minden szavát valamilyen eseménynek tekintjük, akkor"> !}


N-gramm valószínűségének kiszámítása (5) Most fontolja meg egy tetszőleges n-gram (vagy n hosszúságú mondat) valószínűségének kiszámítását. A bigramok esetét kibővítve megkapjuk az n-gramok valószínűségi képletét: Ilyen képlettel nem könnyű kiszámítani a valószínűséget, ezért bevezetünk egy egyszerűsítést - fix hosszúságú előzményeket használjunk, pl. Így egy 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ához vezet:




A korpusz ritkaságának kiküszöbölése (1) Probléma az elsimítatlan n-gramos nyelvi modellel: 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 az n-gramok meglehetősen gyakran előfordulhatnak . Oka: a kiképző alakulat korlátai é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 (vagy elég ritkán fordultak elő) a képzési korpuszban.




Korpusz ritkaság eltávolítása (3) A ritkaság-eltávolító algoritmusok a következő fogalmakat használják: Típusok – különböző szavak (szósorozatok) a szövegben. Tokenek – minden szó (szósorozat) a szövegben. 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 számítási hibát vált ki (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. Ebből következően a módszer csak elméleti szempontból érdekes.


Witten-Bell diszkontálás (1) Egy egyszerű ötlet alapján: használja fel 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 - egy új szimbólum (típus) és egy szimbólum (token) találkozott. Valószínűségi képlet az összes hiányzó n-gramhoz (azaz annak valószínűsége, hogy a tesztkorpuszban 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, amelyek már találkoztak a képzési korpuszban






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




Good-Turing diszkontálás (1) Ötlet: a nulla alkalommal (s-szer) előforduló n-grammoknál a pontszám arányos az egyszer előforduló n-grammok számával (s + 1-szer). Nézzünk egy példát: Tegyük fel, hogy 18 halat fogtak. Összesen elkapott különböző típusok– 6, és három fajból mindössze egy képviselőt fogtak ki. 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 kifogtak).








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 (3) A különböző nyelvi modellek összehasonlításához keresztentrópiát használunk: 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 (például 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 van 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, az jobb modell. A zavarodottságot úgy értelmezheti, mint egy bizonyos szó után következő szavak átlagos számát (azaz minél nagyobb a zavartsá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 egy bizonyos 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 legnagyobb történeti hossza (2-vel egyenlő), a trigramok feltételes valószínűségeinek kiszámításakor. UnigramBigramTrigram Perplexity


Szemantikai mag

Egy weboldal sikeres fejlesztéséhez és láthatóságának növeléséhez a modern valóságban folyamatosan bővíteni kell szemantikai mag. Az egyik a legjobb módokat kiterjesztése 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.

Az ingyenesek listája:

— megaindex.ru — „Webhely láthatósága” eszköz

- xtool.ru - egy jól ismert szolgáltatás, amely megmutatja azokat a kulcsszavakat is, amelyek alapján a webhely rangsorolva van

Fizetettek listája:

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

— semrush.ru — csak a Google-ra orientálva

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

A szolgáltatásokon kívül manuális módszert is használhat, amely a cím és a leírás n-grammokra való felosztásán alapul, így egy további kifejezéslista jelenik meg kimenetként.

N-gram - n elemből álló sorozat. A gyakorlatban az N-grammot gyakrabban találjuk meg szavak sorozataként. Két egymást követő elem sorozatát gyakran nevezik nagygramm, 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.

Nézzük meg ezt a technikát lépésről lépésre:

— Kirakjuk a versenyzők címét (leírását). Megtehető a Screaming Frog SEO programmal.

— Szövegszerkesztőben az eredményül kapott listát megtisztítjuk a segédbeszédrészektől, írásjelektől és egyéb szeméttől. A Sublime szövegszerkesztőben a keresés és csere funkciót használom ( gyorsbillentyű ctrl+H), 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:

Oszlopgrófaz ismétlések számát mutatjan-gramm, oszlopfrekvencia -frekvencian- 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. Bővebben blogunk megfelelő részében tudhat meg.

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 megalakultunk teljes lista kérések esetén meg kell szereznünk a versenytársak releváns oldalait és pozícióit (használhatja a seolib.ru szolgáltatást), majd össze kell hasonlítanunk a csoportosításával. Ha egyértelmű, hogy egy versenytárs jó pozíciót foglal el, ugyanakkor csoportosítása eltér a miénktől (például egy versenytárs kérései megoszlanak különböző oldalak, és az egyikre ugyanazok a kéréseink vannak), erre figyelnie kell, és át kell tekintenie webhelye nyitóoldalait.

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

Amint a táblázatból látható, a site.ru webhelyen minden kulcsszóhoz egy céloldal került kiválasztásra. A versenytárs ugyanazon lekérdezésekre különböző oldalakat rangsorol, és TOP vagy ahhoz közeli pozíciót foglal 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.

A szövegek 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öveg mennyisége stb.), hanem a minőségi vagy szemantikai komponensre kell figyelni – hogy mennyire hasznosak az információk, mi a versenytárs kínál, és hogyan csinálja.

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

Tegyük fel, hogy virágot szállítasz és kezdőlap a szövegben garantálod frissességüket. Például így:

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

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

Megéri tőlünk illatos kompozíciókat rendelni, mert 100%-os pénzvisszafizetést garantálunk, 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.

Nézzü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, ez tiszta víz. Valószínűleg az a személy, aki felkeresi az oldalt és vásárlási döntést hoz, szeretné megismerni a termék előnyeit és a lehetséges konfigurációkat, de helyette értelmetlen karakterkészletet kap.

Most nézzük a 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, ha összehasonlítja a versenytársak szövegeit a sajátjával, sok hasznos információhoz juthat, amely segíti a szövegírókat a műszaki specifikációk elkészítésekor.

A szövegek relevanciája

Folytatva a szövegminőség témáját, nem tudjuk nem érinteni azok relevanciáját. Ma ahhoz, hogy a szöveg releváns legyen, nem elég csak kulcsszavakat feltüntetni. Az oldal relevanciájának növeléséhez anélkül, hogy a szöveget spam jellegűvé tenné, a témához kapcsolódó szavakat kell használnia.

A szöveg lekérdezés szempontjából való relevanciájának felmérése során a kereső nemcsak 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 rokon szavak jöhetnek szóba: „törzs”, „agyar”, „természet”, „állatkert”. Ha a szöveg a „püspök” sakkfiguráról szól, akkor ezek a szavak a következők: „darab”, „csekk”, „királynő” stb.

A versenytársak szövegeiben megtalálhatja a lekérdezésekhez legmegfelelőbb szólistát. Ehhez a következő lépéseket kell tennie:

— A kívánt HF kérésnek megfelelően a TOP-10-ből minden szöveget másolunk különböző szövegfájlokba.

— Eltávolítjuk a szövegekből a segédszót, az írásjeleket és a számokat (korábban tárgyaltuk).

- Rendezd a szavakat egy sorban – használd a „keresés és csere” funkciót reguláris kifejezések. Cserélje ki a szóközt a \n karakterrel.

- Ezt követően minden szóalakot át kell vinni a normál szótári alakba (leme). Ehhez használhatja a https://tools.k50project.ru/lemma/ szolgáltatást. A mezőbe minden fájlból külön-külön be kell írnia a szavak listáját, majd kattintson a „lemmetize and output as a csv table” gombra. Az eredmény 10 fájl legyen lemmetizált szavakkal.

— Minden fájlból eltávolítjuk a duplikált szavakat.

— Fájlokból származó szavakat egyesítünk 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 „Gyakoriságszó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 leggyakoribb szavak használatát, de a ritkán előforduló szavak között is találhatunk érdekes megoldásokat.

mint ez egyszerű módon egy listát kaphat a tematikus szavakról a szövegírók műszaki specifikációinak összeállításához.

Amint látja, a versenytársak nagyon fontos információforrást jelentenek, amelyek segíthetnek webhelye jobb optimalizálásában. Ebben a cikkben nem tértem ki minden szempontra, és a jövőben is arról fogok írni, hogy mi hasznos és hogyan tanulhat versenytársaitól.

Iratkozzon fel hírlevelünkre Ezeket az algoritmusokat arra tervezték, hogy korábban ismeretlen szövegek között keressenek, és például használhatók szövegszerkesztők, dokumentumnézegetőket vagy webböngészőket az oldalon való kereséshez. Nem igényelnek szöveges előfeldolgozást, és folyamatos adatfolyammal működhetnek.

Lineáris keresés

Egy adott metrika (például Levenshtein metrika) egyszerű szekvenciális alkalmazása a beviteli szöveg szavaira. Korlátozott mérőszám használata esetén ez a módszer optimális teljesítményt tesz lehetővé. De ugyanakkor annál több k, annál inkább nő a működési idő. Aszimptotikus időbecslés - O(kn).

Bitap (más néven Shift-Or vagy Baeza-Yates-Gonnet, és annak Wu-Manber általi módosítása)

Algoritmus Bitapés annak különféle módosításait leggyakrabban indexelés nélküli fuzzy keresésre használják. Ennek egy változatát használják például az agrep Unix segédprogramban, amely a szabványos 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, 1992-ben megjelent egy kapcsolódó cikk.
Az algoritmus eredeti verziója csak a karakterhelyettesítésekkel foglalkozik, és valójában a távolságot számítja ki Hemming. De egy kicsit később Sun WuÉs Udi Manber javasolta ennek az algoritmusnak a módosítását a távolság kiszámításához Levenshtein, azaz beszúrások és törlések támogatását vezette be, és ennek alapján fejlesztette ki az agrep segédprogram első verzióját.






Az eredményül kapott érték

Ahol k- hibák száma, j- szimbólum index, s x - karaktermaszk (a maszkban az egységbitek a kérésben szereplő karakter pozícióinak megfelelő pozíciókban helyezkednek el).
Azt, hogy egy kérés megfelel-e vagy sem, 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). Nagyobb dimenziós típusok is használhatók, de ez bizonyos mértékig lelassíthatja az algoritmust.

Annak ellenére, hogy ennek az algoritmusnak aszimptotikus futási ideje O(kn) egybeesik a lineáris módszerével, sokkal gyorsabb a hosszú lekérdezések és a hibák száma k több mint 2.

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, változatlan szövegek 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 indexet a forrásszövegből vagy egy adatbázis rekordlistájából összeállított szótár segítségével építik 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éhez, és így tovább.

Mindenekelőtt 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. A keresési eredmények minőségének javítása érdekében megszámolhatja a szavak és kifejezések gyakoriságát is.

Feltételezzük, hogy az index, akárcsak a szótár, teljes egészében 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;
  • Átlagos négyzet alakú szóhossz (egyes algoritmusok kiértékelésénél hasznos lehet) - 10,0 karakter;
  • Ábécé - nagybetűk A-Z betűk, E nélkül (néhány művelet 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 bizonyos mennyiségig kialakul a szavak alapváza, amely 500 ezer szónál 15%-tól 5 millió szónál 5%-ig terjed, majd a a függőség megközelíti a lineárist, lassan csökken, és 680 millió szó esetében eléri a 0,5%-ot A növekedés későbbi fenntartását többnyire ritka szavak biztosítják.

Mintavételi 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.

A kezdeti lekérdezésből összeállítjuk a „hibás” szavak halmazát, 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árban történő keresés esetén pedig:

Például mikor k = 1és 7 hosszúságú szavak (például „Krokodil”) az orosz ábécében, sok hibás szó körülbelül 450 méretű lesz, vagyis 450 lekérdezést kell végrehajtani a szótárban, ami teljesen elfogadható.
De már at k = 2 egy ilyen készlet mérete több mint 115 ezer lehetőség lesz, ami egy kis szótár teljes keresésének felel meg, vagy esetünkben 1/27, és ezért a munkaidő meglehetősen hosszú lesz. Ugyanakkor nem szabad megfeledkeznünk arról, hogy ezen szavak mindegyikéhez meg kell keresni a pontos egyezést a szótárban.

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

Ezt a módszert elég régen találták fel, é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 hibát figyelembe véve, 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 egy szót ezekre az N-grammokra bont a rendszer, majd a szó minden egyes N-grammhoz bekerül a listákba. 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. Ha nagyobb N értéket választunk, az a minimális szóhossz korlátozásához vezet, amelynél a hibák már észlelhetők.

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 trigrammá bontjuk: VO T KA → VO T KÖRÜLBELÜL T TO T KA - észreveheti, hogy mindegyik tartalmazza a T hibát. Így a „VODKA” szó nem található, mivel nem tartalmazza ezeket a trigramokat, és nem szerepel a megfelelő listákban. Így minél rövidebb a szó hossza és minél több hibát tartalmaz, annál nagyobb az esélye, hogy nem kerül be a lekérdezés N-gramjainak megfelelő listákba, és nem lesz jelen az eredményben.

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

Lehetséges fejlesztések:
Az N-gramos hash-táblázatokat feloszthatja a szó hossza és a szóban lévő N-gramos pozíció alapján (1. módosítás). Hogy a keresett szó és a lekérdezés hossza nem térhet el több mint 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 megtekintéshez szükséges készlet méretét, ha a táblázatokat szóhosszal elosztja, és hasonlóképpen csak a szomszédosakat nézi meg. 2k+1 táblázatok (2. módosítás).

Ezt az algoritmust L. M. Boytsov cikke írja le. "Kivonat aláírással." Egy szó „struktúrájának” meglehetősen nyilvánvaló ábrázolásán alapul, bitbitek formájában, amelyeket hash-ként (aláírásként) használnak egy hash-táblázatban.

Az indexelés során minden szóra kiszámolja az ilyen kivonatokat, és beírja 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 kéréshez, és megkeresik az összes szomszédos hash-t, amely legfeljebb k bittel különbözik az eredeti hash-től. Mindegyik kivonat esetében megkeresi a megfelelő szavak listáját.

A hash kiszámításának folyamata - a hash minden bitje az ábécé karaktereinek csoportjához van társítva. 1. bit a pozícióban én a hash azt jelenti, hogy a forrásszó egy karaktert tartalmaz i-thábécé csoportok. A betűk sorrendjének egy szóban semmi értelme.

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. Beszúráskor ugyanilyen módon bármelyik bit menjen az 1-re, különben nem lesz változás. Karakterek cseréjekor minden kicsit bonyolultabb - a hash vagy egyáltalán nem változik, vagy 1 vagy 2 pozícióban változhat. A permutációk során egyáltalán nem történik változás, mivel a szimbólumok sorrendjét a hash felépítésénél 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 bit hash.

Működé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 egyidejűleg, valójában nem adja meg a teljes eredménymennyiséget a szignifikáns (attól függően) hiánya miatt. a hash méretének az ábécéhez viszonyított arányáról) a szavak két cserével ellátott része (és minél nagyobb a hash mérete, annál gyakrabban vezet a karaktercsere egyszerre két bit torzulásához, és annál kevésbé lesz teljes az eredmény ). 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 lehetséges egy olyan adatstruktúra felépítése, amely egy ilyen metrikus térben keres, ami a Barkhard-Keller fák.

Fejlesztések:
Egyes metrikák azon képességét használhatja, hogy megszorítással számítsa ki a távolságot, felső határt állítva be, amely megegyezik a csúcs gyermekei közötti maximális távolság és az ebből eredő távolság összegével, ami egy kicsit felgyorsítja a folyamatot:

Tesztelés

A tesztelés egy laptopon történt Intel Core Duo T2500 (2GHz/667MHz FSB/2MB), 2Gb RAM, OS – Ubuntu 10.10 Desktop i686, JRE – OpenJDK 6, 20. frissítés.

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 feltüntetve (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-gram (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-gram (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 a többszöri fejlesztések és módosítások lehetővé teszik a kellően rövid működési idő elérését még nagyon nagy mennyiségű szótár mellett is.

Sokkal sokrétűbb és eredménytelenebb módszer is létezik, amelyek többek között a különböző technikák és máshol már alkalmazott technikák adott tantárgyi területhez való adaptálásán alapulnak. Ilyen 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 Maassa-Nowak, amely bár szublineáris aszimptotikus futási idővel rendelkezik, rendkívül hatástalan az ilyen időbecslés mögött megbúvó hatalmas konstansok miatt, amelyek hatalmas indexméret formájában jelentkeznek.

Fuzzy keresési algoritmusok gyakorlati alkalmazása a valóságban keresőmotorok szorosan kapcsolódik a fonetikus algoritmusokhoz, a lexikális tőképző algoritmusokhoz - ugyanazon szó különböző szóalakjainak alaprészének elkülönítése (például a Snowball és a Yandex mystem ezt a funkciót biztosítja), valamint statisztikai információkon alapuló rangsorolás, vagy összetett, kifinomult metrikák használata .

  • Levenshtein távolság (levágási és előtag opcióval);
  • Damerau-Levenshtein távolság (levágási és előtag opcióval);
  • Bitap algoritmus (Shift-OR / Shift-AND Wu-Manber módosításokkal);
  • Mintavétel-kiterjeszté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 elég hatékony legyen gyakorlati alkalmazása. Nem az én feladatom volt az utolsó levet kipréselni a JVM-ből. Élvez.

É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 a keresési időt nagyságrenddel csökkentsem az index méretének mérsékelt növekedése és a szabadság bizonyos korlátozása miatt. válasszon mérőszámokat. De ez egy teljesen más történet.

N-gramm használatával

Az N-gramm általános használata

  • adatok kinyerése a Föld műholdképeinek csoportosításához az űrből, hogy aztán eldöntse, 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 származnak DNS-minták,
  • számítógépes tömörítésnél,
  • N-gramm használatával a hanggal kapcsolatos adatok általában indexelve vannak.

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

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

A természetes nyelvi feldolgozás területén az N-gramokat elsősorban valószínűségi modelleken alapuló előrejelzésre használják. Az N-gram modell egy N-gram utolsó szavának valószínűségét számítja ki, ha az összes előzőt ismerjük. Ha ezt a megközelítést alkalmazzuk a modellnyelvre, feltételezzük, hogy az egyes szavak előfordulása 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 kontrollált dokumentumok hasonlóságának mértékét. Az N-gramokat gyakran sikeresen használják szöveg- és nyelvi kategorizálásra. 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álhat jelölteket a hibásan írt szavak helyettesítésére.

Google kutatási projektek

A Google kutatóközpontjai N-gram modelleket használtak számos kutatáshoz és fejlesztéshez. 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 és még sok más. E projektek céljaira több billió szót tartalmazó szövegkorpusokat használtak.

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 kivonására

Az N-gramok gyakori felhasználása miatt különféle problémák megoldására, megbízható és gyors algoritmus szükséges ezeknek a szövegből való kinyeréséhez. Egy megfelelő n-gram kivonatoló eszköznek képesnek kell lennie korlátlan szövegméret kezelésére, gyorsnak kell lennie, é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). A francia egység tömeg = 1 köbcentiméter desztillált víz tömege = 22,5 orosz. részvényeket 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, gen. pl. gramm és elfogadható (szóbeli beszédben a számok után) gramm. Száz gramm (gramm). Védekezésbenúj forma nemzetség. többes számú eset grammszámot beszélt az orosz nyelv szakértője, K. Csukovszkij író. Ezt írta az „Élve, mint élet” című könyvében: ... ...

    Nézze meg, mi az „N-gram” más szótárakban:- 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 (fizikai) egy anyag atomtömegének megfelelő grammok száma.... ... Ushakov magyarázó szótára

    gramm-röntgen- gramm roentgen/n, gramm roentgen/na, gen. pl. gramm roentgen és gramm roentgen... Együtt. Külön. Kötőjeles.

    Orosz nyelv idegen szavak szótára- Nagyi, ez az egyszerű szó nem kerülhetett volna be a hibák szótárába, ha nem két körülmény; először is, ha teljesen korrekt nyelvezetekkel akarsz mutogatni, akkor a boltba érve 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-EGYENESSÉG, ennek tömege grammban... ... Tudományos és műszaki enciklopédikus szótár

    Nézze meg, mi az „N-gram” más szótárakban:- GRAM, ah, kedves. pl. gramm és gramm, férj. Tömegegység a tizedes rendszerben, egy ezred kilogramm. Egy grammot sem (nem) semmiből (köznyelvből) egyáltalán nem, egyáltalán nem. Ennek az embernek (nincs) egy csepp lelkiismerete. | adj. gramm, oh, oh. Intelligens...... Ozsegov magyarázó szótára

    Orosz nyelv idegen szavak szótára- A; pl. nemzetség. gramm és gramm; m [francia] gramme] Tömegegység a metrikus rendszerben, egy ezred kilogramm. ◊ Egy (egy) grammot sem. Egyáltalán nem, egyáltalán nem. Akiben l. egy csepp hazugság sem. Senkinek egy csepp lelkiismerete sincs. * * * gramm (francia ... Enciklopédiai szótár

    Zenob Théophile nagyi- (Gramme) (1826 1901), villamosmérnök. Belgiumban született, Franciaországban dolgozott. Szabadalmat kapott egy gyakorlatilag használható, gyűrűs armatúrával ellátott elektromos generátorra (1869). Megalapította az elektromos gépek ipari gyártását. * * * GRAM Zenob ... ... Enciklopédiai szótár

    gramm-atom- egy 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 (cm ... Enciklopédiai 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édiai szótár

,

Figyelembe vett N-gramok, mint a nyelvi valóság rögzítésének eszköze és mint modellkonstrukció. A modell közötti kapcsolat N-gramok és formális nyelvtanok. Felhívják a figyelmet a valószínűségi modellek használatával járó hiányosságokra és ellentmondásokra.

Bevezetés

Kezdjük egy formális meghatározással. Adjunk meg valamilyen véges ábécét VT={wi), Hol wi– külön szimbólum. Véges hosszúságú láncok (stringek) halmaza, amely alfabetikus karakterekből áll VT, amelyet az ábécében egy nyelvnek neveznek VTés ki van jelölve L(VT). Külön nyelvlánc L(VT)állításnak fogjuk nevezni ezen a nyelven. Viszont, N-gram az ábécében VT lánchossznak nevezzük N. N-gram egybeeshet valamilyen kijelentéssel, lehet annak részkarakterlánca, vagy egyáltalán nem szerepelhet az utasításban L(VT).

Íme néhány példa N-gramm.

3. , N- gramm az orosz nyelv. // Ez a gyűjtemény.

4. Glanz S. Orvosi és biológiai statisztika. Per. angolból szerkesztette És. M., 1999.

5. Leíró nyelvészet. Előszó G. Gleason "Bevezetés a leíró nyelvészetbe" című könyvéhez. M., 1959.

6. Elméleti és alkalmazott nyelvészet. M., 1968.

8. , Szünet automatikus beszédszintézis közben. // A beszédkutatás elmélete és gyakorlata. M. 1999.

9. Minsky M. A kognitív tudattalan szellemessége és logikája. // Újdonság az idegen nyelvészetben. Vol. XXIII. M., 1988.

10. Slobin D., Green J. Pszicholingvisztika. M., 1976

11. Valószínűségelmélet. M., 1972.

12. Fu K. Strukturális módszerek a mintafelismerésben. M., 1977.

13. Harris T. Elágazó véletlenszerű folyamatok elmélete. M., 1966.

14. Brill E. et al. Túl N-grams: A nyelvi kifinomultság javíthatja-e a nyelvi modellezést?

15. Booth T. Formális nyelvek valószínűségi ábrázolása. // IEEE Annual Symp. Kapcsolás és automata elmélet. 1969.

16. Jelinek F.Önszerveződő nyelvi modellezés a beszédfelismeréshez. // Olvasmányok a beszédfelismerésben. 1989.

17. Jevonal F., Lafferty J. A kezdeti részkarakterlánc-generálás valószínűségének kiszámítása sztochasztikus környezetfüggetlen nyelvtan segítségével. // Számítógépes nyelvészet, vol.

18. Harris Z. S. Módszer a strukturális nyelvészetben. Chicago, 1951.

19. Lashley K. A sorozatos sorrend problémája a viselkedésben. // Pszicholingvisztika: Olvasmányok könyve, N. Y. 1961.

20. Schlesinger E. Mondatszerkezet és az olvasási folyamat. Mouton. 1968.

21. Shieber S. Bizonyíték a természetes nyelv kontextus-mentessége ellen. // Nyelvtudomány és filozófia, vol.

22. Sola Pool I. A tartalomelemzés mai trendjei. // Pszicholingvisztika: Olvasmányok könyve, N. Y. 1961

23. Stolcke A., Segal J. Pontos n-gram valószínűségek sztochasztikus kontextusmentes nyelvtanokból. // Az ACL 32. éves közgyűlésének anyaga. 1994.