SlideShare a Scribd company logo
1 of 31
Øk med fletting
Øk med fletting
Søk med retting
    av Kim Øyhus
I begynnelsen var
     Inkasso

    Men jeg har jo betalt!
 Hvorfor skjønner de ikke det?
Kan dette være
    grunnen?




Masse tall som er lette å skrive feil
Ønsker de at vi skal
     skrive feil?
                    Slik kunne det sett ut
Slik ser det ut
                  hvis de ville hatt færre feil
Jeg produserer KID numre
og andre koder som kan rettes,
og jeg retter dem når de har fått feil




          Dette konseptet må ofte
                 forklares
Luhn-10                             Øyhus*

715815555022         feil 5736475462384 7   feil
71581555 022      korrekt 5736475 6238497 rettet
44409219198046644795 f. 5521 5505064 00   feil
44490219198046644795 k. 552155505064000 rettet
44400219198046644794 f. 834 38968350407   feil
44400219198066444794 k. 834738968550407 rettet

        urettet                            rettet



                         *Variant med 10 000 000 000 koder og 15 siffer
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
*Variant med 10 000 000 000 koder og 15 siffer



Denne ble valgt fordi 10 000 000 000 KID numre er
omtrentlig nok for å unikt identifisere alle regninger i
                 Skandinavia i 10 år.

      Det ville da vært nok å bare fylle ut KID.
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”
Noen eksempler på
 Søk med retting
   fra telefonkatalogen
             og



      findsim.com
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      93869192

1.8   128     Katja Kandolin       Thomas Heftyes G   8A    0264      Oslo      47611491

1.5   130     Sinnarajah Kandiah   Ensjøveien         31B 0661        Oslo      41788254
              Diana Amendoeira
1.3   131                          Lutvannsv          36    0676      Oslo      97518159
              Maciel Hjørungnes
1.3   131     Jahn Kenneth Sanne   Lundliveien        1     0580      Oslo      47335333

1.3   131     Sivarajah Kandiah    Høyenhallveien     64    0678      Oslo      91663955

1.2   132     Kumar Dahal          Kingos gate        18    0457      Oslo      96837595

1.0   134     Yara Industrial AS                                                41404242
Søkes: "Emerita 22224B24"                                                 Søketid 0.4 sekunder



% Avvik Navn                             Gate                Nr    PostNr Sted    Tlf
29    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   22468249

2.0   127   Marita Vidvei Bjelland                                                95260797

1.4   131   Enervital helse & velvære    Cort Adelers gate   33    254     Oslo   97000488

1.3   132   Rosario Brian Demeza James Grimstadgata          24B   464     Oslo   40331241

1.0   134   Juvenal Benemerito Jimenez   Dr.Dedichens vei    66    675     Oslo   92224998

1.0   134   Bente Lund                   Sorgenfrigata       24B   365     Oslo   48054656

0.9   135   Knut Erik Borge Rief         Sorgenfrigata       24B   365     Oslo   93262456
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   90966897

14    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   21947024

1.2   127   Tor Olav Bjørnstad      Slettenv             8     1177    Oslo   91593694

1.1   128   Per Olav Grønnevik      Bogstadv             62C   0366    Oslo   93646406

1.1   128   Knut Olav Krohn Lakså   Fougstads gate       41A   0173    Oslo   97180908

0.9   130   Knut Olav Folkestad     Akersg               55    0180    Oslo   93037727

0.8   131   Victor Lazarev          Bogstadv             27B   0355    Oslo   90232609
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
Slurveskriving på telefon, med aktiv staveretting.
             Det søkes rett alikevel.
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
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 mange
systemer som sammenligner data, og adresser.

             Søk med retting
          sammenligner mye bedre
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)
Norvig                         Øyhus

    Retter opptil 3 feil         Retter opptil 200 feil

                                    Retter hele søk,
     Retter enkeltord
                                    på tvers av ord

Alle 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
Kilder til feilstaving
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 E3

Telefon-tastatur-feil    AS SD DF FG GH HJ

    Forenkling          ØÖ→O @ÆÅÂ→A
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
Tekniske detaljer

• Bruker ikke indekser
• Massivt sekvensielt søk
• Systemet kan parallelliseres til ønsket
  hastighet, med lite overhead
• Alle kjerner brukes effektivt i parallell
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
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
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)       
                        );
Kim Øyhus
Kim@ Oyhus.no
tlf: 9001 4425

findsim.com
kode.oyhus.no


         NTH Siv.ing. Fysikk og Matte

More Related Content

Featured

How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...DevGAMM Conference
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationErica Santiago
 
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellGood Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellSaba Software
 
Introduction to C Programming Language
Introduction to C Programming LanguageIntroduction to C Programming Language
Introduction to C Programming LanguageSimplilearn
 

