N-grami. Iekšējās optimizācijas uzlabošana ar konkurentu palīdzību Skatiet, kas ir "N-gram" citās vārdnīcās

Izmantojot N-gramus

N-gramu vispārēja izmantošana

  • datu iegūšana, lai apkopotu Zemes satelītattēlu sēriju no kosmosa, lai pēc tam izlemtu, kuras konkrētas Zemes daļas ir attēlā,
  • meklēt ģenētiskās sekvences,
  • ģenētikas jomā izmanto, lai noteiktu, no kuras konkrētas dzīvnieku sugas tiek ņemti DNS paraugi,
  • datora saspiešanā,
  • izmantojot N-gramus, parasti ar skaņu saistītie dati tiek indeksēti.

N-grami tiek plaši izmantoti arī dabiskās valodas apstrādē.

N-gramu izmantošana dabiskās valodas apstrādes vajadzībām

Dabiskās valodas apstrādes jomā N-grammas galvenokārt tiek izmantotas prognozēšanai, kuras pamatā ir varbūtības modeļi. N-gramu modelis aprēķina N-grama pēdējā vārda varbūtību, ja ir zināmi visi iepriekšējie. Izmantojot šo pieeju valodas modelēšanai, tiek pieņemts, ka katra vārda izskats ir atkarīgs tikai no iepriekšējiem vārdiem.

Vēl viens N-gramu pielietojums ir plaģiāta noteikšana. Ja tekstu sadala vairākos mazos fragmentos, kas attēloti ar n-gramiem, tos var viegli salīdzināt savā starpā un tādējādi iegūt kontrolēto dokumentu līdzības pakāpi. N-grami bieži tiek veiksmīgi izmantoti, lai klasificētu tekstu un valodu. Turklāt tos var izmantot, lai izveidotu funkcijas, kas ļauj iegūt zināšanas no teksta datiem. Izmantojot N-gramus, var efektīvi atrast kandidātus nepareizi uzrakstīto vārdu aizstāšanai.

Google pētniecības projekti

Google pētniecības centri ir izmantojuši N-gramu modeļus plašam pētniecībai un izstrādei. Tie ietver tādus projektus kā statistikas tulkošana no vienas valodas uz otru, runas atpazīšana, pareizrakstības labošana, informācijas iegūšana un citi. Šo projektu vajadzībām tika izmantoti korpusa teksti, kas satur vairākus triljonus vārdu.

Google ir nolēmis izveidot savu izglītības ēku. Projekta nosaukums ir Google teracorpus, un tajā ir 1 024 908 267 229 vārdi, kas savākti no publiskām vietnēm.

Metodes n-gramu iegūšanai

Tā kā N-grami tiek bieži izmantoti dažādu problēmu risināšanai, ir nepieciešams uzticams un ātrs algoritms, lai tos izņemtu no teksta. Piemērotam n-gramu izvilkšanas rīkam jāspēj strādāt ar neierobežotu teksta izmēru, strādāt ātri un efektīvi izmantot pieejamos resursus. Ir vairākas metodes N-gramu iegūšanai no teksta. Šīs metodes ir balstītas uz dažādiem principiem:

Piezīmes

Skatīt arī


Wikimedia fonds. 2010 .

  • n-tv
  • N-kadherīns

