Søk med retting

801 views

Published on

Kim Øyhus sin presentasjon av "Søk med retting" i tekst og koder.
Eksempler er:
http://findsim.com
http://kode.oyhus.no

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
801
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
1
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Søk med retting

    1. 1. Øk med fletting
    2. 2. Øk med flettingSøk med retting av Kim Øyhus
    3. 3. I begynnelsen var Inkasso Men jeg har jo betalt! Hvorfor skjønner de ikke det?
    4. 4. Kan dette være grunnen?Masse tall som er lette å skrive feil
    5. 5. Ønsker de at vi skal skrive feil? Slik kunne det sett utSlik ser det ut hvis de ville hatt færre feil
    6. 6. Jeg produserer KID numreog andre koder som kan rettes,og jeg retter dem når de har fått feil Dette konseptet må ofte forklares
    7. 7. Luhn-10 Øyhus*715815555022 feil 5736475462384 7 feil71581555 022 korrekt 5736475 6238497 rettet44409219198046644795 f. 5521 5505064 00 feil44490219198046644795 k. 552155505064000 rettet44400219198046644794 f. 834 38968350407 feil44400219198066444794 k. 834738968550407 rettet urettet rettet *Variant med 10 000 000 000 koder og 15 siffer
    8. 8. Luhn-10 Øyhus*Oppdager 90% av feil Oppdager 99.999% av feil Retter alltid enkeltfeil, og Retter ingen feil vanligvis flere 1 ekstra siffer 5 ekstra siffer Intet er justerbart Alt er justerbart *Variant med 10 000 000 000 koder og 15 siffer
    9. 9. *Variant med 10 000 000 000 koder og 15 sifferDenne ble valgt fordi 10 000 000 000 KID numre eromtrentlig nok for å unikt identifisere alle regninger i Skandinavia i 10 år. Det ville da vært nok å bare fylle ut KID.
    10. 10. Hvor mye feil er det? Sånn omtrentlig? KID nummer 3.6% Konto-nummer 5.1% Dato 1.1% Beløp 0.9% Andel feil funnet ved etterkontroll 2.8%Andel gjenværende feil i kontonummer 8% Resultatene er fra Kai Olsens forsking: “Customer Errors in Internet Banking”
    11. 11. Noen eksempler på Søk med retting fra telefonkatalogen og findsim.com
    12. 12. Søkes: "Jaha Kendosi" Søketid 0.3 sekunder% Avvik Navn Gate Nr PostNr. Sted Tlf. 5 117 Yahia El Qendouci Kolstadg 7 0652 Oslo 47890792 5 119 Yahia El Qendouci Kolstadgata 7 0652 Oslo 46265813 4 119 Qendouci Yahia El Kolstadgata 7 0652 Oslo 45405242 2 127 Monique Jaha Sandakerveien 140 0484 Oslo 938691921.8 128 Katja Kandolin Thomas Heftyes G 8A 0264 Oslo 476114911.5 130 Sinnarajah Kandiah Ensjøveien 31B 0661 Oslo 41788254 Diana Amendoeira1.3 131 Lutvannsv 36 0676 Oslo 97518159 Maciel Hjørungnes1.3 131 Jahn Kenneth Sanne Lundliveien 1 0580 Oslo 473353331.3 131 Sivarajah Kandiah Høyenhallveien 64 0678 Oslo 916639551.2 132 Kumar Dahal Kingos gate 18 0457 Oslo 968375951.0 134 Yara Industrial AS 41404242
    13. 13. Søkes: "Emerita 22224B24" Søketid 0.4 sekunder% Avvik Navn Gate Nr PostNr Sted Tlf29 101 Emerita Lumasac Manuel Gunnulvsvei 14 670 Oslo 22274874 6 116 Ingun Emelie Hansen Dynekilgata 15 569 Oslo 22224924 3 122 Bent Kure Hammerstads gate 23D 363 Oslo 22442414 3 123 Emerita Roy Johannessen Nuggerudveien 5 1089 Oslo 96678014 2 125 Berit Engh Hammerstads gate 21B 363 Oslo 224682492.0 127 Marita Vidvei Bjelland 952607971.4 131 Enervital helse & velvære Cort Adelers gate 33 254 Oslo 970004881.3 132 Rosario Brian Demeza James Grimstadgata 24B 464 Oslo 403312411.0 134 Juvenal Benemerito Jimenez Dr.Dedichens vei 66 675 Oslo 922249981.0 134 Bente Lund Sorgenfrigata 24B 365 Oslo 480546560.9 135 Knut Erik Borge Rief Sorgenfrigata 24B 365 Oslo 93262456
    14. 14. Søkes: "Tor Olav Fogstad" Søketid 0.3 sekunder% Avvik Navn Gate Nr PostNr. Sted Tlf.43 91 Thor Olav Drege Fougstadsgate 2 0173 Oslo 9096689714 102 Tor Olav Augestad Biskop Gunnerus G 6 0155 Oslo 41551179 6 111 Per Olav Rogstad Nydalsv 28 0484 Oslo 92420211 4 114 John Olav Togstad Langerudhaugen 12B 1187 Oslo 22289141 2 119 Per Olav Kalsheim Fougstads G 22B 0173 Oslo 93007856 2 121 Tor Olav Jacobsen Ostadalsveien 52 0753 Oslo 219470241.2 127 Tor Olav Bjørnstad Slettenv 8 1177 Oslo 915936941.1 128 Per Olav Grønnevik Bogstadv 62C 0366 Oslo 936464061.1 128 Knut Olav Krohn Lakså Fougstads gate 41A 0173 Oslo 971809080.9 130 Knut Olav Folkestad Akersg 55 0180 Oslo 930377270.8 131 Victor Lazarev Bogstadv 27B 0355 Oslo 90232609
    15. 15. Nummeropplysning• Folk vet at nummeropplysningene ikke klarer vanskelige spørsmål, og at internett er billigere• Søk med retting gjør det mulig å opplyse raskere fordi operatøren kan slurveskrive fort og alikevel få riktig svar
    16. 16. Slurveskriving på telefon, med aktiv staveretting. Det søkes rett alikevel.
    17. 17. Noen søketips• Det er bedre å skrive mye galt enn lite og riktig, fordi det gir mere informasjon• Skriv det slik det låter• Mellomrom og store forbokstaver kan være nyttige hint for søkemotoren
    18. 18. Vask av adresselister, Rens av databaser Postfordeling, pakkeutsendelser, direktereklame, kundelister, og lignende, har problemer med gale data, gale adresser. Disse feilene forsøkes rettes med mangesystemer som sammenligner data, og adresser. Søk med retting sammenligner mye bedre
    19. 19. Forskningssjef i Google, Peter Norvigs staveretter: """Spelling Corrector. Copyright 2007 Peter Norvig. Open source code under MIT license: http://www.opensource.org/licenses/mit-license.php """ import re, collections def words(text): return re.findall([a-z]+, text.lower()) def train(features): model = collections.defaultdict(lambda: 1) for f in features: model[f] += 1 return model NWORDS = train(words(file(big.txt).read())) alphabet = abcdefghijklmnopqrstuvwxyz def edits1(word): s = [(word[:i], word[i:]) for i in range(len(word) + 1)] deletes = [a + b[1:] for a, b in s if b] transposes = [a + b[1] + b[0] + b[2:] for a, b in s if len(b)>1] replaces = [a + c + b[1:] for a, b in s for c in alphabet if b] inserts = [a + c + b for a, b in s for c in alphabet] return set(deletes + transposes + replaces + inserts) def known_edits2(word): return set(e2 for e1 in edits1(word) for e2 in edits1(e1) if e2 in NWORDS) def known(words): return set(w for w in words if w in NWORDS) def correct(word): candidates = known([word]) or known(edits1(word)) or known_edits2(word) or [word] return max(candidates, key=NWORDS.get)
    20. 20. Norvig Øyhus Retter opptil 3 feil Retter opptil 200 feil Retter hele søk, Retter enkeltord på tvers av ordAlle feil er like sannsynlige Variabel feilsannsynlighet Søker i millioner av Søker i tusener av ord adresser og låt-navn Finner sannsynligste feil Integrerer alle feilene Kjører på Googles Kjører på en server serverpark
    21. 21. Kilder til feilstaving
    22. 22. Lignende lyder EIY BPDT SF MN RL SZ Like lyder KC QK SC XK VW Lignende tegn 1l b6G 2Z7 5S 8B YVU Dyslektikerfeil bdpq ae mw unc 69 E3Telefon-tastatur-feil AS SD DF FG GH HJ Forenkling ØÖ→O @ÆÅÂ→A
    23. 23. Anvendt matematikk• Sannsynlighetsregning • Modellering av modellering av modeller• Informasjonsteori• Bayes inferens • Analyserer omtrentlig googol muligheter. 10^100• Kolmogorov kompleksitet • Rekursjon (Algoritmisk informasjonsteori) • Kryptografisk analyse• Integralregning • Nær Shannon grensen
    24. 24. Tekniske detaljer• Bruker ikke indekser• Massivt sekvensielt søk• Systemet kan parallelliseres til ønsket hastighet, med lite overhead• Alle kjerner brukes effektivt i parallell
    25. 25. Tekniske detaljer• Programmert i Assembler med SSE4 128 bit, C, og C++• SSE4, Streaming SIMD Extensions, brukes til å kjøre 16 utregninger i parallell per kjerne• Intels SSE 4.1 ser ut til å være bedre, med ca 30% større ytelse her
    26. 26. Tekniske detaljer• Minne-utlegg optimalisert for hastighet. 16 GB/s på DDR2 6400• Trenger mer enn 32 ganger databasens størrelse i RAM for forhåndsutregninger som øker hastigheten ca 25 ganger, og tar under ett minutt å regne ut• Begrensingen på 200-300 feil skyldes begrensinger i standard flyttall, og kan fjernes, og har blitt fjernet ved anledning
    27. 27. Slik programmerer jeg SSE4 assembler makroer i GCC/* max16(signed chars) gjoer foelgende: * if(a>b) a=b; * PS: Mulig at disse to avhengige instruksjonene senker * prosessoren. Faar se paa det senere. Splitting? * Hvorfor PADDB i stedet for PADDSB? De er ekvivalente her, * og droppingen av satureringen gjoer det kanskje raskere. */#define qmax16(a,b) asm("psubsb %1, %0 n" "paddb %1, %0 " :"+x" (a) :"%x" (b), "x" (0) );
    28. 28. Kim ØyhusKim@ Oyhus.notlf: 9001 4425findsim.comkode.oyhus.no NTH Siv.ing. Fysikk og Matte

    ×