Featured (20)

How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy Presentation
 
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them wellGood Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
Good Stuff Happens in 1:1 Meetings: Why you need them and how to do them well
 
Introduction to C Programming Language
Introduction to C Programming LanguageIntroduction to C Programming Language
Introduction to C Programming Language
 

Søk med retting

  • 2. Øk med fletting Søk med retting av Kim Øyhus
  • 3. I begynnelsen var Inkasso Men jeg har jo betalt! Hvorfor skjønner de ikke det?
  • 4. Kan dette være grunnen? Masse tall som er lette å skrive feil
  • 5. Ønsker de at vi skal skrive feil? Slik kunne det sett ut Slik ser det ut hvis de ville hatt færre feil
  • 6.
  • 7. Jeg produserer KID numre og andre koder som kan rettes, og jeg retter dem når de har fått feil Dette konseptet må ofte forklares
  • 8. Luhn-10 Øyhus* 715815555022 feil 5736475462384 7 feil 71581555 022 korrekt 5736475 6238497 rettet 44409219198046644795 f. 5521 5505064 00 feil 44490219198046644795 k. 552155505064000 rettet 44400219198046644794 f. 834 38968350407 feil 44400219198066444794 k. 834738968550407 rettet urettet rettet *Variant med 10 000 000 000 koder og 15 siffer
  • 9. 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
  • 10. *Variant med 10 000 000 000 koder og 15 siffer Denne ble valgt fordi 10 000 000 000 KID numre er omtrentlig nok for å unikt identifisere alle regninger i Skandinavia i 10 år. Det ville da vært nok å bare fylle ut KID.
  • 11. 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”
  • 12. Noen eksempler på Søk med retting fra telefonkatalogen og findsim.com
  • 13. 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 93869192 1.8 128 Katja Kandolin Thomas Heftyes G 8A 0264 Oslo 47611491 1.5 130 Sinnarajah Kandiah Ensjøveien 31B 0661 Oslo 41788254 Diana Amendoeira 1.3 131 Lutvannsv 36 0676 Oslo 97518159 Maciel Hjørungnes 1.3 131 Jahn Kenneth Sanne Lundliveien 1 0580 Oslo 47335333 1.3 131 Sivarajah Kandiah Høyenhallveien 64 0678 Oslo 91663955 1.2 132 Kumar Dahal Kingos gate 18 0457 Oslo 96837595 1.0 134 Yara Industrial AS 41404242
  • 14. Søkes: "Emerita 22224B24" Søketid 0.4 sekunder % Avvik Navn Gate Nr PostNr Sted Tlf 29 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 22468249 2.0 127 Marita Vidvei Bjelland 95260797 1.4 131 Enervital helse & velvære Cort Adelers gate 33 254 Oslo 97000488 1.3 132 Rosario Brian Demeza James Grimstadgata 24B 464 Oslo 40331241 1.0 134 Juvenal Benemerito Jimenez Dr.Dedichens vei 66 675 Oslo 92224998 1.0 134 Bente Lund Sorgenfrigata 24B 365 Oslo 48054656 0.9 135 Knut Erik Borge Rief Sorgenfrigata 24B 365 Oslo 93262456
  • 15. 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 90966897 14 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 21947024 1.2 127 Tor Olav Bjørnstad Slettenv 8 1177 Oslo 91593694 1.1 128 Per Olav Grønnevik Bogstadv 62C 0366 Oslo 93646406 1.1 128 Knut Olav Krohn Lakså Fougstads gate 41A 0173 Oslo 97180908 0.9 130 Knut Olav Folkestad Akersg 55 0180 Oslo 93037727 0.8 131 Victor Lazarev Bogstadv 27B 0355 Oslo 90232609
  • 16. 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
  • 17.
  • 18.
  • 19. Slurveskriving på telefon, med aktiv staveretting. Det søkes rett alikevel.
  • 20. 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
  • 21. 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 mange systemer som sammenligner data, og adresser. Søk med retting sammenligner mye bedre
  • 22. 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)
  • 23. Norvig Øyhus Retter opptil 3 feil Retter opptil 200 feil Retter hele søk, Retter enkeltord på tvers av ord Alle 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
  • 25. 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 E3 Telefon-tastatur-feil AS SD DF FG GH HJ Forenkling ØÖ→O @ÆÅÂ→A
  • 26. 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
  • 27. Tekniske detaljer • Bruker ikke indekser • Massivt sekvensielt søk • Systemet kan parallelliseres til ønsket hastighet, med lite overhead • Alle kjerner brukes effektivt i parallell
  • 28. 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
  • 29. 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
  • 30. 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) );
  • 31. Kim Øyhus Kim@ Oyhus.no tlf: 9001 4425 findsim.com kode.oyhus.no NTH Siv.ing. Fysikk og Matte

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n