Skatiet, kas ir "N-gram" citās vārdnīcās:

    GRAMMA- (franču grams, no grieķu grama iezīmes). franču vienība. svars \u003d 1 kubikcentimetra destilēta ūdens svars \u003d 22,5 krievu val. akcijas. Krievu valodā iekļauto svešvārdu vārdnīca. Čudinovs A.N., 1910. GRAM svara mērvienība Francijā ... Krievu valodas svešvārdu vārdnīca

    grams- grams, ģints. pl. grami un pieļaujamie (mutiskajā runā pēc cipariem) grami. Simts grami (grami). Aizstāvot jauno ģints formu. lieta pl. gramu skaitu izgatavojis krievu valodas rakstnieka K. Čukovska pazinējs. Lūk, ko viņš rakstīja grāmatā "Dzīvot kā dzīvi": ... ... Mūsdienu krievu valodas izrunas un stresa grūtību vārdnīca

    GRAMMA- GRAM, gram, vīrs. (no grieķu valodas grama zīme, burts). Svara pamatvienība metriskajā sistēmā, kas vienāda ar 1 kubikcentimetra ūdens svaru. Grams sver apmēram 1/400 mārciņas. ❖ Grama atoms (fiz.) vielas gramu skaits, kas vienāds ar tās atommasu. ... ... Ušakova skaidrojošā vārdnīca

    gram-rentgens- grams rentgens / n, grams rentgens / ieslēgts, stienis. pl. Rentgena grams un rentgena grams... apvienoti. Atsevišķi. Caur defisi.

    grams- Gram, šo vienkāršo vārdu kļūdu vārdnīcā nevarēja dot, ja ne divi apstākļi; pirmkārt, ja vēlaties dižoties ar absolūti pareizu valodu, tad, atnācis uz veikalu, apdulliniet pārdevēju ar pareizo: Nosveriet man divsimt gramus (nevis ... ... Krievu valodas kļūdu vārdnīca

    GRAM-ATOM- GRAM ATOM, elementa daudzums, kura masa gramos ir vienāda ar tā ATOMA MASU. To aizstāja SI vienības mols. Piemēram, viens grams ūdeņraža atoma (H, atommasa = 1) ir vienāds ar vienu gramu. b>GRAMEMEKVIVALENTS, tā svars gramos… … Zinātniskā un tehniskā enciklopēdiskā vārdnīca

    GRAMMA- GRAM, ak, ģints. pl. grami un grami, vīrs. Masas mērvienība decimālo mēru sistēmā, viena tūkstošdaļa kilograma. Ne unces (nav) nekā (sarunvalodā) nemaz, nemaz. Šim vīrietim (nav) nav sirdsapziņas. | adj. grams, ak, ak. Paskaidrojošs...... Ožegova skaidrojošā vārdnīca

    grams- bet; pl. ģints. grami un grami; m [franču val. grams] Masas vienība metriskajā sistēmā, viena tūkstošdaļa kilograma. ◊ Nav (neviena) grama. Nemaz, nē. Kurā l. ne miņas melu. Nevienam nav ne kripatiņas sirdsapziņas. * * * grami (franču ... enciklopēdiskā vārdnīca

    Grams Zenobs Teofils- (Gramme) (1826 1901), elektroinženieris. Dzimis Beļģijā, strādājis Francijā. Saņemts patents praktiskajam elektroģeneratoram ar gredzenveida armatūru (1869). Viņš nodibināja elektrisko mašīnu rūpniecisko ražošanu. * * * GRAM Zenob… … enciklopēdiskā vārdnīca

    grama atoms- vielas daudzums gramos, kas skaitliski vienāds ar tās atommasu. Terminu nav ieteicams lietot. SI, vielas daudzumu izsaka molos. * * * GRAM ATOM GRAM ATOM, vielas daudzums gramos, skaitliski vienāds ar tās atommasu (sk... enciklopēdiskā vārdnīca

    gramu molekula- vielas daudzums gramos, kas skaitliski vienāds ar tās molekulmasu. Terminu nav ieteicams lietot. SI, vielas daudzumu izsaka molos. * * * GRAM MOLEKULA GRAM MOLEKULA, vielas daudzums gramos, skaitliski vienāds ar tās ... ... enciklopēdiskā vārdnīca

Semantiskais kodols

Lai veiksmīgi attīstītu un palielinātu vietnes redzamību mūsdienu realitātē, ir nepieciešams pastāvīgi paplašināt semantisko kodolu. Viens no labākajiem izaugsmes veidiem ir konkurentu atslēgvārdu apkopošana.

Mūsdienās nav grūti iegūt konkurentu semantiku, jo. Ir daudz pakalpojumu, gan maksas, gan bezmaksas.

Bezmaksas saraksts:

— megaindex.ru — Vietnes redzamības rīks

- xtool.ru - labi zināms pakalpojums, kas parāda arī atslēgvārdus, pēc kuriem vietne ir ierindota

Apmaksāto saraksts:

— spywords.ru — piemērots Yandex un Google

- semrush.ru - koncentrējas tikai uz Google

— prodvigator.ua — spywords.ru ukraiņu analogs

Papildus pakalpojumiem varat izmantot arī manuālu metodi, kuras pamatā ir virsraksta un apraksta sadalīšana n-gramos, kā rezultātā izvadā tiek iegūts papildu frāžu saraksts.

N-gram - n elementu secība. Praksē N-gramma ir biežāk sastopama kā vārdu virkne. Bieži tiek saukta divu secīgu elementu secība digramma, tiek izsaukta trīs elementu secība trigramma. Vismaz četri vai vairāk elementi ir apzīmēti kā N-grami, N tiek aizstāts ar secīgo elementu skaitu.

Apsveriet šo tehniku ​​soli pa solim:

- Augšupielādējiet konkurentu nosaukumus (aprakstus). Var izdarīt ar Screaming Frog SEO.

- Teksta redaktorā mēs notīrām iegūto sarakstu no runas daļām, pieturzīmēm un citiem atkritumiem. Es izmantoju funkciju "Meklēt un aizstāt" teksta redaktora cildenajā tekstā (karsto taustiņu ctrl+H), izmantojot regulārās izteiksmes:

- Izvēlieties vajadzīgo n-gramu un iestatiet frekvenci vismaz uz vienu. Labākais variants ir trigrami un 4 grami:

- Mēs iegūstam šādu rezultātu:

Kolonnaskaitītparāda atkārtojumu skaitun-grams, kolonnabiežums - biežumsn- grami.

Kad esam saņēmuši frāžu sarakstu, mums tas ir jāanalizē un jāizvēlas atbilstošie atslēgvārdi, lai paplašinātu semantisko kodolu. Sīkāku informāciju var atrast mūsu emuāra attiecīgajā sadaļā.

Pieprasījumu grupēšana

Ir ļoti svarīgi saprast, kā tiek grupēts konkurentu semantiskais kodols, jo tas palīdz pareizi izplatīt galvenās frāzes vietnes lapās.

Lai to izdarītu, pēc tam, kad esam izveidojuši pilnu vaicājumu sarakstu, mums jāiegūst atbilstošas ​​lapas un konkurentu pozīcijas (varat izmantot pakalpojumu seolib.ru) un pēc tam salīdzināt ar mūsu grupu. Ja ir redzams, ka konkurentam ir labas pozīcijas un tajā pašā laikā tā grupējums atšķiras no mūsējā (piemēram, konkurenta pieprasījumi tiek izplatīti dažādās lapās, savukārt mūsējiem vienādi pieprasījumi ir vienā lapā), ir jāpievērš uzmanība šo un pārskatiet savas vietnes galvenās lapas .

Apskatīsim nelielu piemēru nosacītās vietnes un tās konkurenta grupēšanas salīdzināšanai.

Kā redzams tabulā, vietnei site.ru ir viena galvenā lapa visiem atslēgvārdiem. Konkurentā dažādas lapas tiek sarindotas vienādiem vaicājumiem un ieņem TOP vai tuvu TOP pozīcijām. Pamatojoties uz to, mēs varam secināt, ka grupējums vietnē site.ru ir jāpārskata, jo īpaši ir nepieciešams izveidot atsevišķu lapu atslēgas frāzēm ar vārdu “fasāde”.

Teksta kvalitāte

Pirmā un vissvarīgākā lieta, kam jāpievērš uzmanība, analizējot konkurentu tekstus, ir nevis kvantitatīvais komponents (atkārtojumu skaits, teksta garums utt.), bet gan kvalitatīvā vai semantiskā - cik noderīga ir informācija, ko konkurents piedāvā un kā viņš to dara.

Apskatīsim dažus piemērus.

Pieņemsim, ka jūs piegādājat ziedus un galvenajā teksta lapā jūs garantējat to svaigumu. Piemēram, šādi:

Ziedu piegādes pakalpojumsvietne. lvgarantē pušķu drošību pat aukstajā sezonā.

Šeit ir piemērs no viena no konkurentiem:

Pie mums ir izdevīgi pasūtīt smaržīgas kompozīcijas, jo garantējam 100% naudas atdošanas garantiju, ja rodas šaubas par ziedu svaigumu.

Konkurenta garantija tiek nodrošināta ar naudu, kas ir svarīgāka par abstraktu garantiju.

Apsveriet citu piemēru - tekstu tiešsaistes veikala kategorijas "keramikas flīzes" lapā:

Šis teksts nenes nekādu noderīgu semantisko slodzi, ciets ūdens. Visticamāk, persona, kas ieradās vietnē un pieņem pirkuma lēmumu, vēlas uzzināt produkta priekšrocības un iespējamās konfigurācijas, tā vietā viņš saņem bezjēdzīgu rakstzīmju kopu.

Tagad apskatīsim konkurenta tekstu:

Šis teksts ir noderīgāks, jo īsumā izklāsta atšķirības starp flīzēm un palīdz saprast, kā izvēlēties pareizo.

Tādējādi, salīdzinot konkurentu tekstus ar savējiem, var iegūt daudz noderīgas informācijas, kas palīdzēs tekstu autoriem, sastādot TOR.

Tekstu atbilstība

Turpinot tēmu par tekstu kvalitāti, nevar nepieskarties to aktualitātei. Šodien, lai teksts būtu atbilstošs, nepietiek tikai ar atslēgvārdu iekļaušanu. Lai palielinātu lapas atbilstību un tajā pašā laikā nepadarītu tekstu surogātpastu, jālieto ar tēmu saistīti vārdi.

Novērtējot teksta atbilstību vaicājumam, meklētājs analizē ne tikai atslēgvārdu klātbūtni, bet arī papildu vārdus, tādējādi nosakot teksta nozīmi. Piemēram, ja rakstām tekstu par ziloni, tad var uzskatīt saistītos vārdus: “stumbrs”, “ilkņi”, “daba”, “zoodārzs”. Ja teksts par šaha figūru ir “zilonis”, tad šie vārdi būs: “figūra”, “čeks”, “karaliene” utt.

Konkurentu tekstos varat iegūt savām vajadzībām piemērotāko vārdu sarakstu. Lai to izdarītu, jums jāveic šādas darbības:

— Mēs iekopējam visus tekstus no TOP-10 vēlamajam augstfrekvences pieprasījumam dažādos teksta failos.

- Mēs noņemam no tekstiem runas daļas, pieturzīmes un ciparus (apskatīts iepriekš).

- Sarindojiet vārdus rindā — izmantojiet funkciju "Meklēt un aizstāt" ar regulārām izteiksmēm. Aizstāt atstarpi ar \n.

- Tālāk visas vārdu formas ir jāpārnes uz parasto vārdnīcas formu (lemma). Lai to izdarītu, varat izmantot pakalpojumu https://tools.k50project.ru/lemma/. Laukā ievadiet vārdu sarakstu no katra faila atsevišķi un noklikšķiniet uz pogas "lemmetize and output as a csv table". Rezultātā ir jābūt 10 failiem ar lemmetizētiem vārdiem.

- Katrā failā mēs noņemam vārdu dublikātus.

- Apvienojiet vārdus no failiem vienā sarakstā.

— Tagad jāizveido frekvenču vārdnīca. Lai to izdarītu, pievienojiet iegūto sarakstu pakalpojumam https://tools.k50project.ru/lemma/ un noklikšķiniet uz "Izveidot frekvenču vārdnīcu CSV formātā".

- Mūsu vārdu saraksts ir gatavs:

Ja biežums ir 10, tad šis vārds tika lietots visās 10 vietnēs, ja 8, tad tikai 8 utt. Mēs iesakām lietot biežākos vārdus, tomēr starp retajiem vārdiem var atrast interesantus risinājumus.

Tādā vienkāršā veidā jūs varat iegūt tematisko vārdu sarakstu tekstu autoru TOR sastādīšanai.

Kā redzat, konkurenti ir ļoti svarīgs informācijas avots, kas var palīdzēt labāk optimizēt vietnes. Šajā rakstā esmu apskatījis ne tuvu visus aspektus, un arī turpmāk es turpināšu rakstīt par to, kas ir noderīgs un kā jūs varat mācīties no saviem konkurentiem.

Abonēt biļetenuŠie algoritmi ir paredzēti, lai meklētu iepriekš nezināmā tekstā, un tos var izmantot, piemēram, teksta redaktoros, dokumentu skatītājos vai tīmekļa pārlūkprogrammās, lai meklētu lapā. Tiem nav nepieciešama teksta iepriekšēja apstrāde, un tie var darboties ar nepārtrauktu datu plūsmu.

Lineārā meklēšana

Vienkārša noteiktas metrikas (piemēram, Levenšteina metrikas) secīga lietošana vārdiem no ievades teksta. Izmantojot metriku ar ierobežojumu, šī metode ļauj sasniegt optimālu veiktspēju. Bet tajā pašā laikā, jo vairāk k, jo ilgāks darbības laiks palielinās. Asimptotiskais laika aprēķins - O (kn).

Bitap (pazīstams arī kā Shift-Or vai Baeza-Yates-Gonnet, un tā modifikācija no Wu-Manber)

Algoritms bitap un tās dažādās modifikācijas visbiežāk tiek izmantotas neskaidrai meklēšanai bez indeksēšanas. Tās variācija tiek izmantota, piemēram, unix utilītprogrammā agrep , kas pilda funkcijas, kas līdzīgas standarta grep , bet ar atbalstu meklēšanas vaicājumā esošajām kļūdām un pat nodrošina ierobežotas regulāro izteiksmju izmantošanas iespējas.

Pirmo reizi šī algoritma ideju ierosināja pilsoņi Rikardo Baeza-Yates Un Gastons Gonets, publicējot saistītu rakstu 1992. gadā.
Algoritma sākotnējā versija attiecas tikai uz rakstzīmju aizstāšanu un faktiski aprēķina attālumu Hammings. Bet nedaudz vēlāk saule wu Un Udi Manbers ierosināja šī algoritma modifikāciju, lai aprēķinātu attālumu Levenšteins, t.i. nodrošināja atbalstu ievietošanai un dzēšanai un, pamatojoties uz to, izstrādāja pirmo utilīta agrep versiju.






Rezultāta vērtība

Kur k- kļūdu skaits, j- rakstzīmju indekss, s x - rakstzīmju maska ​​(maskā atsevišķi biti atrodas pozīcijās, kas atbilst norādītās rakstzīmes pozīcijām pieprasījumā).
Vaicājuma atbilstību vai neatbilstību nosaka iegūtā vektora R pats pēdējais bits.

Šī algoritma lielo ātrumu nodrošina aprēķinu bitu paralēlisms - vienā operācijā iespējams veikt aprēķinus uz 32 un vairāk bitiem vienlaicīgi.
Tajā pašā laikā triviālā realizācija atbalsta tādu vārdu meklēšanu, kuru garums nepārsniedz 32. Šo ierobežojumu nosaka standarta tipa platums. starpt(32 bitu arhitektūrā). Varat arī izmantot lielu izmēru veidus, taču tas var zināmā mērā palēnināt algoritmu.

Neskatoties uz to, ka šī algoritma asimptotiskais darbības laiks O (kn) ir tāda pati kā lineārā metode, tā ir daudz ātrāka ar gariem vaicājumiem un kļūdu skaitu k virs 2.

Testēšana

Pārbaude tika veikta 3,2 miljonu vārdu garam tekstam, vidējais vārda garums bija 10.
Precīza meklēšana
Meklēšanas laiks: 3562 ms
Meklējiet, izmantojot Levenshtein metriku
Meklēšanas laiks plkst k=2: 5728 ms
Meklēšanas laiks plkst k=5: 8385 ms
Meklējiet, izmantojot Bitap algoritmu ar Wu-Manber modifikācijām
Meklēšanas laiks plkst k=2: 5499 ms
Meklēšanas laiks plkst k=5: 5928 ms

Acīmredzot vienkārša meklēšana, izmantojot metriku, atšķirībā no Bitap algoritma, ir ļoti atkarīga no kļūdu skaita. k.

Tomēr, ja runa ir par meklēšanu lielos daudzumos nemainīta teksta, meklēšanas laiku var ievērojami samazināt, iepriekš apstrādājot šādu tekstu, ko sauc arī par indeksēšana.

Izplūdušās meklēšanas algoritmi ar indeksēšanu (bezsaistē)

Visu izplūdušās meklēšanas algoritmu iezīme ar indeksēšanu ir tāda, ka indekss tiek veidots saskaņā ar vārdnīcu, kas sastādīta no avota teksta vai datubāzes ierakstu saraksta.

Šajos algoritmos problēmas risināšanai tiek izmantotas dažādas pieejas - daži no tiem izmanto samazināšanu, lai precīzi meklētu, citi izmanto metrikas īpašības, lai izveidotu dažādas telpiskās struktūras utt.

Pirmkārt, pirmajā solī no avota teksta tiek veidota vārdnīca, kas satur vārdus un to pozīcijas tekstā. Varat arī saskaitīt vārdu un frāžu biežumu, lai uzlabotu meklēšanas rezultātu kvalitāti.

Tiek pieņemts, ka indekss, tāpat kā vārdnīca, ir pilnībā ielādēts atmiņā.

Vārdnīcas taktiskās un tehniskās īpašības:

  • Avotteksts - 8,2 gigabaiti materiālu no Moškova bibliotēkas (lib.ru), 680 miljoni vārdu;
  • Vārdnīcas izmērs - 65 megabaiti;
  • Vārdu skaits - 3,2 miljoni;
  • Vidējais vārda garums ir 9,5 rakstzīmes;
  • Saknes vidējais kvadrātveida vārda garums (var būt noderīgi, novērtējot dažus algoritmus) - 10,0 rakstzīmes;
  • Alfabēts - lielie burti A-Z, bez E (lai vienkāršotu dažas darbības). Vārdi, kas satur rakstzīmes, kas nav alfabēta, vārdnīcā nav iekļauti.
Vārdnīcas izmēra atkarība no teksta apjoma nav strikti lineāra - līdz noteiktam apjomam veidojas pamata vārdu rāmis, kas svārstās no 15% pie 500 tūkstošiem vārdu līdz 5% pie 5 miljoniem, un tad atkarība tuvojas lineārai. , lēnām samazinoties un sasniedzot 0,5% pie 680 miljoniem vārdu. Turpmāko izaugsmes uzturēšanu lielākoties nodrošina reti vārdi.

Parauga paplašināšanas algoritms

Šo algoritmu bieži izmanto pareizrakstības pārbaudes sistēmās (t.i., pareizrakstības pārbaudītājos), kur vārdnīcas izmērs ir mazs vai ātrums nav galvenais kritērijs.
Tas ir balstīts uz neskaidrās meklēšanas problēmas samazināšanu līdz precīzai meklēšanas problēmai.

No sākotnējā vaicājuma tiek izveidots "kļūdainu" vārdu kopums, katram no kuriem pēc tam tiek veikta precīza meklēšana vārdnīcā.

Tās darbības laiks lielā mērā ir atkarīgs no kļūdu skaita k un no alfabēta A lieluma, un, ja tiek izmantota binārā vārdnīca, meklēšana ir:

Piemēram, kad k = 1 un vārdiem, kuru garums ir 7 (piemēram, "Krokodils") krievu alfabētā, kļūdaino vārdu kopa būs aptuveni 450 liela, tas ir, būs jāveic 450 vārdnīcas vaicājumi, kas ir diezgan pieņemami.
Bet jau plkst k = 2šāda komplekta lielums būs vairāk nekā 115 tūkstoši opciju, kas atbilst pilnīgam nelielas vārdnīcas uzskaitījumam jeb mūsu gadījumā 1/27, un tāpēc darbības laiks būs diezgan liels. Tajā pašā laikā nevajadzētu aizmirst, ka katram no šiem vārdiem vārdnīcā ir jāmeklē precīza atbilstība.

Īpatnības:
Algoritmu var viegli modificēt, lai pēc patvaļīgiem noteikumiem ģenerētu "kļūdainus" variantus, turklāt tam nav nepieciešama iepriekšēja vārdnīcas apstrāde un attiecīgi papildu atmiņa.
Iespējamie uzlabojumi:
Ir iespējams ģenerēt nevis visu "kļūdaino" vārdu kopu, bet tikai tos, kuri, visticamāk, var rasties reālā situācijā, piemēram, vārdus, ņemot vērā bieži sastopamās pareizrakstības vai drukas kļūdas.

Šī metode pastāv jau ilgu laiku un ir visplašāk izmantotā, jo tās ieviešana ir ārkārtīgi vienkārša un nodrošina diezgan labu veiktspēju. Algoritms ir balstīts uz šādu principu:
"Ja vārds A atbilst vārdam B, ņemot vērā vairākas kļūdas, tad ar lielu varbūtības pakāpi tiem būs vismaz viena kopīga apakšvirkne ar garumu N."
Šīs N garuma apakšvirknes sauc par N-gramiem.
Indeksēšanas laikā vārds tiek sadalīts šādos N-gramos, un pēc tam šis vārds tiek iekļauts katra no šiem N-gramiem sarakstos. Meklēšanas laikā vaicājums tiek sadalīts arī N-gramos, un katram no tiem secīgi tiek meklēts vārdu saraksts, kas satur šādu apakšvirkni.

Praksē visbiežāk lietotās ir trigrammas – apakšvirknes ar garumu 3. Izvēloties lielāku N vērtību, tiek ierobežots minimālais vārda garums, pie kura jau ir iespējama kļūdu noteikšana.

Īpatnības:
N-gramu algoritms neatrod visus iespējamos nepareizi uzrakstītos vārdus. Ja ņemam, piemēram, vārdu VOTKA un sadalām to trigrammos: IN T KA → VO T PAR T UZ T KA - jūs varat redzēt, ka tie visi satur kļūdu T. Tādējādi vārds "VODKA" netiks atrasts, jo tas nesatur nevienu no šiem trigrammiem un neietilps tiem atbilstošajos sarakstos. Tādējādi, jo īsāks ir vārda garums un vairāk kļūdu tajā, jo lielāka iespēja, ka tas neiekļūs sarakstos, kas atbilst vaicājuma N-gramiem, un nebūs klāt rezultātos.

Tikmēr N-gramu metode ļauj izmantot savas metrikas ar patvaļīgām īpašībām un sarežģītību, taču jums par to ir jāmaksā - to lietojot, jums joprojām ir secīgi jāuzskaita apmēram 15% vārdnīcas, kas ir diezgan partija lielām vārdnīcām.

Iespējamie uzlabojumi:
N-gramu jaucējtabulas ir iespējams sadalīt pēc vārdu garuma un N-grama pozīcijas vārdā (1. modifikācija). Kā meklētā vārda un vaicājuma garums nevar atšķirties vairāk par k, un N-grama pozīcijas vārdā var atšķirties ne vairāk kā par k. Tādējādi būs jāpārbauda tikai šī N-grama vietai vārda atbilstošā tabula, kā arī k tabulas kreisajā pusē un k tabulas labajā pusē, t.i. Kopā 2k+1 blakus esošie galdi.

Varat vēl vairāk samazināt skenēšanai nepieciešamās kopas lielumu, sadalot tabulas pēc vārda garuma un līdzīgi aplūkojot tikai blakus esošās tabulas. 2k+1 tabulas (2. modifikācija).

Šis algoritms ir aprakstīts L.M. Boicova rakstā. Parakstu jaukšana. Tas ir balstīts uz diezgan acīmredzamu vārda "struktūras" attēlojumu bitu veidā, kas tiek izmantots kā jaucējzīme (paraksts) hash tabulā.

Indeksēšanas laikā šādas jaucējkodas tiek aprēķinātas katram vārdam, un tabulā tiek ievadīts šim jaukumam atbilstošais vārdnīcas vārdu saraksts. Pēc tam meklēšanas laikā vaicājumam tiek aprēķināta jaucējvērtība un tiek sakārtotas visas blakus esošās jaucējdaļas, kas atšķiras no sākotnējās ne vairāk kā par k bitiem. Katrai no šīm hashēm tiek meklēts atbilstošo vārdu saraksts.

Hash aprēķināšanas process – katram jaucējkoda bitam tiek piešķirta rakstzīmju grupa no alfabēta. 1. bits pozīcijā i jauktā nozīmē, ka sākotnējā vārdā ir rakstzīme no i-th alfabēta grupas. Burtu secībai vārdā nav nekādas nozīmes.

Noņemot vienu rakstzīmi, jaucējvērtība vai nu netiks mainīta (ja vārdā joprojām ir rakstzīmes no vienas un tās pašas alfabēta grupas), vai arī šai grupai atbilstošais bits mainīsies uz 0. Ievietojot to tādā pašā veidā, tiks mainīts vai nu viens bits. iestatīt uz 1, pretējā gadījumā izmaiņas nebūs. Nomainot rakstzīmes, viss ir nedaudz sarežģītāk - hash var palikt nemainīgs vispār, vai arī tas var mainīties 1 vai 2 pozīcijās. Permutējot, nekādas izmaiņas nenotiek, jo rakstzīmju secība veidojot jaucēju, kā minēts iepriekš, netiek ņemta vērā. Tādējādi, lai pilnībā segtu k kļūdas, jums ir jāmaina vismaz 2k mazliet hashā.

Darbības laiks vidēji ar k "nepilnīgu" (ievietošanas, dzēšanas un transponēšanas, kā arī neliela daļa nomaiņu) kļūdām:

Īpatnības:
Sakarā ar to, ka, nomainot vienu rakstzīmi, var mainīties divi biti vienlaikus, algoritms, kas īsteno, piemēram, ne vairāk kā 2 bitu izkropļojumu vienlaikus, faktiski neradīs visu rezultātu daudzumu, jo nav nozīmīga (atkarībā no jaukšanas lieluma attiecības pret alfabētu) vārdu daļa ar diviem aizvietojumiem (un jo lielāks ir jaukšanas lielums, jo biežāk rakstzīmju aizstāšana izraisīs divu bitu izkropļojumus vienlaikus un jo mazāk pilnīgs rezultāts būs). Turklāt šis algoritms nepieļauj prefiksu meklēšanu.

BK koki

Koki Burkhards-Kellers ir metriskie koki, šādu koku konstruēšanas algoritmi ir balstīti uz metrikas īpašību izpildīt trīsstūra nevienādību:

Šis rekvizīts ļauj metrikā veidot patvaļīgas dimensijas metrikas telpas. Šādas metriskās telpas nav obligāti Eiklīda, piemēram, metriku Levenšteins Un Damerau-Lēvenšteina formā ne-eiklīda telpa. Pamatojoties uz šiem rekvizītiem, varat izveidot datu struktūru, kas veic meklēšanu šādā metriskajā telpā, kas ir Barkhard-Keller koki.

Uzlabojumi:
Varat izmantot dažu metrikas iespēju aprēķināt attālumu ar ierobežojumu, iestatot augšējo robežu, kas vienāda ar maksimālā attāluma līdz virsotnes pēcnācējiem un iegūtā attāluma summu, kas nedaudz paātrinās procesu:

Testēšana

Testēšana tika veikta klēpjdatorā ar Intel Core Duo T2500 (2GHz/667MHz FSB/2MB), 2Gb RAM, OS - Ubuntu 10.10 Desktop i686, JRE - OpenJDK 6 Update 20.

Testēšana tika veikta, izmantojot Damerau-Levenshtein attālumu un kļūdu skaitu k = 2. Indeksa lielums tiek norādīts kopā ar vārdnīcu (65 MB).

Indeksa izmērs: 65 MB
Meklēšanas laiks: 320 ms / 330 ms
Rezultātu pilnīgums: 100%

N grami (oriģināls)
Indeksa izmērs: 170 MB
Indeksa izveides laiks: 32 s
Meklēšanas laiks: 71 ms / 110 ms
Rezultātu pilnīgums: 65%
N grami (1. modifikācija)
Indeksa izmērs: 170 MB
Indeksa izveides laiks: 32 s
Meklēšanas laiks: 39 ms / 46 ms
Rezultātu pilnīgums: 63%
N grami (2. modifikācija)
Indeksa izmērs: 170 MB
Indeksa izveides laiks: 32 s
Meklēšanas laiks: 37 ms / 45 ms
Rezultātu pilnīgums: 62%

Indeksa izmērs: 85 MB
Indeksa izveides laiks: 0,6 s
Meklēšanas laiks: 55 ms
Rezultātu pilnīgums: 56,5%

BK koki
Indeksa izmērs: 150 MB
Indeksa izveides laiks: 120 s
Meklēšanas laiks: 540 ms
Rezultātu pilnīgums: 63%

Kopā

Lielākā daļa indeksēto izplūdušās meklēšanas algoritmu nav īsti sublineāri (t.i., tiem ir asimptotisks darbības laiks O(log n) vai zemāks), un to darbības ātrums parasti ir tieši atkarīgs no N. Tomēr daudzie uzlabojumi un pilnveidojumi ļauj sasniegt pietiekami īsu darbības laiku pat ar ļoti lielu vārdnīcu apjomu.

Ir arī daudz daudzveidīgākas un neefektīvākas metodes, kuru pamatā cita starpā ir dažādu paņēmienu un citur jau izmantotu paņēmienu pielāgošana noteiktai mācību jomai. Starp šīm metodēm ir prefiksu koku (Trie) pielāgošana izplūdušās meklēšanas problēmām, kuras es atstāju bez uzraudzības tā zemās efektivitātes dēļ. Bet ir arī algoritmi, kuru pamatā ir oriģinālās pieejas, piemēram, algoritms Māss-Novāks, kas, lai gan tam ir sublineārs asimptotisks darbības laiks, ir ārkārtīgi neefektīvs, jo aiz šāda laika novērtējuma slēpjas milzīgas konstantes, kas izpaužas kā milzīga indeksa lielums.

Izplūdušo meklēšanas algoritmu praktiskā izmantošana reālajās meklētājprogrammās ir cieši saistīta ar fonētiskajiem algoritmiem, leksikas cilmes algoritmiem - viena un tā paša vārda dažādu vārdu formu bāzes daļas izcelšana (piemēram, šādu funkcionalitāti nodrošina Snowball un Yandex mystem), kā kā arī ranžēšanu, pamatojoties uz statistikas informāciju vai izmantojot sarežģītas, sarežģītas metrikas.

  • Levenshtein attālums (ar izgriezumu un prefiksa iespēju);
  • Damerau-Levenshtein distance (ar izgriezumu un prefiksa iespēju);
  • Bitap algoritms (Shift-OR / Shift-AND ar Wu-Manber modifikācijām);
  • Parauga paplašināšanas algoritms;
  • N-gramu metode (oriģināls un ar modifikācijām);
  • Parakstu jaukšanas metode;
  • BK-koki.
Es gribēju padarīt kodu viegli saprotamu un tajā pašā laikā pietiekami efektīvu praktiskai lietošanai. Pēdējās sulas izspiešana no JVM nebija manos uzdevumos. Izbaudi.

Ir vērts atzīmēt, ka, pētot šo tēmu, es nācu klajā ar dažiem no saviem uzlabojumiem, kas ļauj man samazināt meklēšanas laiku par lielumu, jo indeksa lielums ir mērens pieaugums un daži ierobežojumi metriku izvēles brīvība. Bet tas ir pavisam cits stāsts.


Definīcijas piemēri Lietojumprogrammas n-gramu valodas modeļa izveide N-gramu varbūtības aprēķināšana Apmācības korpusa retuma novēršana o Papildinājuma izlīdzināšana o Vitena-Bela diskontēšana o Gudra Tjūringa diskontēšana o Katzs atkāpšanās o dzēstā interpolācija n-gramu valodas modeļa novērtēšana, izmantojot entropija Saturs


N-gram (angļu N-gram) kādas secības N elementu apakšsecība. Apsveriet vārdu secības. Unigrams kaķis, suns, zirgs,... Bigrams mazs kaķis, liels suns, spēcīgs zirgs,... Trigrams mazs kaķis ēd, liels suns rej, spēcīgs zirgs skrien,... Definīcija


Lieto uzdevumu piemēri Runas atpazīšana. Daži vārdi ar atšķirīgu rakstību tiek izrunāti vienādi. Uzdevums ir izvēlēties pareizo vārdu kontekstā. Tekstu ģenerēšana par noteiktu tēmu. Piemērs: Yandex.Abstracts. Meklēt semantiskas kļūdas. Viņš mēģina izslīpēt - sintakses, tiesa, semantikas ziņā nē. Viņš cenšas noskaidrot – pareizi. mēģinājums noskaidrot ir atrodams angļu valodas tekstos daudz biežāk nekā mēģinājums precizēt, kas nozīmē, ka, ja ir pieejama statistika, jūs varat atrast un novērst šāda veida kļūdu


N-gramu valodas modeļa izveide Lai atrisinātu uzskaitītās lietišķās problēmas, nepieciešams izveidot N-gramu valodas modeli. Lai izveidotu modeli, nepieciešams: 1. Aprēķināt n-gramu varbūtības mācību korpusā. 2. Novērsiet korpusa retuma problēmu, izmantojot kādu no antialiasing metodēm. 3. Novērtējiet iegūtā n-gramu valodas modeļa kvalitāti, izmantojot entropiju.


N-gramu varbūtības aprēķināšana (1) Apmācības korpusā noteikti n-grami notiek ar dažādām frekvencēm. Par katru n-gramu mēs varam saskaitīt, cik reizes tas notiek korpusā. Pamatojoties uz iegūtajiem datiem, var izveidot varbūtības modeli, ar kuru pēc tam var novērtēt n-gramu varbūtību kādā testa korpusā.


N-gramu varbūtības aprēķināšana (2) Aplūkosim piemēru. Lai korpuss sastāv no viena teikuma: Viņi piknikoja pie baseina, tad atgūlās zālītē un skatījās uz zvaigznēm. Izvēlamies n-gramus. Unigrammas: viņi, izraudzījušies, pie, … Digrammas: viņi piknikoja, piknikoja, pie, … trigrammas Viņi piknika pie, pie baseina, …


N-gramu varbūtības aprēķins (3) Tagad ir iespējams saskaitīt n-gramus. Visas atlasītās bi- un trigrammas korpusā notiek vienu reizi. Visas unigrammas, izņemot vārdu the, arī sastopamas vienreiz. Vārds the parādās trīs reizes. Tagad, kad mēs zinām, cik reižu katrs n-grams notiek, mēs varam izveidot n-gramu varbūtības modeli. Unigrammu gadījumā vārda u varbūtību var aprēķināt pēc formulas: Piemēram, vārdam varbūtība būs 3/16 (jo korpusā ir 16 vārdi, no kuriem 3 ir vārds the) . Vārda u gadījumu skaits mācību korpusā Viņi piknikoja pie baseina, tad atgūlās uz zāles un skatījās uz zvaigznēm.


1, varbūtība tiek uzskatīta nedaudz savādāk. Apsveriet bigrammu gadījumu: lai ir nepieciešams aprēķināt baseina bigramma varbūtību. Ja mēs uzskatām katru lielgabala vārdu par kādu notikumu, tad ticot" title="(!LANG:N-gramu varbūtības aprēķins (4) N-gramiem, kur n>1, varbūtība tiek aprēķināta nedaudz savādāk. Aplūkosim bigrammu gadījumu : lai ir jāaprēķina baseina digramma Ja katru digrammas vārdu uzskatām par kādu notikumu, tad ticot" class="link_thumb"> 9 !} N-gramu varbūtības aprēķināšana (4) N-gramiem, kur n>1, varbūtību aprēķina nedaudz savādāk. Apsveriet bigrammu gadījumu: lai ir nepieciešams aprēķināt baseina bigramma varbūtību. Ja mēs uzskatām, ka katrs bigramma vārds ir kaut kāds notikums, tad notikumu kopas varbūtību var aprēķināt pēc formulas: Tātad, bigramma varbūtība ir kopums:, kur 1, varbūtība tiek uzskatīta nedaudz savādāk. Apsveriet bigrammu gadījumu: lai ir nepieciešams aprēķināt baseina bigramma varbūtību. Ja mēs uzskatām, ka katrs bigramma vārds ir kaut kāds notikums, tad, uzskatot "> 1, varbūtība tiek uzskatīta nedaudz savādāka. Aplūkosim bigrammu gadījumu: lai ir jāaprēķina kopas bigramma varbūtība. Ja mēs katru bigramma vārdu uzskatām par kāds notikums, tad notikumu kopas varbūtību var aprēķināt pēc formulas : Tādējādi bigramma varbūtība ir kopums:, kur "> 1, varbūtību aprēķina nedaudz savādāk. Apsveriet bigrammu gadījumu: lai ir nepieciešams aprēķināt baseina bigramma varbūtību. Ja mēs uzskatām katru lielgabala vārdu par kādu notikumu, tad ticot" title="(!LANG:N-gramu varbūtības aprēķins (4) N-gramiem, kur n>1, varbūtība tiek aprēķināta nedaudz savādāk. Aplūkosim bigrammu gadījumu : lai ir jāaprēķina baseina digramma Ja katru digrammas vārdu uzskatām par kādu notikumu, tad ticot"> title="N-gramu varbūtības aprēķināšana (4) N-gramiem, kur n>1, varbūtību aprēķina nedaudz savādāk. Apsveriet bigrammu gadījumu: lai ir nepieciešams aprēķināt baseina bigramma varbūtību. Ja katru digrammas vārdu uzskatām par kaut kādu notikumu, tad ticēt"> !}


N-gramu varbūtības aprēķins (5) Tagad apsveriet patvaļīga n-grama (vai n gara teikuma) varbūtības aprēķinu. Paplašinot bigramu gadījumu, iegūstam varbūtības formulu n-gramiem Tādējādi teikuma varbūtības aprēķināšana tiek reducēta uz N-gramu nosacītās varbūtības aprēķināšanu, kas veido šo teikumu:




Korpusa retuma novēršana (1) Vienkārša (neizlīdzināta) n-gramu valodas modeļa problēma: dažiem n-gramiem varbūtību var ievērojami nenovērtēt (vai pat nulle), lai gan patiesībā (pārbaudes korpusā) n-grami var parādīties diezgan bieži. Iemesls: ierobežots apmācību korpuss un tā specifika. Risinājums: pazeminot dažu n-gramu varbūtību, palieliniet to n-gramu varbūtību, kuri nebija sastopami (vai bija sastopami diezgan reti) apmācības korpusā.




Korpusa skopuma likvidēšana (3) Skraistības novēršanas algoritmos tiek lietoti šādi jēdzieni: Veidi – dažādi vārdi (vārdu secības) tekstā. Žetoni ir visi vārdi (vārdu secības) tekstā. Viņi piknikoja pie baseina, tad atgūlās zālītē un skatījās uz zvaigznēm - 14 veidi, 16 žetoni





Add-one izlīdzināšana (4) Metode izraisa spēcīgu kļūdu aprēķinos (piemēram, iepriekšējā slaidā tika parādīts, ka vārdam ķīniešu bigramu skaits tika samazināts 8 reizes). Testi ir parādījuši, ka neizlīdzinātais modelis bieži uzrāda precīzākus rezultātus. Tāpēc metode ir interesanta tikai no teorētiskā viedokļa.


Witten-Bell diskontēšana (1) Pamatojoties uz vienkāršu ideju: izmantojiet datus par n-gramiem, kas sastopami apmācības korpusā, lai novērtētu trūkstošo n-gramu varbūtību. Metodes ideja ir pārņemta no saspiešanas algoritmiem: tiek apskatīti divu veidu notikumi - tie satikās ar jaunu rakstzīmi (tipu) un tie satikās ar rakstzīmi (token). Varbūtības formula visiem trūkstošajiem n-gramiem (tas ir, varbūtība atbilst n-gramam testa korpusā, kas nebija mācību korpusā): N ir marķieru skaits apmācības korpusā, T ir tipu skaits kas jau ir sastaptas mācību korpusā






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




Gudra Tjūringa diskontēšana (1) Ideja: n-gramiem, kas sastopami nulle reizes (c reizes), rezultāts ir proporcionāls vienreiz sastopamo n-gramu skaitam (c + 1 reize). Apsveriet piemēru: Pieņemsim, ka tika noķertas 18 zivis. Kopumā noķertas 6 dažādas sugas, un trīs sugās noķerts tikai viens pārstāvis. Jāatrod iespējamība, ka nākamā zivs piederēs kādai jaunai sugai. Kopā ir iespējamas 7 sugas (6 sugas jau ir noķertas).








Katzs Backoff (2) Koeficients α ir nepieciešams, lai pareizi sadalītu N-gramu atlikušo varbūtību saskaņā ar (N-1)-gramu varbūtības sadalījumu. Ja neievadīsiet α, aprēķins būs kļūdains, jo vienādība netiks izpildīta: α aprēķins ir dots pārskata beigās. Valodas modeļa novērtējums, izmantojot entropiju (1) Entropija ir nenoteiktības mērs. Ar entropijas palīdzību var noteikt piemērotāko N-gramu valodas modeli konkrētajam pielietotajam uzdevumam. Binārā entropijas formula: Piemērs: Aprēķiniet monētu mešanas testa entropiju. Atbilde: 1 bits, ar nosacījumu, ka eksperimenta rezultāti ir vienlīdz ticami (abas puses izkrīt ar varbūtību 1/2).




Valodas modeļa novērtējums, izmantojot entropiju (3) Dažādu valodu modeļu salīdzināšanai tiek izmantota krustentropija: Jo tuvāk krustentropijas H(p,m) vērtība reālajai entropijai H(p), jo labāks ir valodas modelis: Mūsu gadījumā H(p ) ir testa korpusa entropija. m(w) — valodas modelis (piemēram, N gramu modelis)


Valodas modeļa novērtēšana, izmantojot entropiju (4) Valodas modeļa kvalitātes novērtēšanai ir vēl viena metode, kuras pamatā ir t.s. savienojamības indikators (apjukums). Ideja: Aprēķiniet visa testa korpusa varbūtību. Labāks modelis parādīs lielāku varbūtību. apmulsuma formula: Tādējādi, jo mazāka ir neskaidrība, jo labāks modelis. Neskaidrību var interpretēt kā vidējo vārdu skaitu, kas var būt aiz noteikta vārda (t.i., jo vairāk neskaidrību, jo lielāka neskaidrība un līdz ar to sliktāks valodas modelis). Saikne starp apjukumu un bināro entropiju:


Valodas modeļa novērtējums, izmantojot entropiju (5) Kā piemēru ņemiet vērā dažu korpusu neskaidrības vērtības, kas iegūtas, izmantojot apmācītus unigrammu, bigrammu un trigrammu modeļus: Trigrammu gadījumā apmulsums ir vismazākais, jo noskaidrošanu atvieglo visu modeļu garākais vēstures garums (vienāds ar 2), aprēķinot trigrammu nosacītās varbūtības. UnigramBigramTrigram neskaidrība


Es vēlos ieviest dažas n-gram lietojumprogrammas (vēlams PHP).

Kāda veida n-grami ir piemērotāki lielākajai daļai mērķu? Vārda līmenis vai rakstzīmju līmenis n-gramu līmenī? Kā PHP var ieviest n-gramatisko marķieri?

Pirmkārt, es vēlētos uzzināt, kas ir N-grami. Vai tas ir pareizi? Lūk, kā es saprotu n-gramus:

Ieteikums: "Es dzīvoju Ņujorkā."

vārdu līmeņa birams (2 n): "# I", "Es dzīvoju", "dzīvoju", "Ņujorkā", "NY #"

rakstzīmju līmeņa birams (2 n): "#I", "I #", "#l", "li", "iv", "ve", "e #", "#i", "in", "n#", "#N", "NY", "Y#"

Kad jums ir šis n-gramu daļu masīvs, izveidojiet dublikātus un katrai daļai pievienojiet skaitītāju, kas norāda frekvenci:

vārda līmeņa lielie burti:

rakstzīmju līmeņa lielie burti:

Tas ir pareizs?

Tāpat es vēlētos uzzināt vairāk par to, ko varat darīt ar n-gramiem:

  • Kā es varu noteikt teksta valodu, izmantojot n-grammas?
  • Vai ir iespējams veikt mašīntulkošanu, izmantojot n-gramus, pat ja jums nav bilingvāla korpusa?
  • Kā izveidot surogātpasta filtru (spam, šķiņķis)? Apvienot n-gramus ar Bajesa filtru?
  • Kā es varu atrast tēmu? Piemēram: vai ir teksts par basketbolu vai suņiem? Mana pieeja (ar Vikipēdijas rakstu par "suņiem" un "basketbolam" rīkojieties šādi): uzzīmējiet n-gramu vektorus abiem dokumentiem, normalizējiet tos, aprēķiniet Manhetenas/Eiklida attālumu, jo tuvāk rezultāts ir 1, jo augstāks līdzība būs

Kā jūs jūtaties par manu pieteikumu, īpaši pēdējo?

Ceru, ka varat man palīdzēt. Paldies jau iepriekš!

2 atbildes

Word n-gram parasti būs noderīgāks lielākajai daļai jūsu minēto teksta analīzes lietojumprogrammu, izņemot, iespējams, valodas definīciju, kur kaut kas līdzīgs rakstzīmju trigrammām varētu sniegt labākus rezultātus. Jūs varat izveidot n-gramu vektoru teksta pamattekstam katrā jūs interesējošā valodā un pēc tam salīdzināt trigrammu frekvences katrā korpusā ar tām, kas norādītas dokumentā, kuru klasificējat. Piemēram, trigramma angļu valodā, visticamāk, parādīsies daudz biežāk nekā vācu valodā, un tā nodrošinātu zināmu statistiskās korelācijas līmeni. Kad jums ir n-gram dokumenti, turpmākai analīzei varat izvēlēties daudzus algoritmus, Baysian filtrus, N tuvāko kaimiņu, atbalsta vektora iekārtas utt.

No jūsu pieminētajām lietojumprogrammām mašīntulkošana, iespējams, ir vispiemērotākā, jo n-grami vien jūs neaizvedīs ļoti tālu. Ievades faila pārvēršana n-gram attēlojumā ir tikai veids, kā ievietot datus formātā turpmākai līdzekļu parsēšanai, taču, tā kā jūs zaudējat daudz kontekstuālās informācijas, tā var nebūt noderīga tulkošanai.

Viena lieta, kas jāņem vērā, ir tāda, ka nepietiek ar vektora izveidi vienam dokumentam un vektoru citam dokumentam, ja izmēri neatbilst. Tas nozīmē, ka vektora pirmais ieraksts nevar būt vienā dokumentā un ir citā, pretējā gadījumā algoritmi nedarbosies. Jūs iegūsit tādus vektorus kā , jo lielākajā daļā dokumentu nebūs vairāk par n-gramiem, kas jūs interesē. Šis "oderējums" arī prasa, lai jūs iepriekš noteiktu, kuras ngrams jūs iekļaujat savā analīzē. Bieži vien tas tiek īstenots kā divu pakāpju algoritms, lai vispirms noteiktu dažādu n-gramu statistisko nozīmīgumu, lai izlemtu, ko paturēt. Google "funkciju atlase", lai iegūtu vairāk informācijas.

Uz Word balstītas n-grammas, kā arī atbalsts vektoru mašīnām ir lielisks veids, kā definēt tēmu, taču, lai sagatavotu klasifikatoru, ir nepieciešams liels teksta korpuss, kas ir iepriekš klasificēts tēmās par tēmu un ārpus tēmas. Vietnē, piemēram, citeseerx, jūs atradīsiet lielu skaitu pētniecisko rakstu, kas izskaidro dažādas pieejas šai problēmai. Es neieteiktu šai problēmai eiklīda attāluma pieeju, jo tā neņem vērā atsevišķus n-gramus, pamatojoties uz statistisko nozīmību, tāpēc divi dokumenti, kas ietver , a , ir un of, tiks uzskatīti par labāku atbilstību nekā divi dokumenti , kas ietvēra Baysian. Stopvārdu noņemšana no interesējošo n-gramu skaita to nedaudz uzlabotu.

Jums ir taisnība par n-gramu definīciju.

Meklēšanas tipa lietojumprogrammām varat izmantot vārdu līmeņa n-grammas. Rakstzīmju līmeņa n-gramus vairāk var izmantot paša teksta parsēšanai. Piemēram, lai noteiktu teksta valodu, es izmantotu burtu frekvences pret iestatītajām valodas frekvencēm. Tas ir, tekstam aptuveni jāatbilst burtu sastopamības biežumam šajā valodā.

PHP vārdu n-gramatisko marķieri var veikt, izmantojot strtok:

Rakstzīmēm izmantojiet split:

Pēc tam varat vienkārši sadalīt masīvu jebkurā n-gramu skaitā, kā vēlaties.

Bajesa filtri ir jāapmāca lietošanai kā surogātpasta filtri, kurus var izmantot kopā ar n-gramiem. Tomēr jums ir jāsniedz viņam daudz ieguldījumu, lai viņš turpinātu mācīties.

Jūsu pēdējā pieeja izklausās pieklājīgi, jo tā apgūst lapas kontekstu... tomēr to joprojām ir diezgan sarežģīti izdarīt, taču šķiet, ka n-grami ir labs sākumpunkts.