N-grama. Poboljšanje interne optimizacije uz pomoć konkurenata Pogledajte šta je "N-gram" u drugim rječnicima

Korištenje N-grama

Opća upotreba N-grama

  • ekstrakcija podataka za grupisanje serije satelitskih snimaka Zemlje iz svemira, kako bi se potom odlučilo koji se konkretni dijelovi Zemlje nalaze na slici,
  • traženje genetskih sekvenci,
  • u oblasti genetike koriste se za određivanje od kojih specifičnih životinjskih vrsta su prikupljeni uzorci DNK,
  • u kompjuterskoj kompresiji,
  • pomoću N-grama se po pravilu indeksiraju podaci koji se odnose na zvuk.

N-grami se takođe široko koriste u obradi prirodnog jezika.

Korištenje N-grama za potrebe obrade prirodnog jezika

U oblasti obrade prirodnog jezika, N-grami se uglavnom koriste za predviđanje zasnovano na probabilističkim modelima. N-gramski model izračunava vjerovatnoću posljednje riječi N-grama ako su poznate sve prethodne. Kada se koristi ovaj pristup za modeliranje jezika, pretpostavlja se da izgled svake riječi ovisi samo o prethodnim riječima.

Druga primjena N-grama je otkrivanje plagijata. Ako se tekst podijeli na nekoliko malih fragmenata, predstavljenih n-gramima, oni se mogu lako uporediti jedni s drugima i tako dobiti stepen sličnosti kontroliranih dokumenata. N-grami se često uspješno koriste za kategorizaciju teksta i jezika. Osim toga, mogu se koristiti za kreiranje funkcija koje vam omogućavaju da dobijete znanje iz tekstualnih podataka. Koristeći N-grame moguće je efikasno pronaći kandidate za zamjenu pogrešno napisanih riječi.

Google istraživački projekti

Google istraživački centri su koristili N-gram modele za širok spektar istraživanja i razvoja. To uključuje projekte kao što su statističko prevođenje s jednog jezika na drugi, prepoznavanje govora, ispravljanje pravopisa, ekstrakcija informacija i još mnogo toga. Za potrebe ovih projekata korišteni su korpusni tekstovi koji sadrže nekoliko biliona riječi.

Google je odlučio napraviti vlastitu obrazovnu zgradu. Projekat se zove Google teracorpus i sadrži 1.024.908.267.229 riječi prikupljenih sa javnih web stranica.

Metode izdvajanja n-grama

Zbog česte upotrebe N-grama za rješavanje različitih problema, potreban je pouzdan i brz algoritam za njihovo izdvajanje iz teksta. Odgovarajući alat za ekstrakciju n-grama trebao bi biti u stanju da radi s neograničenom veličinom teksta, radi brzo i efikasno koristi dostupne resurse. Postoji nekoliko metoda za izdvajanje N-grama iz teksta. Ove metode se zasnivaju na različitim principima:

Bilješke

vidi takođe


Wikimedia fondacija. 2010 .

  • n-tv
  • N-kadherin

Pogledajte šta je "N-gram" u drugim rječnicima:

    GRAM- (francuski gramme, od grčkog gramma osobina). Francuska jedinica. težina \u003d težina 1 kubnog centimetra destilovane vode \u003d 22,5 ruske. dionice. Rječnik stranih riječi uključenih u ruski jezik. Chudinov A.N., 1910. GRAM jedinica mjere težine u Francuskoj ... Rečnik stranih reči ruskog jezika

    gram- gram, rod. pl. grama i dozvoljenih (u usmenom govoru iza brojeva) grama. Sto grama (grama). U odbranu novog oblika roda. slučaj pl. broj grama napravio je poznavalac ruskog pisca K. Čukovskog. Evo šta je napisao u knjizi "Živeti kao život": ... ... Rječnik izgovora i poteškoća s naglaskom u savremenom ruskom jeziku

    GRAM- GRAM, gram, muž. (od grčke gramatike znak, slovo). Osnovna jedinica težine u metričkom sistemu, jednaka je težini 1 kubnog centimetra vode. Gram je težak oko 1/400 funte. ❖ Gram atom (fizika) broj grama supstance jednak njenoj atomskoj težini. ... ... Objašnjavajući Ušakovljev rječnik

    gram-rentgen- gram x-ray / n, gram x-ray / on, štap. pl. gram rendgenski i gram rendgenski... spojeno. Apart. Kroz crticu.

    gram- Grame, ova jednostavna riječ ne bi mogla biti data u rječniku grešaka, da nisu dvije okolnosti; prvo, ako želite da se pokažete sa apsolutno ispravnim jezikom, onda, kada ste došli u trgovinu, zapanjite prodavca ispravnim: Izvagajte me dvjesto grama (ne ... ... Rječnik grešaka ruskog jezika

    GRAM-ATOM- GRAM ATOM, količina elementa čija je masa, u gramima, jednaka njegovoj ATOM MASI. Zamijenjen je SI jediničnim molom. Na primjer, jedan gram atoma vodika (H, atomska masa = 1) jednak je jednom gramu. b>GRAMSKI EKVIVALENT, težina u gramima toga… … Naučno-tehnički enciklopedijski rečnik

    GRAM- GRAM, ah, rod. pl. grama i grama, mužu. Jedinica mase u decimalnom sistemu mjera, hiljaditi dio kilograma. Ni unce (ne) bilo čega (kolokvijalno) nimalo, nimalo. Ovaj čovjek (nema) ima ni trunke savjesti. | adj. gram, oh, oh. Objasnjavajuce ... ... Objašnjavajući Ožegovov rječnik

    gram- ali; pl. rod. grama i grama; m. [francuski. gram] Jedinica mase u metričkom sistemu, hiljaditi deo kilograma. ◊ Nema (jednog) grama. Nikako, nimalo. U kome l. ni trunke laži. Niko nema ni trunke savesti. * * * grama (francuski ... enciklopedijski rječnik

    Gramm Zenob Theophilus- (Gramme) (1826 1901), inženjer elektrotehnike. Rođen u Belgiji, radio u Francuskoj. Primio patent za praktični električni generator sa prstenastom armaturom (1869). Osnovao je industrijsku proizvodnju električnih mašina. * * * GRAM Zenob… … enciklopedijski rječnik

    gram atom- količina supstance u gramima, numerički jednaka njenoj atomskoj masi. Termin se ne preporučuje za upotrebu. U SI, količina supstance je izražena u molovima. * * * GRAM ATOM GRAM ATOM, količina supstance u gramima, numerički jednaka njenoj atomskoj masi (vidi ... enciklopedijski rječnik

    gram molekula- količina supstance u gramima, numerički jednaka njenoj molekulskoj težini. Termin se ne preporučuje za upotrebu. U SI, količina supstance je izražena u molovima. * * * GRAM MOLEKULA GRAM MOLEKULA, količina supstance u gramima, brojčano jednaka njenom ... ... enciklopedijski rječnik

Semantičko jezgro

U cilju uspješnog razvoja i povećanja vidljivosti stranice u modernim realnostima, potrebno je stalno širiti semantičko jezgro. Jedan od najboljih načina za rast je prikupljanje konkurentskih ključnih riječi.

Danas nije teško dobiti semantiku konkurenata, jer. Postoji mnogo usluga, plaćenih i besplatnih.

Besplatna lista:

— megaindex.ru — Alat za vidljivost sajta

- xtool.ru - poznati servis koji također prikazuje ključne riječi po kojima je stranica rangirana

Spisak plaćenih:

— spywords.ru — pogodno za Yandex i Google

- semrush.ru - fokusiran samo na Google

— prodvigator.ua — ukrajinski analog spywords.ru

Osim usluga, možete koristiti i ručnu metodu zasnovanu na dijeljenju naslova i opisa na n-grame, zbog čega se na izlazu dobiva dodatna lista fraza.

N-gram - niz od n elemenata. U praksi, N-gram je češći kao niz riječi. Često se naziva niz od dva uzastopna elementa digram, niz od tri elementa se naziva trigram. Najmanje četiri ili više elemenata su označeni kao N-gram, N se zamjenjuje brojem uzastopnih elemenata.

Razmotrite ovu tehniku ​​korak po korak:

- Otpremite naslove (opis) takmičara. Može se uraditi sa Screaming Frog SEO.

- U uređivaču teksta čistimo rezultirajuću listu od uslužnih dijelova govora, znakova interpunkcije i drugog smeća. Koristim funkciju "pretraži i zamijeni" u uređivaču teksta uzvišeni tekst (vrući taster ctrl+H), koristeći regularne izraze:

- Odaberite željeni n-gram i postavite frekvenciju na barem jednu. Najbolja opcija su trigrami i 4 grama:

- Dobijamo sljedeći rezultat:

Kolonacountpokazuje broj ponavljanjan-gram, kolonafrekvencija — frekvencijan-grama.

Nakon što dobijemo listu fraza, moramo je analizirati i odabrati odgovarajuće ključne riječi kako bismo proširili semantičko jezgro. Više detalja možete pronaći u relevantnom dijelu našeg bloga.

Grupiranje zahtjeva

Veoma je važno razumjeti kako se grupiše semantičko jezgro konkurenata, jer ovo pomaže da se ključne fraze pravilno distribuiraju na stranicama stranice.

Da bismo to učinili, nakon što smo generirali kompletnu listu upita, moramo dobiti relevantne stranice i pozicije konkurenata (možete koristiti uslugu seolib.ru), a zatim usporediti s našim grupiranjem. Ako vidite da konkurent ima dobre pozicije, a da se istovremeno njegovo grupisanje razlikuje od našeg (npr. zahtjevi konkurenta su raspoređeni na različitim stranicama, dok naši imaju iste zahtjeve na jednoj stranici), morate obratiti pažnju na ovo i revidirajte odredišne ​​stranice na vašoj web lokaciji.

Razmotrimo mali primjer poređenja grupiranja uvjetne stranice i njenog konkurenta.

Kao što možete vidjeti iz tabele, site.ru ima jednu odredišnu stranicu za sve ključne riječi. Kod konkurenta, različite stranice se rangiraju za iste upite i zauzimaju TOP ili blizu TOP pozicija. Na osnovu toga možemo zaključiti da je grupisanje na site.ru potrebno revidirati, posebno je potrebno napraviti zasebnu stranicu za ključne fraze s riječju "fasada".

Kvalitet teksta

Prva i najvažnija stvar na koju treba obratiti pažnju kada analizirate tekstove konkurenata nije kvantitativna komponenta (broj pojavljivanja, dužina teksta itd.), već kvalitativna ili semantička – koliko su informacije korisne, šta konkurent nudi i kako on to radi.

Pogledajmo nekoliko primjera.

Recimo da dostavljate cvijeće i na glavnoj stranici u tekstu garantujete njihovu svježinu. Na primjer, ovako:

Usluga dostave cvećasite. engarantuje sigurnost buketa čak iu hladnoj sezoni.

Evo primjera jednog od takmičara:

Isplativo je naručiti mirisne kompozicije kod nas, jer garantiramo 100% garanciju povrata novca ako se sumnja u svježinu cvijeća.

Garancija konkurenta je pokrivena novcem, što je značajnije od apstraktne garancije.

Razmotrimo još jedan primjer - tekst na stranici kategorije "keramičke pločice" online trgovine:

Ovaj tekst ne nosi nikakvo korisno semantičko opterećenje, čvrsta voda. Najvjerovatnije, osoba koja je došla na stranicu i odlučila se o kupovini želi znati prednosti proizvoda i moguće konfiguracije, umjesto toga dobija besmislen skup znakova.

Sada pogledajmo tekst konkurenta:

Ovaj tekst je korisniji jer jezgrovito govori o razlikama između pločica i pomaže vam da shvatite kako odabrati pravu.

Dakle, upoređujući tekstove konkurenata sa svojim, možete dobiti mnogo korisnih informacija koje će pomoći autorima tekstova prilikom sastavljanja TOR-a.

Relevantnost tekstova

Nastavljajući temu kvaliteta tekstova, ne možemo a da se ne dotaknemo njihove relevantnosti. Danas, da bi tekst bio relevantan, nije dovoljno samo uključiti ključne riječi. Da biste povećali relevantnost stranice i istovremeno ne učinili tekst neželjenim, trebate koristiti riječi koje se odnose na temu.

Kada procjenjuje relevantnost teksta za upit, pretraživač analizira ne samo prisustvo ključnih riječi, već i dodatnih riječi, čime se utvrđuje značenje teksta. Na primjer, ako napišemo tekst o slonu, onda se srodne riječi mogu uzeti u obzir: "deblo", "kljove", "priroda", "zoološki vrt". Ako je tekst o šahovskoj figuri "slon", onda će ove riječi biti: "figura", "šah", "kraljica" itd.

Najprikladniju listu riječi za svoje potrebe možete dobiti u tekstovima konkurenata. Da biste to učinili, potrebno je izvršiti sljedeće korake:

— Kopiramo sve tekstove iz TOP-10 za željeni visokofrekventni zahtjev u različite tekstualne fajlove.

- Uklanjamo službene dijelove govora, znakove interpunkcije i brojeve iz tekstova (razmotrenih ranije).

- Poravnajte riječi u red - koristite funkciju "traži i zamijeni" s regularnim izrazima. Zamijenite prostor sa \n.

- Zatim, trebate dovesti sve oblike riječi u normalni oblik rječnika (lema). Da biste to učinili, možete koristiti uslugu https://tools.k50project.ru/lemma/. U polje unesite listu riječi iz svake datoteke posebno i kliknite na dugme "lemetiziraj i ispiši kao csv tabelu". Rezultat bi trebao biti 10 datoteka sa lemetiziranim riječima.

- U svakom fajlu uklanjamo duple riječi.

- Kombinirajte riječi iz datoteka u jednu listu.

— Sada treba da napravimo frekvencijski rečnik. Da biste to učinili, dodajte rezultirajuću listu u uslugu https://tools.k50project.ru/lemma/ i kliknite na "izradite frekvencijski rječnik u obliku CSV-a".

- Naša lista reči je spremna:

Ako je frekvencija 10, onda je ova riječ korištena na svih 10 stranica, ako je 8, onda samo na 8 itd. Preporučujemo korištenje najčešćih riječi, međutim među rijetkim riječima se mogu pronaći zanimljiva rješenja.

Na tako jednostavan način možete dobiti listu tematskih riječi za sastavljanje TOR-a za copywritere.

Kao što vidite, konkurenti su vrlo važan izvor informacija koji vam mogu pomoći da bolje optimizirate svoje stranice. U ovom članku pokrio sam daleko od svih aspekata, a u budućnosti ću nastaviti da pišem o tome šta je korisno i kako možete naučiti od svojih konkurenata.

Pretplatite se na newsletter Ovi algoritmi su dizajnirani za pretraživanje ranije nepoznatog teksta i mogu se koristiti, na primjer, u uređivačima teksta, preglednicima dokumenata ili web pretraživačima za pretraživanje unutar stranice. Ne zahtijevaju prethodnu obradu teksta i mogu raditi s kontinuiranim protokom podataka.

Linearna pretraga

Jednostavna sekvencijalna primjena date metrike (na primjer, Levenshtein metrika) na riječi iz ulaznog teksta. Kada koristite metriku sa ograničenjem, ova metoda vam omogućava da postignete optimalne performanse. Ali, u isto vreme, tim više k, što se duže vrijeme rada povećava. Asimptotska procjena vremena - O(kn).

Bitap (također poznat kao Shift-Or ili Baeza-Yates-Gonnet, i njegova modifikacija od Wu-Manber)

Algoritam bitap a njegove različite modifikacije najčešće se koriste za fuzzy pretragu bez indeksiranja. Njegova varijacija se koristi, na primjer, u unix uslužnom programu agrep, koji obavlja funkcije slične standardnom grep, ali uz podršku za greške u upitu za pretraživanje i čak pruža ograničene mogućnosti za korištenje regularnih izraza.

Po prvi put ideju ovog algoritma su predložili građani Ricardo Baeza-Yates I Gaston Gonnet, objavljujući srodni članak 1992.
Originalna verzija algoritma bavi se samo zamjenama znakova i zapravo izračunava udaljenost Hamming. Ali malo kasnije sun wu I Udi Manber predložio je modifikaciju ovog algoritma za izračunavanje udaljenosti Levenshtein, tj. doneo podršku za umetanje i brisanje, i razvio prvu verziju uslužnog programa agrep zasnovanu na njemu.






Vrijednost rezultata

Gdje k- broj grešaka, j- indeks znakova, s x - maska ​​karaktera (u maski se pojedinačni bitovi nalaze na pozicijama koje odgovaraju pozicijama datog karaktera u zahtjevu).
Podudaranje ili nepodudaranje s upitom određuje se posljednjim bitom rezultirajućeg vektora R.

Velika brzina ovog algoritma je obezbeđena zbog paralelizma bitova proračuna - u jednoj operaciji moguće je izvršiti proračune na 32 ili više bita istovremeno.
U isto vrijeme, trivijalna implementacija podržava traženje riječi čija dužina nije veća od 32. Ovo ograničenje je određeno širinom standardnog tipa int(na 32-bitnim arhitekturama). Možete koristiti i tipove velikih dimenzija, ali to može donekle usporiti algoritam.

Unatoč činjenici da je asimptotičko vrijeme rada ovog algoritma O(kn) je ista kao i linearna metoda, mnogo je brža sa dugim upitima i brojem grešaka k preko 2.

Testiranje

Testiranje je obavljeno na tekstu od 3,2 miliona riječi, prosječna dužina riječi je 10.
Tačna pretraga
Vrijeme pretrage: 3562 ms
Pretražujte koristeći Levenshtein metriku
Vrijeme pretrage u k=2: 5728 ms
Vrijeme pretrage u k=5: 8385 ms
Pretražujte koristeći Bitap algoritam sa Wu-Manber modifikacijama
Vrijeme pretrage u k=2: 5499 ms
Vrijeme pretrage u k=5: 5928 ms

Očigledno, jednostavno pretraživanje pomoću metrike, za razliku od Bitap algoritma, u velikoj mjeri ovisi o broju grešaka. k.

Međutim, kada je riječ o pretraživanju velikih količina nepromijenjenog teksta, vrijeme pretraživanja može se značajno smanjiti predobradom takvog teksta, tzv. indeksiranje.

Algoritmi nejasnog pretraživanja s indeksiranjem (van mreže)

Karakteristika svih fuzzy algoritama pretraživanja sa indeksiranjem je da se indeks gradi prema rječniku sastavljenom iz izvornog teksta ili liste zapisa u bazi podataka.

Ovi algoritmi koriste različite pristupe za rješavanje problema - neki od njih koriste redukciju za precizno pretraživanje, drugi koriste svojstva metrike za izgradnju različitih prostornih struktura, itd.

Prije svega, u prvom koraku, od izvornog teksta se pravi rječnik koji sadrži riječi i njihove pozicije u tekstu. Također, možete prebrojati učestalost riječi i fraza kako biste poboljšali kvalitet rezultata pretraživanja.

Pretpostavlja se da je indeks, kao i rečnik, potpuno učitan u memoriju.

Taktičko-tehničke karakteristike rječnika:

  • Izvorni tekst - 8,2 gigabajta materijala iz biblioteke Moškov (lib.ru), 680 miliona reči;
  • Veličina rječnika - 65 megabajta;
  • Broj riječi - 3,2 miliona;
  • Prosječna dužina riječi je 9,5 karaktera;
  • Korijenska srednja kvadratna dužina riječi (može biti korisna pri procjeni nekih algoritama) - 10,0 znakova;
  • Abeceda - velika slova A-Z, bez E (za pojednostavljenje nekih operacija). Riječi koje sadrže neabecedne znakove nisu uključene u rječnik.
Ovisnost veličine rječnika od obima teksta nije striktno linearna - do određenog volumena formira se osnovni okvir riječi u rasponu od 15% na 500 hiljada riječi do 5% na 5 miliona, a zatim se zavisnost približava linearnoj , polako opadajući i dostižući 0,5% na 680 miliona riječi. Naknadno održavanje rasta osigurava se uglavnom rijetkim riječima.

Algoritam proširenja uzorka

Ovaj algoritam se često koristi u sistemima za provjeru pravopisa (tj. u provjerama pravopisa), gdje je veličina rječnika mala ili gdje brzina nije glavni kriterij.
Zasnovan je na svođenju problema nejasnog pretraživanja na problem egzaktne pretrage.

Iz originalnog upita se gradi skup "pogrešnih" riječi, za svaku od kojih se zatim vrši tačna pretraga u rječniku.

Njegovo vrijeme rada jako ovisi o broju k grešaka i veličini abecede A, au slučaju korištenja binarnog rječnika pretraživanje je:

Na primjer, kada k = 1 i riječi dužine 7 (na primjer, "Krokodil") u ruskom alfabetu, skup pogrešnih riječi bit će veličine oko 450, odnosno bit će potrebno napraviti 450 rječničkih upita, što je sasvim prihvatljivo.
Ali već kod k = 2 veličina takvog skupa će biti više od 115 hiljada opcija, što odgovara potpunom nabrajanju malog rječnika, ili 1/27 u našem slučaju, pa će stoga vrijeme rada biti prilično veliko. Istovremeno, ne treba zaboraviti da je za svaku od ovih riječi potrebno tražiti točno podudaranje u rječniku.

Posebnosti:
Algoritam se može lako modificirati da generiše "pogrešne" varijante prema proizvoljnim pravilima, i, osim toga, ne zahtijeva nikakvu preliminarnu obradu rječnika, a samim tim i dodatnu memoriju.
Moguća poboljšanja:
Moguće je generirati ne cijeli skup "pogrešnih" riječi, već samo one od njih koje će se najvjerovatnije pojaviti u stvarnoj situaciji, na primjer, riječi uzimajući u obzir uobičajene pravopisne ili tipkarske greške.

Ova metoda postoji već duže vrijeme i najčešće se koristi, jer je implementacija izuzetno jednostavna i pruža prilično dobre performanse. Algoritam se zasniva na principu:
“Ako se riječ A poklapa sa riječju B, s obzirom na nekoliko grešaka, onda će s velikim stepenom vjerovatnoće imati barem jedan zajednički podniz dužine N.”
Ovi podnizovi dužine N nazivaju se N-grami.
Tokom indeksiranja, riječ se dijeli na takve N-grame, a zatim se ova riječ uključuje u liste za svaki od ovih N-grama. U toku pretrage upit se takođe deli na N-grame, a za svaki od njih se sekvencijalno pretražuje lista reči koje sadrže takav podniz.

U praksi se najčešće koriste trigrami - podnizovi dužine 3. Odabir veće vrijednosti N dovodi do ograničenja minimalne dužine riječi, pri čemu je detekcija greške već moguća.

Posebnosti:
N-gram algoritam ne pronalazi sve moguće pogrešno napisane riječi. Ako uzmemo, na primjer, riječ VOTKA, i razložimo je na trigrame: IN T KA → VO T O T TO T KA - možete vidjeti da svi sadrže grešku T. Dakle, riječ "VODKA" neće biti pronađena, jer ne sadrži nijedan od ovih trigrama, i neće pasti na liste koje im odgovaraju. Dakle, što je riječ kraća i što više grešaka sadrži, to je veća šansa da neće pasti u liste koje odgovaraju N-gramima upita i neće biti prisutna u rezultatu.

U međuvremenu, metoda N-grama ostavlja puni prostor za korištenje vaših vlastitih metrika sa proizvoljnim svojstvima i složenošću, ali za to morate platiti - kada je koristite, još uvijek morate uzastopno nabrajati oko 15% rječnika, što je prilično puno za velike rječnike.

Moguća poboljšanja:
Moguće je podijeliti hash tablice N-grama po dužini riječi i po poziciji N-grama u riječi (modifikacija 1). Kako se dužina tražene riječi i upita ne mogu razlikovati za više od k, a pozicije N-grama u riječi mogu se razlikovati za najviše k. Stoga će biti potrebno provjeriti samo tabelu koja odgovara poziciji ovog N-grama u riječi, kao i k tablica lijevo i k tablica desno, tj. Ukupno 2k+1 susjedni stolovi.

Možete dodatno smanjiti veličinu skupa potrebnog za skeniranje tako što ćete podijeliti tablice po dužini riječi i na sličan način pregledati samo susjedne tablice. 2k+1 tabele (modifikacija 2).

Ovaj algoritam je opisan u članku L.M. Boytsova. Heširanje potpisa. Zasnovan je na prilično očiglednom prikazu "strukture" riječi u obliku bitova, koji se koristi kao heš (potpis) u tablici heširanja.

Tokom indeksiranja, takvi hešovi se izračunavaju za svaku od riječi, a korespondencija liste riječi iz rječnika ovom hash-u se unosi u tabelu. Zatim se tokom pretrage izračunava heš za upit i svi susjedni hešovi koji se razlikuju od originalnog za ne više od k bitova se sortiraju. Za svaki od ovih heševa, traži se lista odgovarajućih riječi.

Proces izračunavanja heša - svakom bitu heša se dodeljuje grupa znakova iz abecede. Bit 1 na poziciji i u hash znači da originalna riječ sadrži znak iz i-th alfabetske grupe. Redoslijed slova u riječi je apsolutno nebitan.

Uklanjanje jednog znaka ili neće promijeniti hash vrijednost (ako još uvijek postoje znakovi iz iste grupe abeceda u riječi), ili će se bit koji odgovara ovoj grupi promijeniti u 0. Kada se ubaci, na isti način, bilo koji bit će biti postavljen na 1, ili neće biti promjena. Kod zamjene znakova sve je malo složenije - heš može ili ostati nepromijenjen ili se može promijeniti na 1 ili 2 pozicije. Prilikom permutiranja nema nikakvih promjena, jer se redoslijed znakova prilikom konstruisanja heša, kao što je ranije navedeno, ne uzima u obzir. Dakle, da biste u potpunosti pokrili k grešaka, morate barem promijeniti 2k malo u hešu.

Vrijeme rada, u prosjeku, sa k "nepotpunih" (umetanja, brisanja i transpozicije, kao i manjim dijelom zamjena) grešaka:

Posebnosti:
Zbog činjenice da se prilikom zamjene jednog znaka mogu promijeniti dva bita odjednom, algoritam koji implementira, na primjer, izobličenje ne više od 2 bita u isto vrijeme, zapravo neće proizvesti punu količinu rezultata zbog odsustva značajan (ovisno o omjeru veličine heša i abecede) dio riječi sa dvije zamjene (i što je veća heš veličina, to će češće zamjena karaktera dovesti do izobličenja dva bita odjednom, a manje potpuna rezultat će biti). Osim toga, ovaj algoritam ne dozvoljava pretraživanje prefiksa.

BK drveće

Drveće Burkhard-Keller su metrička stabla, algoritmi za konstruisanje takvih stabala su zasnovani na svojstvu metrike da zadovolji nejednakost trougla:

Ovo svojstvo omogućava metrici da formira metričke prostore proizvoljne dimenzije. Takvi metrički prostori nisu nužno Euklidski, tako, na primjer, metrika Levenshtein I Damerau-Levenshtein formu neeuklidski prostor. Na osnovu ovih svojstava, možete izgraditi strukturu podataka koja traži u takvom metričkom prostoru, a to su Barkhard-Keller stabla.

Poboljšanja:
Možete koristiti sposobnost nekih metrika za izračunavanje udaljenosti s ograničenjem tako što ćete postaviti gornju granicu jednaku zbroju maksimalne udaljenosti do potomaka vrha i rezultirajuće udaljenosti, što će malo ubrzati proces:

Testiranje

Testiranje je obavljeno na laptopu sa Intel Core Duo T2500 (2GHz/667MHz FSB/2MB), 2Gb RAM-a, OS - Ubuntu 10.10 Desktop i686, JRE - OpenJDK 6 Update 20.

Testiranje je provedeno korištenjem Damerau-Levenshtein udaljenosti i broja grešaka k = 2. Veličina indeksa je navedena zajedno sa rječnikom (65 MB).

Veličina indeksa: 65 MB
Vrijeme pretrage: 320ms / 330ms
Kompletnost rezultata: 100%

N-grami (original)
Veličina indeksa: 170 MB
Vrijeme kreiranja indeksa: 32 s
Vrijeme pretrage: 71ms / 110ms
Kompletnost rezultata: 65%
N-grami (modifikacija 1)
Veličina indeksa: 170 MB
Vrijeme kreiranja indeksa: 32 s
Vrijeme pretrage: 39ms / 46ms
Kompletnost rezultata: 63%
N-grami (modifikacija 2)
Veličina indeksa: 170 MB
Vrijeme kreiranja indeksa: 32 s
Vrijeme pretrage: 37ms / 45ms
Kompletnost rezultata: 62%

Veličina indeksa: 85 MB
Vrijeme kreiranja indeksa: 0,6 s
Vrijeme pretrage: 55ms
Kompletnost rezultata: 56,5%

BK drveće
Veličina indeksa: 150 MB
Vrijeme kreiranja indeksa: 120 s
Vrijeme pretrage: 540ms
Kompletnost rezultata: 63%

Ukupno

Većina indeksiranih neizrazitih algoritama pretraživanja nisu istinski sublinearni (tj. imaju asimptotično vrijeme rada O(log n) ili niže), a njihova brzina rada obično direktno zavisi od toga N. Ipak, brojna poboljšanja i dorade omogućavaju postizanje dovoljno kratkog vremena rada čak i sa veoma velikim količinama rečnika.

Postoji i mnogo raznovrsnijih i neefikasnijih metoda zasnovanih, između ostalog, na prilagođavanju različitih tehnika i tehnika koje se već koriste na datoj predmetnoj oblasti. Među ovim metodama je i prilagođavanje stabala prefiksa (Trie) na nejasne probleme pretraživanja, koje sam ostavio bez nadzora zbog niske efikasnosti. Ali postoje i algoritmi zasnovani na originalnim pristupima, na primjer, algoritam Maass-Novak, koji, iako ima sublinearno asimptotičko vrijeme rada, izuzetno je neefikasan zbog ogromnih konstanti skrivenih iza takve procjene vremena, a koje se manifestiraju u obliku ogromne veličine indeksa.

Praktična upotreba fuzzy algoritama za pretragu u stvarnim pretraživačima usko je povezana sa fonetskim algoritmima, algoritmima leksičkog porekla - isticanjem osnovnog dela različitih oblika reči iste reči (na primer, takvu funkcionalnost pružaju Snowball i Yandex mystem), kao što je kao i rangiranje zasnovano na statističkim informacijama ili korištenjem složenih sofisticiranih metrika.

  • Levenshtein distanca (sa opcijom isjecanja i prefiksa);
  • Damerau-Levenshtein udaljenost (sa opcijom isječka i prefiksa);
  • Bitap algoritam (Shift-OR / Shift-AND sa Wu-Manber modifikacijama);
  • Algoritam proširenja uzorka;
  • N-gram metoda (originalna i sa modifikacijama);
  • Metoda heširanja potpisa;
  • BK-drveće.
Želio sam učiniti kod lakim za razumijevanje, a u isto vrijeme dovoljno efikasnim za praktičnu upotrebu. Iscijediti posljednje sokove iz JVM-a nije bio dio mojih zadataka. uživaj.

Vrijedi napomenuti da sam u procesu proučavanja ove teme došao do nekih svojih razvoja koji mi omogućavaju da smanjim vrijeme pretraživanja za red veličine zbog umjerenog povećanja veličine indeksa i nekih ograničenja u sloboda izbora metrike. Ali to je sasvim druga priča.


Definicija Primjer primjene Kreiranje n-gram jezičkog modela Izračunavanje vjerovatnoće n-grama Eliminacija oskudnosti korpusa za obuku o Izglađivanje dodavanja o Witten-Bell Discounting o Good-Turingovo sniženje o Katzs Backoff o Izbrisana interpolacija Procjena n-gram jezičkog modela koristeći entropija Sadržaj


N-gram (engleski N-gram) podniz od N elemenata nekog niza. Razmotrite nizove riječi. Unigrams mačka, pas, konj,... Bigrams mala mačka, veliki pas, jak konj,... Trigrami mala mačka jede, veliki pas laje, jak konj trči,... Definicija


Primjeri primijenjenih zadataka Prepoznavanje govora. Neke riječi sa različitim načinom pisanja izgovaraju se isto. Zadatak je odabrati tačnu riječ u kontekstu. Generisanje tekstova na zadatu temu. Primjer: Yandex.Abstracts. Potražite semantičke greške. Pokušava da precizira - u smislu sintakse, istina, u smislu semantike, ne. Pokušava da sazna - tačno. pokušaj saznanja se nalazi u engleskim tekstovima mnogo češće od pokušaja finoće, što znači da ako su statistike dostupne, možete pronaći i eliminirati ovu vrstu greške


Kreiranje jezičkog modela n-grama Za rješavanje navedenih primijenjenih problema potrebno je kreirati jezički model N-grama. Da biste kreirali model, potrebno je: 1. Izračunati vjerovatnoće n-grama u korpusu za obuku. 2. Popravite problem retkosti trupa pomoću jedne od metoda anti-aliasinga. 3. Procijenite kvalitetu rezultirajućeg jezičkog modela n-grama koristeći entropiju.


Izračunavanje vjerovatnoće N-grama (1) U korpusu za obuku, određeni n-grami se javljaju sa različitim frekvencijama. Za svaki n-gram možemo izbrojati koliko se puta pojavljuje u korpusu. Na osnovu dobijenih podataka može se izgraditi probabilistički model koji se potom može koristiti za procenu verovatnoće n-grama u nekom test korpusu.


Izračunavanje vjerovatnoće N-grama (2) Razmotrimo primjer. Neka se korpus sastoji od jedne rečenice: Otišli su na piknik pored bazena, zatim se zavalili na travu i gledali u zvijezde. Odaberimo n-grame. Unigrami: Oni, piknik, ... Digrami: Piknik, piknik, pored, ... Trigrami Oni piknik, piknik pored, pored bazena, ...


Proračun vjerovatnoće N-grama (3) Sada je moguće brojati n-grama. Svi odabrani bi- i trigrami pojavljuju se u korpusu jednom. Svi unigrami, sa izuzetkom riječi the, također se pojavljuju jednom. Riječ the se pojavljuje tri puta. Sada kada znamo koliko puta se svaki n-gram pojavljuje, možemo izgraditi vjerovatnostni model od n-grama. U slučaju unigrama, vjerovatnoća riječi u može se izračunati po formuli: Na primjer, za riječ vjerovatnoća će biti 3/16 (jer u korpusu ima 16 riječi, od kojih su 3 riječ the) . Broj pojavljivanja riječi u u korpusu treninga. Otišli su na piknik pored bazena, zatim su se zavalili na travu i gledali u zvijezde


1, vjerovatnoća se razmatra nešto drugačije. Razmotrimo slučaj bigrama: neka je potrebno izračunati vjerovatnoću bigrama. Ako svaku riječ bigrama smatramo nekim događajem, onda vjerovati" title="(!LANG:N-gram izračun vjerovatnoće (4) Za n-grame, gdje je n>1, vjerovatnoća se izračunava nešto drugačije. Razmotrimo slučaj bigrama : neka je potrebno izračunati digram bazen. Ako svaku riječ digrama smatramo nekim događajem, onda vjerujući" class="link_thumb"> 9 !} Izračunavanje vjerovatnoće N-grama (4) Za n-grame, gdje je n>1, vjerovatnoća se izračunava nešto drugačije. Razmotrimo slučaj bigrama: neka je potrebno izračunati vjerovatnoću bigrama. Ako svaku riječ bigrama smatramo nekim događajem, tada se vjerovatnoća skupa događaja može izračunati po formuli: Dakle, vjerovatnoća bigrama je skup:, gdje je 1, vjerovatnoća se razmatra nešto drugačije. Razmotrimo slučaj bigrama: neka je potrebno izračunati vjerovatnoću bigrama. Ako svaku bigramsku riječ smatramo nekim događajem, onda, vjerujući "> 1, vjerovatnoća se smatra nešto drugačije. Razmotrimo slučaj bigrama: neka je potrebno izračunati vjerovatnoću bigrama skupa. Ako svaku bigramsku riječ smatramo kao neki događaj, tada se vjerovatnoća skupa događaja može izračunati po formuli: Dakle, vjerovatnoća bigrama je skup:, gdje je "> 1, vjerovatnoća se izračunava malo drugačije. Razmotrimo slučaj bigrama: neka je potrebno izračunati vjerovatnoću bigrama. Ako svaku riječ bigrama smatramo nekim događajem, onda vjerovati" title="(!LANG:N-gram izračun vjerovatnoće (4) Za n-grame, gdje je n>1, vjerovatnoća se izračunava nešto drugačije. Razmotrimo slučaj bigrama : neka je potrebno izračunati digram bazen. Ako svaku riječ digrama smatramo nekim događajem, onda vjerujući"> title="Izračunavanje vjerovatnoće N-grama (4) Za n-grame, gdje je n>1, vjerovatnoća se izračunava nešto drugačije. Razmotrimo slučaj bigrama: neka je potrebno izračunati vjerovatnoću bigrama. Ako svaku riječ digrama smatramo nekim događajem, onda vjerovati"> !}


Izračunavanje vjerovatnoće N-grama (5) Sada razmotrite izračunavanje vjerovatnoće proizvoljnog n-grama (ili rečenice dužine n). Proširujući slučaj bigrama, dobijamo formulu vjerovatnoće za n-grame Stoga se izračunavanje vjerovatnoće rečenice svodi na izračunavanje uslovne vjerovatnoće N-grama koji čine ovu rečenicu:




Uklanjanje oskudnosti korpusa (1) Problem jednostavnog (neuglađenog) jezičkog modela n-grama: za neke n-grame vjerovatnoća može biti jako podcijenjena (ili čak nula), iako u stvarnosti (u testnom korpusu) ove n-grami se mogu pojaviti prilično često. Razlog: ograničen korpus obuke i njegova specifičnost. Rješenje: smanjenjem vjerovatnoće nekih n-grama povećajte vjerovatnoću onih n-grama koji se nisu pojavili (ili su se sretali prilično rijetko) u korpusu obuke.




Korpusna eliminacija retkosti (3) Sledeći koncepti se koriste u algoritmima za eliminaciju retkosti: Tipovi – različite reči (sledovi reči) u tekstu. Tokeni su sve riječi (nizovi riječi) u tekstu. Išli su na piknik pored bazena, a zatim su se zavalili na travu i gledali u zvezde - 14 vrsta, 16 žetona





Add-one smoothing (4) Metoda izaziva veliku grešku u proračunima (npr. na prethodnom slajdu je pokazano da je za riječ kineski broj bigrama smanjen za 8 puta). Testovi su pokazali da neuglađeni model često pokazuje tačnije rezultate. Stoga je metoda zanimljiva samo sa teorijske tačke gledišta.


Witten-Bell Discounting (1) Zasnovano na jednostavnoj ideji: koristite podatke o n-gramima koji se javljaju u korpusu obuke da biste procijenili vjerovatnoću da nedostaju n-grami. Ideja metode je preuzeta iz algoritama kompresije: razmatraju se dvije vrste događaja - susreli su se s novim znakom (tip) i upoznali su znak (token). Formula vjerovatnoće za sve nedostajuće n-grame (tj. vjerovatnoću susreta s n-gramom u testnom korpusu koji nije bio u korpusu za obuku): N je broj tokena u korpusu za obuku, T je broj tipova koji su se već susreli u korpusu obuke






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




Good-Turingovo diskontiranje (1) Ideja: Za n-grame koji se pojavljuju nula puta (c puta), rezultat je proporcionalan broju n-grama koji se pojavljuju jednom (c + 1 puta). Razmotrimo primjer: Pretpostavimo da je uhvaćeno 18 riba. Ukupno je ulovljeno 6 različitih vrsta, a u tri vrste je ulovljen samo jedan predstavnik. Moramo pronaći vjerovatnoću da će sljedeća riba pripadati novoj vrsti. Postoji ukupno 7 mogućih vrsta (6 vrsta je već ulovljeno).








Katzs Backoff (2) Koeficijent α je neophodan za ispravnu distribuciju preostale vjerovatnoće N-grama u skladu sa distribucijom vjerovatnoće (N-1)-grama. Ako ne unesete α, procjena će biti pogrešna, jer jednakost neće biti ispunjena: Izračun α je dat na kraju izvještaja. Evaluacija jezičkog modela korištenjem entropije (1) Entropija je mjera nesigurnosti. Uz pomoć entropije može se odrediti najprikladniji jezički model N-grama za dati primijenjeni zadatak. Formula binarne entropije: Primjer: Izračunajte entropiju testa bacanja novčića. Odgovor: 1 bit, pod uslovom da su rezultati eksperimenta podjednako verovatni (ispadne obe strane sa verovatnoćom 1/2).




Evaluacija jezičkog modela korištenjem entropije (3) Unakrsna entropija se koristi za poređenje različitih jezičkih modela: Što je bliža vrijednost unakrsne entropije H(p,m) stvarnoj entropiji H(p), to je jezički model bolji: U našem slučaju, H(p ) je entropija testnog korpusa. m(w) – jezički model (npr. N-gramski model)


Evaluacija jezičkog modela pomoću entropije (4) Postoji još jedan metod za procjenu kvaliteta jezičkog modela, zasnovan na tzv. indikator povezanosti (zamršenost). Ideja: Izračunajte vjerovatnoću cijelog testnog korpusa. Bolji model će pokazati veću vjerovatnoću. Formula zbunjenosti: Dakle, što je manja zbunjenost, to je model bolji. Zbunjenost se može tumačiti kao prosječan broj riječi koje mogu doći iza određene riječi (tj. što je više zbunjenosti, to je veća dvosmislenost, a samim tim i lošiji jezički model). Odnos između zbunjenosti i binarne entropije:


Procjena jezičkog modela korištenjem entropije (5) Kao primjer, uzmimo vrijednosti zbunjenosti za neki korpus, dobijene korištenjem obučenih modela unigrama, bigrama i trigrama: U slučaju trigrama, zbunjenost je najmanja, jer višeznačnost je olakšana najdužom dužinom istorije od svih modela (jednako 2) kada se izračunavaju uslovne verovatnoće trigrama. UnigramBigramTrigram Neugodnost


Želim implementirati neke n-gram aplikacije (po mogućnosti u PHP-u).

Koja je vrsta n-grama pogodnija za većinu namjena? Nivo riječi ili nivo znakova n-gram nivo? Kako se n-gramatički tokenizer može implementirati u PHP?

Prvo bih želeo da znam šta su N-grami. To je u redu? Ovako ja razumijem n-grame:

Prijedlog: "Živim u New Yorku."

birams na nivou riječi (2 za n): "# I", "I live", "live in", "in New York", "NY #"

nivo znakova birams (2 za n): "#I", "I #", "#l", "li", "iv", "ve", "e #", "#i", "in", "n#", "#N", "NY", "Y#"

Jednom kada imate ovaj niz n-gramskih dijelova, ubacite duplikate i dodate brojač za svaki dio koji specificira frekvenciju:

bigrami na nivou riječi:

bigrami na nivou znakova:

Da li je tačno?

Takođe, želeo bih da znam više o tome šta možete da uradite sa n-gramima:

  • Kako mogu otkriti jezik teksta pomoću n-grama?
  • Da li je moguće izvršiti mašinsko prevođenje koristeći n-grame čak i ako nemate dvojezični korpus?
  • Kako kreirati filter za neželjenu poštu (spam, šunka)? Kombinovati n-grame sa Bayesovim filterom?
  • Kako mogu pronaći temu? Na primjer: postoji li tekst o košarci ili psima? Moj pristup (učinite sljedeće sa člankom na Wikipediji za "pse" i "košarka"): nacrtajte n-gram vektora za oba dokumenta, normalizirajte ih, izračunajte udaljenost Manhattan/Euclid, što je rezultat bliži 1, to je veći sličnost će biti

Što mislite o mojoj prijavi, posebno o posljednjoj?

Nadam se da mi možete pomoći. Hvala unaprijed!

2 odgovora

Riječ n-gram općenito će biti korisnija za većinu aplikacija za analizu teksta koje ste spomenuli, uz mogući izuzetak definicije jezika, gdje nešto poput trigrama znakova može dati bolje rezultate. U stvari, kreirali biste vektor od n-grama za tijelo teksta na svakom jeziku koji vas zanima, a zatim biste uporedili frekvencije trigrama u svakom korpusu sa onima u dokumentu koji klasifikujete. Na primjer, trigram the će se vjerovatno mnogo češće pojavljivati ​​na engleskom nego na njemačkom i pružio bi određeni nivo statističke korelacije. Jednom kada imate n-gram dokumente, imate izbor između mnogih algoritama za dalju analizu, Baysian filtera, N najbližeg susjeda, pomoćnih vektorskih mašina, itd.

Od aplikacija koje ste spomenuli, mašinsko prevođenje je verovatno najnapredniji jer vas n-grami sami po sebi neće odvesti daleko na putu. Konvertovanje ulazne datoteke u n-gramski prikaz je samo način da se podaci stave u format za dalje raščlanjivanje karakteristika, ali kako gubite mnogo kontekstualnih informacija, to možda neće biti korisno za prevođenje.

Jedna stvar koju treba napomenuti je da nije dovoljno kreirati vektor za jedan dokument i vektor za drugi dokument ako se dimenzije ne poklapaju. To jest, prvi unos u vektoru ne može biti u jednom dokumentu, a nalazi se u drugom, ili algoritmi neće raditi. Na kraju ćete dobiti vektore kao što je , budući da većina dokumenata neće sadržavati više od n-grama koji vas zanimaju. Ova "podstava" takođe zahteva da unapred odredite koje ngrame ćete uključiti u svoju analizu. Često se ovo implementira kao algoritam sa dva prolaza kako bi se prvo odredio statistički značaj različitih n-grama kako bi se odlučilo šta zadržati. Google "odabir funkcija" za više informacija.

N-grami zasnovani na riječima plus podrška za vektorske mašine je odličan način za definiranje teme, ali da biste pripremili klasifikator potreban vam je veliki korpus teksta prethodno klasifikovan u teme "na temu" i "off-topic". Naći ćete veliki broj istraživačkih radova koji objašnjavaju različite pristupe ovom problemu na web stranici kao što je citeseerx. Ne bih preporučio pristup euklidske udaljenosti ovom problemu, jer ne teži pojedinačnim n-gramima na osnovu statističke značajnosti, tako da bi se dva dokumenta koja uključuju , a , is i of smatrala boljim podudaranjem od dva dokumenta , koji je uključivao Baysian. Uklanjanje stop riječi iz vaših n-grama od interesa bi ovo malo poboljšalo.

U pravu ste za definiciju n-grama.

Možete koristiti n-grame na nivou riječi za aplikacije tipa pretraživanja. N-grami na nivou znakova mogu se više koristiti za raščlanjivanje samog teksta. Na primjer, da bih identificirao jezik teksta, koristio bih frekvencije slova u odnosu na utvrđene frekvencije jezika. Odnosno, tekst bi trebao približno odgovarati učestalosti pojavljivanja slova u ovom jeziku.

N-gramatički tokenizer za riječi u PHP-u može se napraviti pomoću strtok-a:

Za znakove koristite split:

Tada možete jednostavno podijeliti niz kako god želite na bilo koji broj n-grama.

Bayesian filteri moraju biti obučeni za upotrebu kao filteri za neželjenu poštu koji se mogu koristiti zajedno sa n-gramima. Međutim, morate mu dati mnogo doprinosa kako bi nastavili da uči.

Vaš posljednji pristup zvuči pristojno jer uči kontekst stranice... međutim, to je još uvijek prilično zeznuto, ali n-grami izgledaju kao dobra polazna tačka za ovo.