Post on 19-Sep-2018
transcript
Ministerul Educației Naționale
Universitatea „Ovidius” din Constanța
Facultatea de Matematică și Informatică
Master – Modelare și Tehnologii Informatice
Un motor eficient de căutare în e-commerceLucrare de disertație
Coordonator științific:Prof. dr. Popa Constantin
Absolvent:Breda Olivian-Claudiu
Constanța2018
Rezumat / Abstract Rezumat în limba română: lucrarea curentă are ca temă principală motoarele de
căutare pentru magazine online. Ea e formată dintr-o aplicație practică, care poate
prezice termeni de căutare introduși de utilizatorul programului în mod parțial eronat,
și are și facilitatea de a sorta rezultatele obținute – o listă de laptopuri. De asemenea,
există o parte teoretică, ce își propune să prezinte perspective asupra motoarelor de
căutare, trecând printr-un istoric al lor, prezentând modalitatea de funcționare a unui
motor de căutare, arătând niște limitări ale motoarelor de căutare și aspecte despre
viitorul motoarelor de căutare. În lucrarea teoretică este descrisă și soluția tehnică,
care au fost scopul și obiectivul de la care am pornit, descrierea algoritmului propus.
Domeniu principal: motoarele de căutare pentru magazine online.
Domenii adiacente: e-commerce (comerț electronic), programare C++, algoritmi,
inteligență artificială (artificial intelligence), optimizare pentru motoarele de căutare
(SEO, search engine optimization), machine learning (învățare automatizată).
Tipul lucrării: cercetare.
English language abstract: the current paper has as its main subject search
engines for online stores. The paper consits firstly of a piece of software, which can
correct partially incorrect search terms inserted by the user of the program, and it can
also sort the final results – a list of laptops. There is also a theoretical paper, which
aims to present some perspectives on search engines, going through historical data,
presenting the functioning of a search engine, showing limitations of search engines
and aspects on the future of search engines. In the theoretical paper the technical
solution is also described, what were the aim and objective it started from, and the
description of the proposed algorithm.
Main field: search engines for online stores.
Other fields: e-commerce, C++ programming, algorithms, artificial intelligence,
search engine optimization (SEO), machine learning.
Type of work: research.
2
Cuprins
Rezumat / Abstract......................................................................................................2
Lista figurilor................................................................................................................4
Lista tabelelor..............................................................................................................4
1. Introducere...............................................................................................................5
2. Istoric și motivație....................................................................................................9
2.1 Istoric al căutării informației................................................................................9
2.2 Modalitatea de funcționare a unui motor de căutare........................................17
2.3 Evaluarea eficienței unui motor de căutare......................................................19
2.4 Starea actuală a domeniului.............................................................................21
2.5 Limitările unui motor de căutare generalist.......................................................25
2.6 Soluții potențiale pentru paginile de rezultate căutări fără niciun rezultat.........27
2.7 Viitorul motoarelor de căutare ale magazinelor online......................................28
3. Soluția propusă......................................................................................................31
3.1 Scop și obiective...............................................................................................31
3.2 Descrierea algoritmului.....................................................................................31
3.3 Utilitatea metodei..............................................................................................32
3.4 Analiza implementării algoritmului....................................................................33
3.5 Posibilități de extindere a algoritmului..............................................................36
4. Concluzii................................................................................................................40
Bibliografie.................................................................................................................42
Anexa 1 – măsurarea complexității codului...............................................................45
Anexa 2 – graficul funcțiilor tabelului.........................................................................48
3
Lista figurilor
Figura 2.1.1 Graf direcționat, reprezentând o serie de șase pagini (Langville și
Meyer, 2006)..............................................................................................................11
Figura 2.1.2 Graf pentru o rețea de 4 elemente (Langville și Meyer, 2006)...............13
Figura 2.1.3 Cota de piață a căutărilor web, februarie 2018, pentru piața din SUA
(date din partea companiei Jumpshot).......................................................................16
Figura 2.2.1: Unde își încep consumatorii din SUA căutările de produse în online
(Keyes, 2017).............................................................................................................18
Figura 2.4.1 Analiza listei de produse a magazinelor online (Baymard.com, 2015)..24
Figura 3.4.1 Exemplu pentru numărul complex ciclomatic al lui McCabe (Tempero,
2018)..........................................................................................................................36
Lista tabelelor Tabel 2.1.1 Primele câteva iterații ale ecuației anterior prezentate asupra grafului (Langville și Meyer, 2006)..........................................................................................12
Tabel 2.1.2 Cota de piață la nivel mondial, motoare de căutare (StatCounter Global Stats, 2018)................................................................................................................15
Tabel 2.4.1 Comparație între funcțiile oferite pentru diferite tipuri de căutări în unele motoare de căutare.....................................................................................................22
Tabel 2.5.1 Tipuri de conținut web invizibil (Sherman și Price, 2001)..........................26
Tabel 3.4.1 Indicatori pentru a măsura fiabilitatea programului propus (Littlefair, 2018)..........................................................................................................................34
4
1. Introducere Lucrarea de față, prin conținut și aplicația realizată, se încadrează în domeniul de
mare actualitate al motoarelor de căutare. Alegerea temei este motivată și susținută
de experiența de lucru de peste 10 ani în domeniu. Am putut identifica principalele
probleme ale motoarelor de căutare din magazinele online (de exemplu, o persoană
poate naviga pe site-ul Amazon și căuta o carte; unele rezultate, nerelevante, apar
mai sus ca altele, relevante, și uneori nu se obțin prin căutări rezultatele dorite).
Motivația principală a lucrării este dată de experiența negativă avută pe
principalele motoare de căutare pentru magazine online, fie ele din România sau pe
plan internațional. Filtrele Amazon nu funcționează întotdeauna corect (din
perspectiva noastră), iar căutarea de produse pe site uneori nu returnează lucrurile
potrivite (o persoană poate căuta ceva și fie nu obține niciun fel de rezultate, fie
obține rezultate nedorite). Iar aici este vorba de probleme pe site-ului unei companii
gigant, care a avut în 2017 vânzări de 177,9 miliarde de dolari (Kim, 2018). Întreaga
piață românească de e-commerce a fost estimată de GPeC (Gala Premiilor
eCommerce, un eveniment major pentru piața de e-commerce din România) la 2,8
miliarde de euro (Radu, 2018), așa că, în mod firesc, magazinele online românești au
avut bugete mai mici pentru investiția în motoare de căutare eficiente. Unele
probleme sunt mai mari pe site-urile românești de comerț online. Am vrut să arătăm
o modalitate practică prin care se pot face unele îmbunătățiri la un motor de căutare
cu resurse puține. Vom prezenta în lucrare inclusiv idei noi, potențial utile de folosit
pentru magazinele online în viitor.
În ceea ce privește gradul de noutate al lucrării – soluția propusă de noi vine ca
element de noutate cu un grad de predicție asupra termenilor introduși de utilizator.
Soluția există deja în motoare de căutare generaliste (Google, Bing, Yahoo!, Yandex,
Baidu), sau în unele tastaturi pentru telefoanele mobile (SwiftKey pentru Android și
iOS). Ea însă nu a fost implementată în magazinele online suficient de mult. Un
exemplu foarte bun de predicție este cel oferit de tastatura de mobil a celor de la
SwiftKey. Am dorit cu programul propus de noi să simulăm unele din funcționalitățile
5
de predicție pentru un eventual motor de căutare pentru produsele din magazinele
online. O mare parte din facilitățile prezentate sunt deja incluse în SwiftKey.
Scopul de la care am pornit lucrarea a fost atât de a implementa ideile pe care le
am în domeniul căutării pentru motoarele de căutare, de a da un model practic și
verificabil, cât și de a veni cu noi idei, ca posibile rute de prospectat pentru aplicații
viitoare. Acestea au rămas în plan pur teoretic, urmând a fi implementate de alte
entități, în încercarea de a îmbunătăți performanțele motoarelor de căutare din
prezent.
Descrierea fiecărui capitol:
2. Istoric și motivație - acest capitol are o abordare mai degrabă teoretică, am
prezentat aspecte ce țin de părțile legate de teorie (istoric, motivație) ale unui
motor de căutare pentru magazine online.
2.1 Istoric al căutării informației - am prezentat în acest subcapitol evoluția
tehnică, de la primele colecții de documente de pe pereții pictați ai peșterilor,
mai departe pe papirus, pergament, hârtie și, în final, suport electronic. Am
prezentat sistemele de organizare a informației, diferite soluții pentru a
cataloga informațiile. Apoi au fost prezentate detalii despre cum primele
motoare de căutare aveau dificultăți în sortarea informațiilor de pe Internet. S-
a continuat cu doi algoritmi de sortare a datelor - PageRank (1998), motorul
din spatele Google, și HITS (tot 1998), un algoritm folosit inițial de motorul de
căutare Teoma. Am discutat în continuare despre RankBrain, unui sistem de
inteligență artificială bazat pe machine learning pentru a genera rezultatele
căutărilor. Au fost prezentate apoi cotele principalelor motoare de căutare,
Google având peste 90% din piață, și principalele motoare de căutare având
aproape 99% din piața motoarelor de căutare la nivel mondial. Am discutat și
despre platforma de căutare din spatele YouTube și cea a Facebook.
2.2 Modalitatea de funcționare a unui motor de căutare - în acest subcapitol
am arătat pentru început unde pornesc căutările internauților (Amazon, alte
motoare de căutare importante, retaileri). S-a prezentat și Teoria Setului Difuz
(Fuzzy Set Theory), o ramură a logicii difuze, și rolul ei în căutări. Au fost
descrise în continuare tipurile de căutări în metodele de obținere a informației
6
- căutări de proximitate / logică difuză / căutări booleene / puterea dată unor
termeni.
2.3 Evaluarea eficienței unui motor de căutare - în subcapitolul 2.3 au fost
prezentați diferiți KPI (indicatori cheie de performanță, key performance
indicators) folosiți pentru evaluarea unui motor de căutare - procentul de
utilizatori care folosesc căutarea / numărul de căutări per vizită / procentul de
ieșiri din pagina rezultate căutări / numărul mediu de itemi pentru o vizită cu
căutări vs. vizitele care nu au căutări / procentul căutărilor fără niciun rezultat /
căutările cele mai frecvente / intenția de căutare.
2.4 Starea actuală a domeniului – în începutul subcapitolului a fost prezentată
o comparație între funcțiile oferite pentru diferite tipuri de căutări în unele
motoare de căutare - abilitatea de a interpreta termenul scris greșit „Latpop” /
filtrare în rezultate / sortare rezultate / abilitatea de a interpreta „procesor
laptop” (inclusiv în engleză). Motoarele comparate au fost Google.com /
Bing.com / Amazon.com / Target.com / eBay.com / olx.ro / eMAG.ro /
Elefant.ro / F64.ro / evoMAG.ro. A fost descris apoi un studiu de uzabilitate din
2015 realizat de echipa de la Baymard Institute, în care au fost analizate cele
mai importante 50 de site-uri de e-commerce de pe piața Statelor Unite.
2.5 Limitările unui motor de căutare generalist - în subcapitolul acesta au fost
expuse unele din limitările motoarelor de căutare generaliste (motoarele de
căutare generaliste sunt motoare de tipul Google, Bing, Yahoo!, care caută în
surse de date diverse, spre deosebire de cele specializate, cum sunt YouTube
sau Amazon, care caută doar anumite tipuri de date). Există diferite tipuri de
conținut care nu sunt indexabile de motoarele de căutare generaliste, și
înțelegerea acestor lucruri ajută la alegerea unui motor de căutare pentru
nevoi specifice. Capitolul și-a propus să arate că există anumite căutări pentru
care motoarele de căutare generaliste (Google, Bing, Yahoo!, Yandex, Baidu
etc.) nu sunt cele optime.
2.6 Soluții potențiale pentru paginile de rezultate căutări fără niciun rezultat –
în acest subcapitol am dat niște soluții pentru căutările care în mod tipic nu
returnează niciun rezultat (de exemplu, cineva caută un produs care nu există
pe site, sau tastează un cuvânt greșit, rezultând un cuvânt pentru care nu
7
există rezultate în mod tipic). De asemenea, am prezentat concluziile unui
studiu comparativ între mai multe motoare de căutare.
2.7 Viitorul motoarelor de căutare ale magazinelor online - am prezentat aici
primele încercări de aplicare a unor metode de machine learning asupra
eficienței motoarelor de căutare. Am folosit pentru aceasta o resursă de pe
site-ul Loop54, care este un SaaS (software ca serviciu, software as a service)
folosit de diferite site-uri pentru a crește vânzările și ratele de conversie prin
îmbunătățirea experienței vizitatorilor (CX, Customer eXperience).
3. Soluția propusă - am scris în acest capitol despre soluția software propusă
de către noi pentru rezolvarea unor părți din problemele identificate în partea
teoretică.
3.1 Scop și obiective - în subcapitol au fost descrise, în mod sumar, care a
fost scopul și care au fost obiectivele cercetării noastre - se poate face relativ
simplu un instrument care să folosească predicția rezultatelor posibile, și apoi
să filtreze rezultatele obținute.
3.2 Descrierea algoritmului - am descris în acest subcapitol, pas după pas,
cum funcționează algoritmul meu. Se citește de la tastatură un text. Se verifică
dacă programul poate prezice niște termeni alternativi: de exemplu, inversarea
unor litere în cuvânt („latpop” vs. „laptop”) – au fost prezentate mai multe
soluții de acest tip. O altă funcție a programului este de a căuta și sorta
cuvintele în varianta finală introdusă de la tastatură în baza de date de
laptopuri.
3.3 Utilitatea metodei - în subcapitol am prezentat utilitatea demersului. În
primul rând, funcția de auto-completare termeni, iar apoi, funcția de validare
date. Mai departe, odată realizată procedura pe un set de date (programul a
fost făcut să funcționeze pe o bază de date pentru laptop-uri), se pot imagina
ușor soluții pentru alte tipuri de date de pe site-uri de tip e-commerce.
3.4 Analiza implementării algoritmului - subcapitolul prezintă de ce a fost ales
limbajul de programare C++ și paradigma de scriere cod programare
funcțională, apoi procedura, pas cu pas, prin care a fost făcut programul.
Ulterior, au fost prezentați câțiva indicatori folosiți pentru a măsura fiabilitatea
software-ului, folosind un program numit CCCC. Au fost detaliați indicatorii
folosiți, sumar.
8
3.5 Posibilități de extindere a algoritmului - este un subcapitol în care am
prezentat diferite posibile viitoare soluții prin care se poate perfecționa
aplicația noastră.
Lucrarea se încheie cu un capitol de concluzii și bibliografia aferentă.
9
2. Istoric și motivație 2.1 Istoric al căutării informației
Primele colecții de documente au fost înregistrate pe pereții pictați ai peșterilor.
Apoi, până la invenția hârtiei, anticii romani și greci au înregistrat informația pe role
de papirus. Unele artefacte de papirus aveau mici etichete atașate rolelor, care
ajutau la găsirea informației. Cuprinsul unei lucrări au început să apară în rolele din
Grecia în secolul 2 î.Hr. Ulterior, s-a scris pe pergament, straturi subțiri de piele de
animale. Pentru perioada aceasta, cele mai relevante metode de informație erau cele
pe cale orală. (Langville și Meyer, 2006)
Inventarea hârtiei, cel mai bun suport de stocare a informației, a crescut viteza
înregistrării documentelor și au început să apară colecții tematice. Acest lucru a fost
accelerat puternic prin inventarea presei tipografice de către Johann Gutenberg în
1450. În anii 1700 au apărut în America biblioteci publice, la inițiativa lui Benjamin
Franklin. Astfel, a crescut dorința de a ierarhiza informațiile. (Langville și Meyer,
2006)
Primul sistem de organizare a informației a fost atribuit autorului roman Valerius
Maxiums, care l-a folosit în anul 3 d.Hr. pentru a organiza informația unei cărți ale lui.
Ulterior, au apărut sisteme ca sistemul decimal Dewey (1872), cataloagele de cărți
(începutul anilor 1900), microfilmul (anii 1930), sistemul MARC (MAchine Readable
Cataloging – catalog citibil de către mașini) în anii 1960. În ceea ce privește căutările
în baze de date pentru cărți au început cu un sistem SMART (inteligent) al Cornell în
anii 1960. (Langville și Meyer, 2006)
În anul 1989 stocarea, accesare și căutarea colecțiilor de documente a fost
revoluționată de o invenție numită World Wide Web (rețeaua pentru lumea întreagă)
de către fondatorul său, Tim Berners-Lee. Aceasta a devenit semnalul final al
dominației Erei Informației și moartea Erei Industriale. Cu toate acestea, volumul
mare de informație făcea căutările inițiale foarte greoaie. (Langville și Meyer, 2006)
Primele motoare de căutare aveau dificultăți în ierarhizarea informației. Lucrurile
s-au schimbat radical odată cu apariția Google. Într-un document datat 29 ianuarie
10
1998, "The PageRank Citation Ranking: Bringing Order to the Web" (ierarhizarea
bazată pe citări PageRank: aducând ordine în Internet), autorii, dintre care primii doi
au fondat Google (Lawrence Page, Sergey Brin, Rajeev Motwani și Terry Winograd),
prezentau PageRank, un algoritm care dădea o importanță resurselor găsite în
căutări, pe măsura volumului linkurilor către o anumită resursă (cu precizarea că o
resursă putea acorda o valoare mai mare dacă, la rândul ei, avea multe linkuri).
Autorii concluzionau că "folosind PageRank, putem ordona căutările, în așa fel încât
paginile cele mai importante au poziții preferențiale. În experimentele făcute, asta a
dus la rezultate de calitate ridicată pentru utilizatori". (Page et al., 2018)
Documentul era o continuare a documentului „The Anatomy of a Large-Scale
Hypertextual Web Search Engine” (anatomia unui motor de căutare pe Internet pe
scală largă, și hipertextual), în care Sergey Brin și Lawrence Page prezentau motorul
de căutare în detaliu, inclusiv formula de calculare a PageRank-ului:
„Presupunem că pagina A are linkuri de la paginile T1 ... Tn (aceste pagini o
citează. Parametrul d este un factor de amortizare, care poate fi setat între 0 și 1. În
general, îl stabilim la valoarea 0,85. De asemenea, C(A) este definit ca numărul de
linkuri care pornesc dinspre pagina A spre alte pagini. PageRank-ul paginii A este
definit astfel:
PR(A) = (1-d) + d (PR(T1)/C(T1) + ... + PR(Tn)/C(Tn))
De notat că PageRank-ul formează o distribuție probabilistică peste toate paginile de
Internet, așa că suma tuturor PageRank-urilor va fi 1. PageRank-ul pentru 26 de
milioane de pagini web poate fi calculat în câteva ore pe o stație de lucru medie.”
(Brin și Page, 1998)
Într-o lucrare apărută în 2006 (Langville și Meyer, 2006), formula este
prezentată ca mai jos, o ecuație simplă a sumelor, rădăcina cărei derivă din
cercetările bibliometrice, analiza structurii citațiilor între lucrările academice.
PageRank-ul paginii Pi, numită r(Pi), este suma tuturor PageRank-urilor paginii care
direcționează către Pi.
r (Pi )= ∑P j∈BP i
r (P j)¿ P j∨¿ ,
¿
11
unde BPi este setul paginiilor care au trimitere către Pi (trimit backlink către Pi în
cuvintele autorilor Sergey Brin și Lawrence Page), și |Pj| este numărul de linkuri
externe (către alte entități) trimise din pagina Pj. De observat că PageRank-ul
paginilor care trimit linkuri către entitate curentă r(Pj) din ecuația anterior menționată
este temperat de numărul de recomandări făcute de Pj, notat |Pj|. Problema cu
ecuația respectivă este că valorile r(Pj), PageRank-ul paginilor care trimit către
pagina Pi, sunt necunoscute. Pentru a trece peste această problemă, autorii ecuației
au folosit o procedură iterativă. Astfel, ei au presupus că, la început, toate paginile au
un PageRank egal una cu cealaltă (să zicem, 1/n, unde n este numărul de pagini din
indexul web al lui Google). Acum regula în ecuația prezentată este urmată pentru a
calcula r(Pi) pentru fiecare pagină Pi din index. Regula dinecuație este aplicată în
mod succesiv, înlocuind valorile iterației anterioare în r(Pj). Introducem și alte notații
pentru a defini această procedură iterativă. Fie rk+1(Pi) PageRank-ul paginii Pi pentru
iterația k + 1. Atunci,
rk +1 (Pi )= ∑P j∈B Pi
rk (P j )¿P j∨¿ .
¿ (Langville și Meyer, 2006)
Procesul este inițiat cu r0(Pi) = 1/n pentru toate paginile Pi și este repetat, în
speranța că scorurile Page Rank vor converge în final către niște valori stabile.
Aplicând ecuația de mai sus rețelei din figura de mai jos dă următoarele valori pentru
PageRank, după câteva iterații:
Figura 2.1.1 Graf direcționat, reprezentând o serie de șase pagini
(Langville și Meyer, 2006)
12
1 2
3
6 5
4
Iterația 0 Iterația 1 Iterația 2 Rank la iterația 2
R0(P1) = 1/6 R1(P1) = 1/18 R2(P1) = 1/36 5
R0(P2) = 1/6 R1(P2) = 5/36 R2(P2) = 1/18 4
R0(P3) = 1/6 R1(P3) = 1/12 R2(P3) = 1/36 5
R0(P4) = 1/6 R1(P4) = 1/4 R2(P4) = 17/72 1
R0(P5) = 1/6 R1(P5) = 5/36 R2(P5) = 11/72 3
R0(P6) = 1/6 R1(P6) = 1/6 R2(P6) = 14/72 2
Tabel 2.1.1 Primele câteva iterații ale ecuației anterior prezentate asupra grafului
(Langville și Meyer, 2006)
Un alt algoritm al motoarelor de căutare este și HITS. Un acronim pentru
„Hypertext Induced Topic Search” (căutare de subiecte induse prin hipertext), acesta
a fost un algoritm aflat la baza Teoma, un motor de căutare lansat în 2001 și
achiziționat în același an de un alt motor de căutare, Ask Jeeves Inc. (The Globe și
Mail, 2001)
HITS, algoritm inventat de Jon Kleinberg în 1998 (aproximativ în aceeași
perioadă în care Sergey Brin și Lawrence Page lucrau la algoritmul PageRank),
asemenea PageRank, folosește structura de URL-uri pentru a crea scoruri de
popularitate asociate cu paginile web. Totuși, HITS are anumite diferențe (detalii
preluate din Langville și Meyer, 2006):
Dacă metoda PageRank produce un singur scor de popularitate pentru fiecare
pagină, HITS produce două.
În timp ce PageRank-ul este independent de căutare, HITS depinde de
căutarea făcută.
HITS privește paginile ca autorități și huburi. O autoritate este o pagină cu
numeroase linkuri către ea, și un hub este o pagină cu multe linkuri dinspre ea
spre alte pagini. Paginile de autoritate și huburile merită să fie numite „bune”
atunci când următoarea afirmație circulară este validă: „Autoritățile bune au
linkuri către ele din partea unor huburi bune și huburile bune trimit către
autorități bune”. Așadar, fiecare pagină este o măsură a autorității și o măsură
a unui hub.
14
Cum funcționează algoritmul? (Langville și Meyer, 2006) Fiecare pagină i are un
scor de autoritate xi și un scor de hub yi. Fie E setul tuturor marginilor direcționate în
graful de Internet și fie eij marginea direcționată de la nodul i către nodul j. Dat fiind
faptul că fiecărei pagini i-a fost atribuită inițial un scor de autoritate inițială xi și un scor
de hub yi, HITS rafinează în mod succesiv aceste scoruri calculând:
x i(k)= ∑
j : e ji ϵEy j
(k−1 )
y i(k)= ∑
j: e jiϵEx j
(k )
, unde k = 1, 2, 3, ...
Aceste ecuații, care au fost ecuațiile originale ale inventatorului lor, Jon
Kleinberg, pot fi scrise într-o formă matriceală cu ajutorul matricei de adiacență L a
grafului de URL-uri direcționate. (Langville și Meyer, 2006)
1 2
3 4
Figura 2.1.2 Graf pentru o rețea de 4 elemente (Langville și Meyer, 2006)
15
P1 P2 P3 P4
P1 0 1 1 0
L = P2 1 0 1 0
P3 0 1 0 1
P4 0 1 0 0
În notarea matricială, ecuațiile precizate iau forma:
x(k) = LTy(k-1) și y(k) = Lx(k),
unde x(k) și y(k) sunt n x 1 vectori care păstrează autoritatea aproximativă și scorurile
fiecărui hub la fiecare iterație. (Langville și Meyer, 2006)
Algoritmul original HITS: (Langville și Meyer, 2006)
1. Se inițializează y(0) = e, unde e este vectorul coloană al tuturor valorile de 1.
Pot fi folosiți și alți vectori de început pozitivi.
2. Până la convergență, execută:
x(k) = LTy(k-1)
y(k) = Lx(k)
k = k + 1
Se normalizează x(k) și y(k).
Lucrurile au evoluat, pe măsură ce anii au trecut. Algoritmii s-au tot schimbat,
la un moment dat Google afirma că au 200 de factori. Întrebat despre asta, în 2010,
CEO-ul Google, Eric Schmidt, a afirmat că nu îi poate menționa, pentru că sunt într-o
continuă schimbare, și, de asemenea, pentru că sunt un secret comercial al
companiei. (Sullivan, 2010)
Potrivit informațiilor celor de la SearchEngineLand, un site important în lumea
motoarelor de căutare, „RankBrain” este numele dat de către Google unui sistem de
inteligență artificială bazat pe învățare automată (machine-learning artificial
intelligence system) care este folosit pentru a genera rezultatelor căutărilor. Prin
machine learning, un calculator poate să se învețe pe sine însuși cum să facă o
sarcină, mai degrabă decât să urmeze o procedură predefinită. La data apariției
articolului, algoritmul ocupa locul 3 în cele mai importante criterii după care un site
era afișat în rezultatele căutărilor. Scopul lui? Interpretarea rezultatelor care nu conțin
cuvintele căutate în mod exact, ci cuvinte ce ar putea fi similare. Nevoia de a exista a
algoritmului venit din faptul că Google procesa în 2016 3 miliarde de căutări zilnic, iar
în 2007 a afirmat undeva între 20-25% din acele căutări nu au fost observate până
atunci (nu fuseseră probabil căutate niciodată până atunci). În 2016 e posibil să fi
16
ajuns la 15% din căutări, în continuare o valoare mare de căutări pentru care
algoritmul își justifică existența. Sunt căutări în special formate din mulți termeni
(„long-tail”, căutări foarte specifice, dar, totuși, numeroase). (Sullivan, 2016)
Luna Google Bing Yahoo! BaiduYandex
RuYandex Alții
2017-02 92,35 2,91 2,17 1,01 0,42 0,35 0,79
2017-03 92,31 2,96 2,2 1,05 0,38 0,35 0,77
2017-04 92,48 2,89 2,01 1,11 0,36 0,35 0,79
2017-05 92,06 2,92 2,07 1,39 0,35 0,34 0,87
2017-06 91,88 2,88 2,18 1,45 0,38 0,38 0,86
2017-07 92,01 2,55 2,23 1,44 0,4 0,49 0,87
2017-08 91,64 2,52 2,32 1,53 0,36 0,5 1,13
2017-09 91,84 2,59 2,33 1,42 0,39 0,41 1,02
2017-10 91,47 2,75 2,25 1,8 0,42 0,41 0,9
2017-11 92,06 2,76 1,73 1,64 0,5 0,36 0,94
2017-12 91,79 2,75 1,61 1,66 0,57 0,39 1,24
2018-01 91,74 2,76 1,83 1,39 0,58 0,36 1,33
2018-02 91,63 2,71 1,94 1,29 0,63 0,33 1,49
Tabel 2.1.2 Cota de piață la nivel mondial, motoare de căutare (StatCounter Global
Stats, 2018)
Vă puteți întreba unde au loc căutările în 2018, nu doar cele din motoare de
căutare, ci, la modul general, pe toate platformele unde pot avea loc căutări. Date din
februarie 2018 pentru piața din SUA arată dominația Google, care deține motorul de
căutare, Google Imagini și YouTube (cu un procent mult mai mic, și Google Hărți).
De remarcat că Amazon, cel mai mare magazin online, are o cotă un pic mai mare
decât Bing, al doilea motor de căutare generalist, după Google. (Fishkin, 2018)
17
Figura 2.1.3 Cota de piață a căutărilor web, februarie 2018, pentru piața din SUA
(date din partea companiei Jumpshot)
Câte motoare de căutare (generale, pentru tot Internetul) există? Poate, din
diferite surse, ați aflat că există „sute de motoare de căutare”. Majoritatea dintre
acestea sunt însă fie variații ale site-urilor principale (de exemplu, Google.fr pentru
Franța sau Google.co.uk pentru Marea Britanie), fie sunt meta motoare de căutare,
care folosesc rezultatele oferite de alte motoare de căutare (Dogpile, Mamma.com,
Metacrawler). Da, există unele motoare de căutare tematice (Wolfram|Alpha, IMDb),
18
dar motoarele cele mai vizitate au un procent apropiat de 95% din piața motoarelor
de căutare. (Grappone și Couzin, 2011)
Există și alte tipuri de algoritmi care pot susține un motor de căutare.
Platforma de clipuri video YouTube este al doilea motor de căutare, ce-i drept,
specializat, după Google, cu aproximativ 3 miliarde de căutări pe lună, un volum de
căutare mai mare decât cel al Bing, Yahoo!, AOL și Ask.com combinate. (Wagner,
2017) Lucrurile la care se uită cei 1,5 miliarde de utilizatori înregistrați ai platformei
YouTube sunt influențate de o listă de clipuri asemănătoare. De fiecare dată când un
internaut privește un clip YouTube, i se prezintă într-o bară laterală o listă de clipuri
asemănătoare. Acea listă e considerată cel mai important factor în creșterea cotei de
piață a YouTube. În una din puținele explicații publice despre cum funcționează
formula, o lucrare academică care prezintă rețelele neuronale ale algoritmului,
inginerii YouTube o descriu drept una din "cele mai mari și sofisticate sisteme de
recomandare la scală industrială existente în lume". (Lewis, 2018)
Faptul că Facebook, cea mai folosită rețea socială la nivel mondial – 2,2 miliarde
de utilizatori activi pe lună, în al 4-lea trimestru al lui 2017 (Statista, 2018) –, cu un
potențial enorm în a ajuta utilizatorii în căutarea de produse și servicii pe plan local,
cu un ecosistem format din milioane de pagini de afaceri, date despre locație ale
utilizatorilor, date de comportament, informații demografice, rată de angajament, nu a
reușit în anii recenți să fie un concurent serios pentru Google în căutările de afaceri
locale poate fi un argument că a fi relevant în căutări e o sarcină mai grea decât pare
la o analiză superficială.
2.2 Modalitatea de funcționare a unui motor de căutare
De ce este important, în primul rând, să discutăm despre eficiența unui motor de
căutare? În SUA, cota de piață a celor care își încep căutările de produse de
cumpărat a scăzut pentru Amazon de la 55 la 49% pentru Amazon, în detrimentul
motoarelor de căutare (precum Google), care au crescut de la 28 la 36%, potrivit
unui studiu Survata, citat de Bloomberg. (Keyes, 2017)
19
2015 2016 20170
10
20
30
40
50
60
Unde își încep consumatorii din SUA căuătrile de produse în online
Amazon Motoare de căutare Retaileri
Figura 2.2.1: Unde își încep consumatorii din SUA căutările de produse în online
(Keyes, 2017)
Date strânse de MarketingSherpa în 2007 arată că 43% din vizitatorii unui site
web merg imediat la funcția de căutare. Și clienții care folosesc caseta de căutare în
site-uri e-commerce convertesc de aproape trei ori mai mult decât cei care
navighează pe web în mod obișnuit. (content: MarketingSherpa, 2007)
Motoarele de căutare (care sunt, la bază, modele de obținere a informației)
folosesc Teoria Setului Difuz (Fuzzy Set Theory), o ramură a logicii difuze, create de
dr. Lotfi Zadeh in 1969, pentru a descoperi conexiuni semantice între două cuvinte.
Mai degrabă decât să folosească un dicționar pentru a stabili dacă două cuvinte sunt
legate unul de celălalt, sistemele de obținere a informației pot folosi o bază de dată
de conținut masivă pentru a își da seama de legături. (Enge et al., 2012)
Tipuri de căutări în metodele de obținere a informației:
Căutări de proximitate - o căutare de proximitate folosește ordinea frazei de
căutare pentru a găsi documente asemănătoare. De exemplu când căutați (cu
ghilimele) "muștar dulce german", specificați doar o potrivire de proximitate
precisă (termenii să fie prezenți în aceeași ordine). Dacă se vor înlătura
ghilimelele, proximitatea termenilor de căutare tot contează pentru motoarele
de căutare, dar acum vor arăta documentele al căror conținut nu se potrivește
în mod exact cu ordinea frazei căutate, cum ar fi „muștar german dulce”.
(Enge et al., 2012)
20
Logică difuză - se referă la un tip de logică ce nu este adevărată sau falsă în
mod categoric. Un exemplu comun este dacă o zi este însorită (spre exemplu,
dacă este acoperită 50% de nori, este în continuare o zi însorită?). Logica de
acest tip este folosită pentru a detecta și procesa cuvintele tastate greșit.
(Enge et al., 2012)
Căutări booleene - căutările booleene folosesc termeni precum AND (și), OR
(sau) și NOT (nu, negație). Acest tip de logică este folosită pentru a extinde
sau reduce documentele care apar într-o căutare. (Enge et al., 2012)
Puterea dată unor termeni - acest lucru se referă la importanța unui termen de
căutare particular în cererea transmisă motorului de căutare. Ideea este de a
da un anumit grad de putere unor termeni, pentru a produce rezultate de
căutare superioare. De exemplu, prepozițiile vor primi foarte puțină putere în
selectarea rezultatelor, deoarece apar în majoritatea documentelor. Nu ajută
la selectarea unor documente. (Enge et al., 2012)
2.3 Evaluarea eficienței unui motor de căutare Există mai mule tipuri de metrici care pot evalua eficiența unui motor de căutare.
Mai jos, câteva din acestea, dintr-un articol apărut pe blogul oficial al companiei
Adobe (Simon, 2015). Sunt mai mulți KPI (indicatori cheie de performanță, key
performance indicators):
Procentul de utilizatori care folosesc căutarea – vizitatorii site-ului de analizat
își petrec timpul navigând pe site înainte de a merge în caseta de căutare, sau
merg la ea direct de la început? Indicatorul, dacă are valori mici pentru cei
care folosesc caseta de căutare, poate indica faptul că există niște experiențe
anterioare neplăcute fie cu acest site, fie cu alte site-uri din nișă sau industrie,
poate sugera că există o casetă de căutare slab vizibilă și insuficient de bine
promovată sau poate arăta că site-ul este atât de prietenos cu vizitatorii, încât
aceștia găsesc informația direct, și nu au nevoie de căutări. Cu instrumente
precum cele de analytics (informații statistice organizate pentru a fi analizate;
exemplu – Google Analytics sau Omniture pe plan internațional; în România,
Trafic.ro sau Brat.ro - Studiul de Audiență și Trafic Internet, SATI) se poate
măsura acest indicator.
21
Numărul de căutări per vizită – câte căutări face fiecare vizitator. Cea mai
bună situație este în care face doar una – o persoană caută ceva, găsește, și
convertește (adică devine client) imediat. Mai mult de o căutare per vizitator
poate însemna lucruri rele, cum ar fi că o căutare a fost goală sau a găsit
lucruri nepotrivite. Cei de la Google sau alte motoare de căutare pot evalua și
ei acest indicator – să zicem că cineva merge la Google, caută ceva, intră pe
un site, e nemulțumit (probabil), sau e insuficient mulțumit, și se întoarce la
Google și face click pe un alt rezultat. Acest tip de acțiune se numește
„bounce” (întoarcere în urma unui impact). Vizitatorii intră pe un site, nu
găsesc, și se întorc în punctul de plecare, în căutarea unui rezultat mai bun.
Iarăși, acesta este un indicator de bază în instrumentele tip analytics.
Procentul de ieșiri din pagina rezultate căutări – dacă un vizitator părăsește
site-ul din pagina de rezultate căutări obținută în urma unei căutări în site, în
mod sigur site-ul are niște probleme la care ar trebui ca deținătorul site-ului să
se uite. Căutările ineficiente nu sunt o experiență a consumatorilor pozitivă.
Obiectivul de marketing al zilelor noastre este prezentarea unui vizitator cu
experiență pozitivă în perspectiva sa de client. Clientul ar trebui să găsească
ce căutau încă din prima încercare. De remarcat că acest procent se
corelează puternic cu procentul intrărilor într-un site. Dacă pe un site se intră
frecvent pe o anumită pagină a site-ului, e firesc ca pe acel site să existe și un
procent ridicat al celor care părăsesc site-ul din pagina respectivă. Totul se
reduce însă la procente – este procentul celor care părăsesc pagina în linie cu
restul paginilor sau e ceva radical diferit? În funcție de răspunsul la această
întrebare se poate decide dacă e cazul să se ia măsuri sau nu.
Numărul mediu de itemi pentru o vizită cu căutări vs. vizitele care nu au
căutări. Cheia în evaluarea acestei diferențe e în procente. Aici intră o doză de
bun simț în comparații, într-o oarecare experiență. Ce se întâmplă pe site-urile
principale de e-commerce este că se testează constant lucruri, în căutarea
perfecționării.
Procentul căutărilor fără niciun rezultat – este una din situațiile în care o veste
proastă poate fi folosită în avantajul magazinului online. E bine ca deținătorul
magazinului să se uite peste ce căutau acele persoane, care e procentul celor
care nu găsesc niciun rezultat, ce fac după ce ajung într-un punct mort cu
22
căutările? Soluții la aceste probleme am încercat să dăm și în programul
nostru – de exemplu, dacă cineva caută 4 termeni și pe site se găsesc doar 3,
programul 3 afișează cele mai relevante rezultate doar pentru cei 3 termeni.
Căutările cele mai frecvente – ce caută un vizitator? Înțelegerea termenilor cei
mai frecvent folosiți poate să ajute deținătorul magazinului online să înțeleagă
de ce au venit internauții pe site. Cu această informație, se poate îmbunătăți
navigația sau apelurile la acțiune (butoane precum „Adaugă în coș”,
„Cumpără”, „Abonează-te la newsletter” – poștă electronică, „Contactează-
ne”), în așa fel încât vizitatorii să nu apeleze atât de mult la căutări. E bine ca
deținătorul magazinului să folosească instrumentele de tip analytics pentru a
îmbunătăți algoritmii de căutare în site. Tot aici e de menționat și instrumentul
Google Trends (trenduri de căutare din statisticile Google), care permite
evaluarea căutărilor din industrie. Un alt instrument ar putea fi Google
Keyword Planner (planificatorul de cuvinte cheie de la Google), care folosește
termenii căutați pentru vizitatori, și poate da informații de tip sezonalitate, sau
costuri per click pentru campaniile de publicitate plătită.
Intenția de căutare – un comportament intangibil, și, cu toate acestea critic de
înțeles. Aici este vorba de a măsura la ce se gândea vizitatorul în timpul vizitei
pe site. Acest lucru este legat de ROI (return of investment, rata de
rentabilitate a investiției), pentru că există, de exemplu, unii vizitatori care intră
pe un site doar ca să vadă ce mai e nou, și navighează liber. Alții sunt acolo
strict pentru că au nevoie de informație, și au un model de navigare pentru a
obține informații (de exemplu, detalii tehnice despre un produs, sau link către
pagina producătorului, sau un video explicativ cu produsul). Șansele de
conversie directă a acestor vizitatori sunt mici, dar e de menționat că prin mai
multe vizite pe un site, acesta va rămâne în mintea vizitatorului, care poate
converti în client la un moment ulterior. Totuși, este de preferat ca în
instrumentul de Analytics să existe un diferențiator clar între clienții care fac
tranzacții și cei care doar navighează pe un site în scopul obținerii de
informații.
23
2.4 Starea actuală a domeniului Mai jos, un tabel comparativ între mai multe motoare de căutare, din România, și
pe plan internațional:
Motor de
căutare
Abilitatea de a
interpreta
„Latpop”
Filtrare în
rezultate
Sortare
rezultate
Abilitatea de a
interpreta „procesor
laptop” (+engleză)
Google.com Da Nu Nu Da
Bing.com Da Nu Nu Nu
Amazon.com Da Da Da Nu
Target.com Da Da Da Nu
eBay.com Da Da Da Da
olx.ro Nu Da Da Nu
eMAG.ro Da Da Da Nu
Elefant.ro Nu Da Da Nu
F64.ro Da Da Da Nu
evoMAG.ro Da Da Da Nu
Tabel 2.4.1 Comparație între funcțiile oferite pentru diferite tipuri de căutări în unele
motoare de căutare
Am făcut o mică cercetare comparativă între unele magazine online, și
motoare de căutare „clasice”. De asemenea, și două site-uri de anunțuri. Mai jos,
câteva observații.
În primul rând, motoarele de căutare „clasice” se descurcă în general mai bine
la interpretarea căutărilor semantice. De exemplu, dacă scriem „procesor laptop”
(sau, în engleză, „laptop processor”), ne vom aștepta să primim rezultate despre
procesoare de laptop, și nu laptopuri care au procesoare (probabil 100% din
laptopuri au procesoare), nu genți de laptopuri cu anumite procesoare, nu coolere de
procesoare de laptop. Se observă însă că, la această căutare, magazinele online
clasice eșuează în a interpreta căutarea noastră. Soluțiile ar fi două: pe de o parte să
folosească inteligența artificială pentru a învăța din căutările anterioare (spre
exemplu, cineva caută „procesor laptop”, nu e mulțumit de rezultate, apoi merge în
categoria procesoare, subcategoria procesoare laptop; acesta ar putea fi un semnal
că acea categorie e relevantă pentru căutare), sau ar putea face reguli manuale de
24
căutare (toți cei care caută „procesor laptop” să fie trimiși automat în categoria
respectivă).
O a doua observație e că motoarele de căutare „clasice” (Google, Bing) au un
impediment major – nu au indexare instantanee a rezultatelor. Asta înseamnă că pe
un site ca Amazon (o căutare site:amazon.com la Google arată că Google a indexat
aproximativ 145 de milioane de pagini) sau eMAG (site:eMAG.ro returnează 25 de
milioane de pagini) Google și Bing sunt nevoiți să indexeze (să parcurgă cu mici
roboți automat – spideri – întregul site) foarte multe pagini pentru a avea o variantă
cât mai recentă a site-ului. Desigur, asta durează zile, uneori săptămâni. Așa că
pentru Google și Bing asta înseamnă că nu au niciodată în index cele mai recente
variante ale paginilor de Internet. Aceste pagini pot suferi modificări, apar noi
produse, se schimbă prețurile, apar promoții. Din acest motiv, sortarea, cel puțin cu
tehnologia de astăzi, e foarte dificilă. Da, Google și Bing pot „ști” care este prețul
laptopurilor și să implementeze o soluție de sortare a rezultatelor după preț. Dar dacă
este prețul de acum câteva zile, sau, mai rău, acum o săptămână, fără nicio
informație despre promoții și schimbări de preț de ultim moment, rezultatele vor avea
o relevanță mai redusă. Prin urmare, se întâmplă ce am observat în cercetarea
noastră sumarizată în tabel – motoarele de căutare „clasice” nu au implementate
funcții de filtrare / sortare rezultate, și ne așteptăm ca situația să nu se schimbe prea
devreme, din cauza limitărilor tehnice (motoarele de căutare indexează relativ greu
un site mare de e-commerce).
Avem și o ultimă observație, despre predicții cuvinte. Google este un motor de
căutare care, din experiența noastră, are abilitatea de a interpreta foarte bine un
termen tastat, chiar dacă e tastat cu greșeli de tipul litere inversate, prea multe litere
într-un cuvânt dorit, prea puține. În unele căutări, mai nou, Google chiar ignoră o
parte din cuvintele introduse, în încercarea de a fi cât mai relevant. În căutarile
noastre, am observat că olx.ro și Elefant.ro nu interpretează căutarea „latpop”
(desigur, scrisă fără ghilimele, altfel și Google o va vedea ca pe o căutare corectă) ca
pe o căutare scrisă greșit. O tastatură numită SwiftKey, disponibilă pe sistemele de
operare de mobil iOS (din 2014) și Android (din 2010) are bune abilități de a prezice
cuvinte, de a învăța din cuvintele pe care utilizatorii le tastează pe mobil. Tehnologia
din „spatele” Google, sau, la o scară mai mică, dar în continuare eficientă, a SwiftKey
25
nu considerăm că se regăsește încă în toate magazinele online. Faptul că există o
tehnologie accesibilă oricui nu înseamnă și că toate software-urile de predicție
cuvinte învață din experiența altora și le și folosesc.
În plus, față de ce am analizat în tabel (pentru că e mai dificil de interpretat)
este și abilitatea de a acorda importanță diferită cuvintelor într-o căutare. De
exemplu, primele cuvinte dintr-o căutare ar trebui să fie mai importante decât restul.
Într-un manual de căutare avansată pe Google, se menționează diferența între [blue
sky] (cerul albastru și compania Blue Sky Studios) și [sky blue] (albastru cer, o
denumire folosită în alte contexte). (Edu.google.com, 2012) Pentru magazinele
online ar trebui să conteze ordinea în care sunt scrise cuvintele, și care sunt
cuvintele scrise la începutul frazei.
Într-un studiu din 2015 realizat de echipa de la Baymard Institute au fost
analizate cele mai importante 50 de site-uri de e-commerce de pe piața Statelor
Unite (Baymard.com, 2015). Rezultatele sintetice ale studiului:
Figura 2.4.1 Analiza listei de produse a magazinelor online (Baymard.com, 2015)
Cofondatorul institutului a scris un articol despre rezultatele cercetării efectuate
asupra magazinelor online respective în revista Smashing Magazine. (Holst, 2015)
Câteva observații din articolul respectiv:
26
Doar 16% din site-urile de e-commerce cele mai importante furnizează
utilizatorilor o experiență de filtrare a rezultatelor rezonabil de bună. Acest
lucru se întâmplă din cauza lipsei unor opțiuni de filtrare a rezultatelor
importante. Din datele studiului rezultă că logica de filtrare ineficientă și
interfețele nefuncționale sunt și ele probleme.
42% din site-urile de e-commerce de top nu au anumite tipuri de filtre specifice
unor categorii pentru câteva din categoriile de produse cele mai importante.
20% din site-urile de e-commerce nu au filtre tematice, în ciuda faptului că
vând produse cu atribute tematice evidente (sezon, stil ș.a.m.d.).
Din site-urile care se ocupă de produse care sunt dependente de o
compatibilitate (de exemplu, o placă de bază e compatibilă doar cu anumite
microprocesoare; sau un încărcător baterii poate lucra doar cu anumite
baterii), 32% nu au filtre de comptabilitate.
Testele au arătat că mai mult de 10 valori filtrate necesită scurtarea
(truncation) rezultatelor pentru a fi afișate în mod corect pe ecran. Cu toate
acestea, 32% din site-uri fie au un design de scurtare insuficient, care face ca
utilizatorii să nu observe valorile truncate (6%), sau se folosesc de ceva ce
testele au arătat că e și mai problematic, zone de scroll intern (24%, se referă
la casete în care vizitatorii dau scroll orizontal și/sau vertical pentru a putea citi
toată informația).
Doar 16 din site-uri promovează în mod activ filtre deasupra listei de produse
(aceasta este o pre-condiție pentru situația când se depinde mai mult de filtre
decât de categorii produse).
Abilitatea de filtrare eficientă variază puternic de la o industrie la alta,
electronicele și industria confecțiilor suferind de filtre insuficiente (pentru
fiecare din contextele lor specifice), în timp ce site-urile cu bricolaj sau
vânzătorii de produse generaliste au magazinele cu cele mai bune
performanțe de filtrare produse.
2.5 Limitările unui motor de căutare generalist Am discutat în lucrare până acum doar de lucrurile care pot fi găsite de
motoarele de căutări. Totuși, aceste motoare de căutare au limitările lor. Sunt unele
aspecte ce țin de ordin tehnic, pe care o să le discut mai jos, care arată că un motor
27
de căutare are limitările lui în a găsi informația pe un site. Pe un site de e-commerce,
de exemplu, un motor de căutare clasic (Google, Bing, Yahoo!, Yandex, Baidu) nu
poate adăuga produse în coș, nu poate compara produse, nu poate completa un
formular de cerere ofertă, nu poate interpreta ce înseamnă să ai un discount la
cumpărarea a două produse în același timp.
Motoarele de căutare generaliste (acestea sunt motoare de tipul Google, Bing,
Yahoo!, care caută în surse de date diverse, spre deosebire de cele specializate,
cum sunt YouTube sau Amazon, care caută doar anumite tipuri de date) adaugă
constant facilități și îmbunătățiri serviciilor lor. Lucruri care sunt invizibile astăzi pot
deveni vizibile mâine, dacă motoarele de căutare vor decide să adauge capabilitatea
de a indexa lucruri pe care în prezent nu pot sau nu doresc să indexeze. (Sherman și
Price, 2001)
Tip de conținut web invizibil De ce este invizibil
Pagină care nu este conectată cu alte pagini
de internet.
Nu există linkuri prin care roboții
motoarelor de căutare să ajungă la
pagină.
Pagină care constă în principal din imagini,
audio sau video.
Nu există suficient text pentru ca
motoarele de căutare să înțeleagă
despre ce e vorba în pagină.
Pagini constând în fișiere PDF (Portable
Document Format, un tip de fișier al
companiei Adobe special creat pentru
documente), sau Postscript, Flash,
Shockwave, executabile (programe) sau
fișiere comprimate (.zip, .tar etc.)
Indexabile din punct de vedere
tehnic, dar în principal ignorate, în
special din motive legate de
afaceri sau politica de funcționare
a motorului de căutare.
Conținut în baze de date relaționale. Roboții motoarelor de căutare nu
pot completa câmpurile cerute în
formulare interactive.
Conținut în timp real. Date efemere, cantități enorme,
informație care se schimbă rapid.
Conținut generat dinamic. Conținutul particularizat este
irelevant pentru majoritatea
28
căutătorilor. Teamă de capcane
pentru roboții motoarelor de
căutare.
Tabel 2.5.1 Tipuri de conținut web invizibil (Sherman și Price, 2001)
2.6 Soluții potențiale pentru paginile de rezultate căutări fără niciun rezultat
În lucrarea "Designing Search: UX Strategies for eCommerce Success", autorul
Greg Nudelman afirmă că nu există un set de reguli clare care să garanteze o
implementare a unei pagini care nu returnează niciun rezultat. Totuși, în lucrare, el
prezintă patru principii generale care pot furniza un bun punct de început (Nudelman,
2011):
1. „Nu vă fie teamă să spuneți că nu ați înțeles. Indicați clar că nu ați obținut
niciun rezultat”, astfel încât clientul să își dea seama că este o problemă, și să
o poată corecta. Dacă vizitatorul înțelege că nu sunt rezultate în pagină,
problema se poate remedia prin tastarea altor termeni cheie.
2. „Axați-vă pe a furniza o rezolvare. Asigurați-vă că fiecare variabilă din pagina
de rezultate de căutare face ceva productiv, pentru a ajuta la rezolvarea
problemei cu niciun rezultat în căutare.” Spre exemplu, cei de la Google, când
cineva introduce cuvinte ce par ar fi scrise greșit, întreabă internauții "Ați dorit
să scrieți ...?" (alt termen decât cel introdus).
3. „Creați o strategie de potrivire parțială robustă. Constrângerile prea mari sunt
unele din greșelile cele mai frecvente pe care le fac oamenii când caută pe
site-uri de e-commerce.” Dacă aveți o strategie de rezultate parțiale robuste,
ați putea, de exemplu, să faceți ca o căutare să răspundă doar la 3 termeni
din cei 5 căutați. Google face, de asemenea, și acest lucru.
4. „E bine să aveți mai multe strategii de livrare a răspunsurilor. Obțineți rezultate
din surse diferite, pentru a furniza rezultate care să ajute la căutările fără
rezultat (inițiale), dar în același timp păstrați relevanța căutării inițiale efectuate
de vizitator.” Ce se întâmplă de multe ori în practică este că sunt site-uri care
au un site de e-commerce și o funcție de căutare pentru acesta, au, în plus, și
un blog (deseori pe platforma WordPress), cu o funcție de căutare pentru
acesta. O integrare eficientă ar însemna ca atunci când cineva caută pe site
29
să obțină și rezultate din articolele puse pe blog, dar acestea să aibă o
prioritate mai mică decât rezultatele cu produse din site.
În concluziile unui studiu ("The effectiveness of Web search engines for retrieving
relevant ecommerce links"), autorii (Bernard J. Jansen și Paulo R. Molina), au tras
câteva concluzii despre motoarele de căutare pe care le-au analizat: Excite (un
motor de căutare generalist, existent și astăzi), Froogle (un motor de căutare deținut
de Google, în prezent dispărut de pe piață), Google, Overture (un motor de căutare
generalist, cumpărat de Yahoo! în 2003), Yahoo! Directories (un director web al
Yahoo!, cândva foarte popular, în prezent dispărut; pe baza lui exista un motor de
căutare specializat): (Jansen și Molina, 2006)
1. Froogle și Yahoo! Directories, două site-uri care au pus un accent ceva mai
mare pe e-commerce decât alte site-uri, au avut o relevanță statistică mai
mare decât Excite, Google și Overture (între care nu s-a găsit o diferență
statistică). De asemenea, nu a fost nicio diferență statistică între Froogle și
Yahoo! Directories. Ca răspuns la prima ipoteză a studiului (dacă un motor de
căutare personalizat e mai relevant decât unul generalist), se pare că aceasta
este adevărată, cele mai bune rezultate fiind obținute din site-uri specializate.
2. A doua ipoteză a studiului a fost dacă cumva primele rezultate din pagina de
căutare (de exemplu, rezultatele 1-5) sunt mai relevante decât rezultatele
următoare (6-10). Răspunsul a fost negativ, nu s-a observat că primele
rezultate ar fi mai relevante decât celelalte, pentru toate motoarele de căutare
analizate.
3. În fine, o ultimă ipoteză era dacă cumva rezultatele organice (cele care nu
sunt sponsorizate, apar natural, fără a fi plătite, așadar sunt "organice") ar fi
mai relevante decât cele plătite. Răspunsul, în această situație, a fost unul
pozitiv.
2.7 Viitorul motoarelor de căutare ale magazinelor online
Loop54 este un SaaS (software ca serviciu, software as a service) bazat pe
machine learning folosit de diferite site-uri pentru a crește vânzările și ratele de
conversie prin îmbunătățirea experienței vizitatorilor (CX, Customer eXperience).
30
Într-un articol de pe site-ul propriu, compania arată cum machine learning va
schimba viitorul căutărilor în e-commerce, unele tendințe fiind deja aplicate.
(Loop54.com, 2017)
Motoarele de căutare clasice pentru magazine online se axează în mod tipic pe
lucruri precum (Loop54.com, 2017):
Indexare eficientă – folosită pentru a localiza rapid datele fără a trebui să
caute în fiecare coloană de tabel de fiecare dată când o tabelă de baze de
date este accesată.
Reguli de ierarhizare bazate pe atribute - ierarhizează rezultatele pe baza
relevanței așteptate a căutării unui utilizator, folosind o combinație de metode
dependente de căutarea făcută și altele independente de căutarea efectuată.
Potrivită a căutării relaxată (fuzzy) – potrivire a căutării în mod aproximativ (de
exemplu, „lpatop” pentru „laptop”).
Variații – obținerea unor cuvinte chiar dacă nu sunt în forma exactă (carte /
cărți / cărțile / cartea)
Împărțire pe elemente (tokenization) – procesul prin care o căutare se împarte
în segmente de cuvinte, fraze, simboluri și alte părți relevante, numite
elemente (tokens).
În evoluția machine learning, algoritmii de căutare au putut face avansuri
tehnologice foarte mari în ceea ce privește datele comportamentale. Ele au folosit
comportamentul de click, de adăugare în coș și de cumpărare pentru a influența
sortarea rezultatelor (în acest sens, sortarea nu se face exclusiv bazat pe locația în
metadatele unui produs a unui text căutat). Machine learning a adus abilitatea
motoarelor de căutare de a înțelege relațiile dintre produse, chiar înainte ca orice text
să fie căutat sau să se fie obținut date de comportament. În acest fel, un motor de
căutare poate localiza produse similare sau complementare mai departe decât pe
baza unei simple categorii comune sau a unui brand de producător. Poate identifica
tipare complexe în toate metadatele și construi o arhitectură profundă în catalogul de
produse. Pornind de la aceste elemente de bază, un motor de căutare bazat pe
machine learning poate produce o listă de produse asemănătoare care nu au nicio
legătură cu căutarea efectuată. (Loop54.com, 2017).
31
Furnizarea unei liste de „produse asemănătoare” care sunt similare cu produsul la
care se uită un client poate duce la rate de conversie (din vizitator în client) crescute
și la valori medii ale coșului de cumpărături mărite, și ele. Machine learning permite
unui motor de căutare să structureze unele relații dintre produse care nu existat
vreodată. Făcând asta, poate realiza o listă inteligentă, auto-perfectibilă de „rezultate
asemănătoare”, care să fie complet diferite de cele oferite în general de sistemele
clasice. Mai mult, acest tip de motor de căutare nu are nicio nevoie de a avea date
de comportament pentru a funcționa, eliminând din strat problema unui început de
funcționare mai dificil (de notat, totuși, că datele de comportament sunt necesare, și
ar fi bine să fie adăugate motorului pentru a ajuta la sortarea produselor, pentru o
relevanță crescută). (Loop54.com, 2017)
32
3. Soluția propusă 3.1 Scop și obiective
Ne-am propus cu programul la care am lucrat să arăt că se poate face relativ
simplu un instrument care să folosească o căutare într-o bază de date de laptopuri,
pe două planuri – predicția unor termeni introduși la tastatură în mod parțial corect, și
apoi sortarea rezultatelor obținute pe baza unor criterii de relevanță. Soluția găsită în
final este, încă, inferioară la modul general unor soluții dedicate precum cele ale
Google, Amazon sau eMAG, dar pe anumite segmente, soluția propusă le poate
depăși și pe cele dedicate într-o eventuală analiză comparativă.
3.2 Descrierea algoritmului Algoritmul propus urmărește introducerea de date și căutarea într-o bază de date
de laptopuri. Baza de date e formată din numele laptopului și URL-ul aferent de pe
site-ul eMAg.ro. Propunerea noastră e pe două planuri: pe de o parte, am făcut un
algoritm de predicție cuvinte, se introduc unul sau mai mulți termeni, iar algoritmul
creat urmărește dacă acei termeni sunt tastați, cumva greșit, și în a doua parte am
făcut o sortare a rezultatelor care conțin termenii căutați.
În prima etapă în care este construit algoritmul se citește de la tastatură un text,
format doar din anumite caractere (litere, cifre, spațiu, cratimă, punct, virgulă,
ghilimele). Am făcut ca textul introdus să poată fi prelucrat de la tastatură ușor, prin
folosirea unor comenzi speciale, pentru deplasarea cursorului în text, deși textul se
citește literă cu literă, și nu ca string (text). Există un număr maxim de cuvinte pentru
care se afișează predicții, 5, apoi un cuvânt e necesar să aibă între 3 și 14 litere, și
tot stringul introdus de la tastatură trebuie să aibă maxim 60 de caractere cu spații (și
alte semne permise). Pentru a vedea predicții, se apasă tasta TAB, pentru a căuta
direct, fără predicții, se apasă tasta ENTER.
Programul citește apoi dintr-un fișier text predicțiile posibile pentru fiecare din
cuvinte. Predicțiile au fost generate din baza de date folosită (o listă de laptopuri de
pe site-ul eMAG). Se verifică dacă programul poate prezice niște termeni alternativi:
33
de exemplu, inversarea unor litere în cuvânt („latpop” vs. „laptop”). Apoi, pe baza
unei matrici cu poziția fiecărei litere de pe tastatură, programul poate interpreta dacă
cuvântul „laptop” a fost tastat de fapt ca „lstpop” (pe tastatură, litera „s” este lângă
litera „a”). Programul verifică în toate tastele din jurul tastei respective. O altă
variantă de predicție sunt cuvintele care încep cu un string. De asemenea, se caută
și dacă un cuvânt a fost tastat cumva cu o literă în plus față de cuvântul dorit. O altă
procedură verifică dacă un termen are o literă în minus.
Dacă se găsește mai mult de o predicție, programul oferă opțiunea de a alege
între predicțiile găsite.
În partea a doua a programului, se caută cuvintele în varianta finală introdusă de
la tastatură în baza de date de laptopuri. Programul este capabil să înțeleagă
anumite echivalări, de exemplu între termenii „DVD” și „DVD-ROM”, sau „MSDos” și
„MS-Dos” etc.
Dacă un termen va fi mai la începutul stringului introdus, acela va avea prioritate
mai mare în căutări decât un termen aflat la finalul stringului.
Dacă un string are 4 termeni, dar în baza de date de laptopuri sunt doar rezultate
în care apar 3 termeni, vor fi afișați aceia.
3.3 Utilitatea metodei În primul rând, funcția de auto-completare termeni. Dacă se urmează pașii
descriși de noi, se poate obține o funcție de auto-completare termeni foarte bună.
Apoi, funcția de validare date. Când se importă datele din baza de date a eMAG
și se împart datele pe coloane în Excel, și se sortează alfabetic, se pot găsi ușor
erori de introducere date, care pot fi corectate. Am găsit husă de laptop în categoria
laptop-uri, titluri de laptop puse greșit (fără "," ca separator, sau cu virgulă, dar fără
spațiul de după), ordine cuvinte din titlu nerespectată.
Mai departe, odată realizată procedura pe un set de date (noi am făcut procedura
pentru laptop-uri), se pot imagina ușor soluții pentru alte tipuri de date de pe site-uri
de tip e-commerce. Soluția propusă în algoritm este replicabilă.
34
De asemenea, căutarea devine mult mai bună prin procesul de înțelegere a unor
obiceiuri de tastare (notebook, în loc de laptop; 2 Core în loc de Dual Core), și prin
încercarea de înțelegere a sensului unei căutări. Statistici de genul acesta se pot
colecta cu instrumente precum Google Analytics, și apoi folosi pentru a rafina,
constant, căutările. E un proces repetitiv ce ar trebui să fie constant.
3.4 Analiza implementării algoritmului Programul a fost implementat în C++, deoarece am avut experiență ca
programatori cu programele Pascal, C și C++. Avem o oarecare expertiză în PHP și
HTML, dar am preferat să ne axăm pe scrierea de cod și algoritmi, nu neapărat în a
învăța să folosim un limbaj de programare pentru web/Internet.
De asemenea, codul a fost scris în paradigma de scriere programare
funcțională, pentru că avem expertiză în acest tip de programare.
Construcția programului a avut ca prim pas salvarea în calculator a unor
pagini HTML de descriere laptopuri de pe site-ul eMAG. Acestea au fost procesate în
calculator, pentru a obține, în final, o listă cu nume de laptopuri (rândurile impare 1,
3, 5 etc.) și de URL-uri pentru acele laptopuri (rândurile pare 2, 4, 6 etc.).
Apoi, din lista respectivă am extras cele mai folosite cuvinte, și le-am folosit
pentru funcție de autocompletare cuvinte (utilizatorul completează un string,
programul știe la ce e posibil să mă refer).
În continuare, am făcut o listă de conjuncții și prepoziții, care vor fi ignorate în
căutări.
Mai departe, am scris codul pentru a procesa aceste informații.
Pentru că în C++ string-urile funcționează ceva mai atipic decât în Java, și din
cauza faptului că experiența noastră în programare este limitată, am ajuns să scriem
foarte mult cod. Sunt aproximativ 2.500 de linii de cod, și aproape 8.000 de cuvinte
folosite. Ce-i drept, codul are numeroase comentarii, și, pentru debugging ușor, am
lăsat și variantele de testare (sunt multe linii, ulterior comentate, care doar afișează
un status, pentru debugging ușor).
35
Mai jos se prezintă câțiva indicatori folosiți pentru a măsura fiabilitatea
software-ului. Algoritmul a fost testat folosind un program numit CCCC.
Indicator Etichet
ă
Metrică globală Metrică per modul
Număr module NOM 1
Linii de cod LOC 1714 1714
Numărul ciclomatic al lui McCabe MVG 363 363
Linii de comentarii COM 347 347
LOC/COM L_C 4,939
MVG/COM M_C 1,046
Linii de cod respinse de compilator REJ 78
Tabel 3.4.1 Indicatori pentru a măsura fiabilitatea programului propus (Littlefair,
2018)
Detaliere indicatori (sursa pentru textul original este un raport creat de programul
CCCC, în care sunt explicați și indicatorii: Littlefair, 2018):
NOM = Numărul de module (program principal, biblioteci folosite; noi am
folosit doar un program principal, fără biblioteci). Ne-a fost mai util să lucrăm
într-un singur program, pentru că am putut avea o înțelegere a programului
facilă (în partea de sus funcții de predicție, la mijloc citirea tastelor, în partea
de jos sortare rezultate. Dar dacă am fi lucrat într-o echipă, cu alte persoane
să ne supervizeze codul, ar fi fost mai util să fi lucrat în mai multe programe.
LOC = Linii de cod, numărul de linii care să nu fie goale, și nici comentate,
numărate de program. Numărul respectiv este ridicat atât pentru că nu sunt
încă un programator profesionist, cât și pentru că am lucrat în C++, care are
mici probleme în gestionarea facilă a string-urilor. Se pot gestiona, doar că
este un pic mai dificil decât în Java, de exemplu.
COM = Linii de comentarii. De menționat că o mare parte din comentariile
făcute de noi au fost și în continuarea unor linii de cod, așa că numărul este
inexact. Am preferat să punem comentarii cât mai detaliate, pentru a face
codul ușor de înțeles. Am lăsat comentate și diferite instrucțiuni utile pentru
debugging. Prin de-comentarea lor se poate verifica ușor în ce loc al
programului vă aflați.
36
MVG = Complexitatea ciclomatică a lui McCabe. Aceasta este o măsură a
complexității decizionale care formează programul. Definiția strictă a acestei
măsurători este că este un număr de rute linear independente printru grafic
aciclic direcționat, care identifică trecerea controlului unui subprogram.
Software-ul analizator CCCC măsoară aceasta prin înregistrarea rezultatelor
decizionale distincte conținute în fiecare funcție, din care rezultă o bună
aproximare a versiunii definite formal a măsurătorii. Detaliem indicatorul mai
jos. De menționat că recomandarea numărului optim ar fi undeva între 10 și
15, iar la noi depășește 350. Explicația e că nu am împărțit programul în
module distincte.
L_C = Linii de cod pentru o linie de comentarii. Prin acest indicator se
măsoară densitatea comentariilor, cu atenție la dimensiunea textului
programului. Indicatorul în cazul de față nu este foarte precis măsurat,
deoarece nu ia în considerare comentariile „inline”, cele scrise în continuarea
unei linii de cod. Totuși, considerăm că și așa se poate vedea că am folosit
comentarii în codul nostru.
M_C = Complexitatea ciclomatică pe linia de comentarii. Folosind acest
indicator putem afla densitatea comentariilor în ceea ce privește complexitatea
logică a programului. Detaliem mai jos despre acest indicator.
REJ = Linii de cod respinse de compilator. Indicatorul e unul specific
programului CCCC, în Dev C++ pe Windows x64 nu ni s-a reportat niciun fel
de eroare de cod.
Mai jos, câteva aspecte despre complexitatea ciclomatică a lui McCabe (sursa –
o prezentare dintr-un curs al Universității Auckland - Tempero, 2018).
În primul rând, cu cât este mai complexă structura codului, cu atât este mai dificil
de înțeles, e mai probabil să aibă ceva defect, va fi mai dificil de actualizat, va dura
mai mult timp realizarea lui, și va fi mai dificil de reutilizat.
Apoi, numărul complex ciclomatic al lui McCabe (McCabe’s Cyclomatic
Complexity Number, CCN) măsoară numărul de căi liniare independente prin graful
programului (de văzut imaginea de mai jos, cu un graf).
v(F) = e – n + 2,
37
unde F este graful de parcurgere în cod, n numărul de noduri, e numărul de margini.
Intuitiv, pe măsură ce numărul complex ciclomatic al lui McCabe devine mai
mare, codul devine mai complex. Diferite surse recomandă un CCN nu mai mare de
10-15.
Figura 3.4.1 Exemplu pentru numărul complex ciclomatic al lui McCabe (Tempero,
2018)
3.5 Posibilități de extindere a algoritmului În primul rând, ar fi util un generator automat de filtre, se poate face un sistem
care să folosească filtrele cel mai des folosite de alte persoane care au căutat ceva
similar, și să ne fie afișate cele mai frecvent folosite filtre.
Apoi, pentru produsele în limba română, ar fi util ca textele produselor să poată fi
găsite indiferent dacă scriu sau nu cu diacritice. Diacriticele sunt și ele de două tipuri,
cu virgulă (Ș/ș, Ț/ț) și cu sedilă (Ş/ş și Ţ/ţ). Un motor de căutare ar trebui să poată
interpreta orice variantă de a scrie un cuvânt – cuvântul „țânțari” din „plasă țânțari” ar
putea fi scris în 9 feluri distincte, în funcție de semnul diacritic folosit pentru „ț” (și
numărul se înmulțește cu 4 dacă adăugăm cele 4 feluri de a scrie â: â\î\a\i).
Cum poate „învăța” un site abia lansat pe piață dacă se caută frecvent „notebook”
sau „laptop”? Un răspuns, printre alte posibile soluții, ar putea fi folosirea Google
Trends, un site care permite comparații între termeni. Instrumentul respectiv va oferi
și noi sugestii de căutare. S-ar putea face astfel niște dicționare de echivalență, un
motor de căutare ar putea „înțelege” că „laptop” înseamnă, de fapt, „notebook”.
Desigur, ar putea fi utile și niște dicționare de sinonime, dar pentru termenii mai
38
tehnici e posibil să nu fie suficient de moderne în exprimare, și e posibil să se piardă
termeni mai de argou, sau exprimări imprecise, dar folosite în practică.
Uneori, lucrurile generate automat pot da erori. De exemplu, da, „notebook” poate
însemna „laptop”, dar nu ar trebui să fie egal cu „netbook”, deși, aparent, termenii
sunt similari. Ar trebui ca listele generate automat să fie monitorizate. Sau se poate
crea un algoritm, ceva mai complex, care să învețe din greșeli. Prin studierea
comportamentului vizitatorilor, se poate determina dacă pentru majoritatea „netbook”
= „notebook” – dacă se observă că vizitatorii nu sunt mulțumiți de afișarea de
notebookuri la căutări de netbookuri, sau dacă se observă că au fost multe produse
notebook returnate de către cei care căutau netbookuri, se pot lua măsuri corective.
Dacă acest proces de corecție are loc, atunci predicția ar putea rămâne.
Pentru un site cu trafic ceva mai mare, și cu o prezență stabilită pe o anumită
piață, ar putea fi utilă analiza statisticilor din instrumente precum Google Analytics,
care permit, odată făcută o configurare, monitorizarea căutărilor.
Există și funcții de căutare care sunt specifice anumitor nișe. De exemplu, pentru
o persoană care caută un parfum cu un anumit miros, ar fi relevant să i se prezinte o
serie de parfumuri realmente asemănătoare cu acel parfum.
Filtrele de sortare pot și ele să fie rafinate. Să zicem că discutăm despre un
magazin de ceaiuri. Aici, în plus față de filtre precum „ceaiuri de mentă”, „ceaiuri de
sunătoare” etc., ar putea fi utile filtre pentru diferite metode de a folosi acele ceaiuri –
există ceaiuri de răceală, pentru slăbit, pentru somn liniștit, pentru energie ș.a. În
lumea tehnologiei, laptopurile pot fi de birou, pentru acasă (multimedia), pentru
procesare video, pentru jocuri, pentru condiții de lucru dificile (cu rezistență la praf și
căderi). Ar ajuta dacă filtrele nu ar fi exclusiv axate pe specificații tehnice, ci ar fi și
fidele intenției de căutare a vizitatorilor, așa cum poate fi ea interpretată de deținătorii
de magazine online. Tot legat de laptopuri, „laptopuri noi” ar fi un filtru doar cu
laptopuri lansate într-o anumită perioadă. Similar, o funcție de filtrare pentru
„laptopuri ieftine”.
O problemă întâlnită la unele magazine este neconcordanța 100% a filtrelor cu
specificațiile produselor. Pe Amazon.com, de exemplu, unele produse sunt vândute
nu de către Amazon în sine, ci de terțe părți. Este dificil să impui criterii coerente
39
pentru zeci (poate sute) de milioane de produse, introduse de foarte mulți
comercianți. Prin urmare, uneori filtrele Amazon din căutări nu sunt precise.
O funcție de sortare care lipsește multor magazine online e funcția de sortare
după data apariției pe piață. E posibil să ne placă 3 laptopuri în măsură egală. Ar fi
un puternic criteriu diferențiator să pot afla ușor data lansării pe piață a modelelor
respective.
Alte criterii de sortare, care uneori nu apar în magazinele online: sortare după top
vânzări (aceasta ar trebui să fie sortarea implicită), sortare după număr și sentiment
comentarii, traficul pentru anumite produse, istoricul celui care caută, laptopuri
populare în ultima lună, recomandări editoriale (ce recomandă echipa din spatele
site-ului).
Funcția de predicții cuvinte (pe măsură ce scriem un cuvânt, să ni se sugereze
texte în mod automat) ar putea avea ca funcție adițională abilitatea de a învăța care
sunt cele mai des folosite predicții, și să le afișeze prioritar pe acela. Apoi, să învețe
din comportamentul nostru, de utilizatori logați în site, și, odată ce am făcut o
selecție, să o afișeze pe aceea prioritar. Nu în ultimul rând o funcție de tip auto-
completare, ca un utilizator să scrie 2-3 litere și să i se indice cuvinte de 10 litere, să
spunem.
Mai departe, se poate lua în considerare comportamentul vizitatorilor - pe ce fac
click când caută, dacă se întorc la rezultatele căutării după ce văd un anumit produs
(ceea ce poate însemna că nu au fost mulțumiți de rezultatul respectiv), ce produse
se cumpără efectiv după o căutare, ce produse sunt recomandate mai departe, care
este sentimentul vizitatorilor, așa cum decurge el din comentariile și notele
(ratingurile) lăsate pentru produse etc. Dacă se intră pe acest proces - cum
optimizăm rezultatele de căutare de pe un site? - se poate ajunge cu perfecționarea
la un nivel foarte ridicat.
Pe un magazin online ne-am aștepta să găsim și niște rute predefinite foarte
bune. De exemplu, cine caută „Laptop Asus” ar putea să fie trimis automat în
categoria „Laptopuri”, cu filtru selectat pe „Asus”. Da, e posibil ca vizitatorii să se
aștepte să ajungă într-o pagină de căutări cu filtre posibile, dar e de testat și sugestia
noastră.
40
Suntem aproape siguri că cine introduce un cod produs în funcția de căutare vrea
să ajungă direct la produsul respectiv. Pentru acel tip de căutări, am implementa o
funcție de tipul „Mă simt norocos”, prezentă pe motorul de căutare Google, care să
„trimită” automat internauții la primul (deci, cel mai relevant) rezultat găsit.
O funcție pe care am implementat-o în program e ca dacă o căutare nu are niciun
rezultat, să tai din termenii introduși.
Ar fi util ca un motor de căutare să știe că 2 TB = 2.000 GB (pentru hard-diskuri)
= 2.048 GB (pentru alte tipuri de căutări, oricum se poate pune ca echivalent). De
asemenea, separatorul ar trebui să fie atât virgulă, cât și punct (să fie echivalente):
„2.048” = „2,048”.
Există și căutări foarte provocatoare: „hard-disk laptop”. Poate vizitatorul dorește
să primească o listă de hard-disk-uri pentru laptopuri. Dar acele hard-diskuri pot fi
interne sau externe. Și căutarea ar putea fi și „laptop care să conțină hard-disk, spre
deosebire de alte laptopuri, cu SSD”.
Conjuncțiile, în general, ar trebui eliminate din funcțiile de căutare. „Cel mai nou
laptop” ar putea fi o excepție, aici ar fi utilă o sortare de la cel mai nou spre cel mai
vechi, cu toate laptopurile din magazin.
41
4. Concluzii Am încercat cu demersul nostru să demonstrăm că se poate face un motor de
căutare laptopuri care să permită predicții cuvinte, și o sortare primară rezultate.
Rămân ca posibilități de explorat diferite sugestii pe care le-am acumulat pe măsură
ce am realizat proiectul, de îmbunătățire a motoarelor de căutare.
Răspundem mai jos principalelor puncte prezentate în partea introductivă:
"Am vrut să arătăm o modalitate practică prin care se pot face unele
îmbunătățiri la un motor de căutare cu resurse puține." – Am lucrat cu un
limbaj de programare axat mai puțin pe partea de web, C++. A fost o primă
variantă a unui potențial algoritm mult mai complex. Considerăm că am
realizat o mini-performanță – am făcut un algoritm care poate face atât
predicții asupra ce utilizatorul dorește să tasteze, cât și un mic algoritm de
sortare a datelor relativ eficient. Loc de îmbunătățire este suficient, mai ales
pe baza unor algoritmi de machine learning.
"Vom prezenta în lucrare inclusiv idei noi, potențial utile de folosit pentru
magazinele online în viitor." – partea aceasta a fost una din cele mai
consistente în demersul noastră. Din experiența noastră personală în
domeniul optimizării pentru motoarelor de căutare (SEO), am avut ocazia să
interacționăm cu majoritatea din principalele motoare de căutare, și am
acumulat, de-a lungul anilor, numeroase observații despre cât de ineficiente
pot fi unele căutări. Am căutat în lucrarea noastră să prezentăm unele posibile
soluții la aceste probleme.
" Am dorit cu programul propus de noi să simulăm unele din funcționalitățile de
predicție pentru un eventual motor de căutare pentru produsele din
magazinele online." – am scris mult cod pentru a face un motor de căutare cu
câteva funcții de predicție distincte. Programul nostru este încă departe de
modelul pe care l-am avut, anume tastatura pentru sistemele de operare
pentru mobil Android și iOS numită SwiftKey. Însă, la nivel primar, am folosit o
parte din facilitățile oferite de tastatură și considerăm că le-am imitat cu
succes.
42
" Scopul de la care am pornit lucrarea a fost atât de a implementa ideile pe
care le am în domeniul căutării pentru motoarele de căutare, de a da un
model practic și verificabil, cât și de a veni cu noi idei, ca posibile rute de
prospectat pentru aplicații viitoare. Acestea au rămas în plan pur teoretic,
urmând a fi implementate de alte entități, în încercarea de a îmbunătăți
performanțele motoarelor de căutare din prezent." – am vorbit anterior despre
ideile noi pe care ne-am propus să le aducem cu lucrarea și cât de bine sau
rău am realizat acest lucru. Legat de testarea abilităților – principala remarcă
negativă pe care o avem este legată de complexitatea codului. Programul este
foarte lung, considerăm că dacă am fi făcut și o a doua variantă am fi putut
găsi chiar noi înșine alte soluții pentru a comprima codul. Iar un programator
cu experiență bogată în programare ar putea realiza un cod semnificativ mai
mic. Per ansamblu, însă, ne declarăm mulțumiți de rezultatul obținut pornind
de la obiectivele inițiale ale cercetării. Un motiv în plus de satisfacție este și
faptul că am comentat o parte însemnată din funcțiile folosite, și am păstrat, în
corp de comentarii, și instrucțiunile folosite pentru debugging (căutare erori) în
program, așa că eventualele erori pot fi reparate mai ușor prin de-comentarea
liniilor.
Ca o concluzie finală, considerăm că scopul de la care s-a pornit inițial – acela de
a face o lucrare prin care să arătăm că se poate realiza cu un algoritm realizat cu
resurse puține un program care să aibă abilitatea de a prezice diferite elemente
folosite pentru a introduce date, iar, ulterior, abilitatea de a ierarhiza informația pe
baza unor criterii –, a fost atins, fie doar și parțial. Programul are anumite facilități
atât în etapa de predicție cuvinte, cât și în etapa ulterioară, de căutare și sortare
rezultate. Legat de partea teoretică a demersului nostru, considerăm că și scopul
acestuia a fost atins, așa cum am arătat deja în comparația între obiectivele propuse
și cele pe care le-am îndeplinit în mod practic.
43
Bibliografie Baymard.com. (2015). Top 50 E-Commerce Sites Ranked by Product List Usability -
Baymard Institute. [online] Disponibil la: https://baymard.com/ecommerce-product-
lists/benchmark/site-reviews [Accesat 4 Apr. 2018].
Brin, S. și Page, L. (1998). The Anatomy of a Large-Scale Hypertextual Web Search
Engine - Stanford InfoLab Publication Server. [online] Ilpubs.stanford.edu. Disponibil
la: http://ilpubs.stanford.edu:8090/361/ [Accesat 1 Apr. 2018].
content: MarketingSherpa, M. (2007). How to Improve Your Site’s Internal Search &
Lift ROI - 9 Strategies & Tips. [online] MarketingSherpa. Disponibil la:
https://www.marketingsherpa.com/article/interview/how-to-improve-your-sites
[Accesat 3 Apr. 2018].
Edu.google.com. (2012). Lesson 1.5: Word order matters (Text). [online] Disponibil
la: https://edu.google.com/coursebuilder/courses/pswg/1.2/assets/notes/Lesson1.5/
Lesson1.5Wordordermatters_Text_.html [Accesat 2 Apr. 2018].
Enge, E., Spencer, S., Stricchiola, J. și Fishkin, R. (2012). The art of SEO. 2nd ed.
Sebastopol, Calif.: O'Reilly Media, pp.47-48.
Fishkin, R. (2018). New Jumpshot 2018 Data: Where Searches Happen on the Web
(Google, Amazon, Facebook, & Beyond) | SparkToro. [online] SparkToro. Disponibil
la: https://sparktoro.com/blog/new-jumpshot-2018-data-where-searches-happen-on-
the-web-google-amazon-facebook-beyond/ [Accesat 5 Apr. 2018].
Grappone, J. și Couzin, G. (2011). Search engine optimization. 3rd ed. Indianapolis,
Ind.: Wiley Pub., p.70.
Holst, C. (2015). The Current State Of E-Commerce Filtering. [online] Smashing
Magazine. Disponibil la: https://www.smashingmagazine.com/2015/04/the-current-
state-of-e-commerce-filtering/ [Accesat 4 Apr. 2018].
Jansen, B. și Molina, P. (2006). The effectiveness of Web search engines for
retrieving relevant ecommerce links. Information Processing & Management, 42(4),
pp.1075-1098.
44
Keyes, D. (2017). Search engines are weakening Amazon’s hold on product search.
[online] Business Insider. Disponibil la: http://www.businessinsider.com/google-
search-engines-weaken-amazon-hold-on-product-search-2017-12 [Accesat 1 Apr.
2018].
Kim, E. (2018). Amazon shares jump after earnings. [online] CNBC. Disponibil la:
https://www.cnbc.com/2018/02/01/amazon-earnings-q4-2017.html [Accesat 31 Mar.
2018].
Langville, A. și Meyer, C. (2006). Google's PageRank and Beyond. Princeton:
Princeton University Press, pp.1-3; 32-33; 115-116.
Lewis, P. (2018). 'Fiction is outperforming reality': how YouTube's algorithm distorts
truth. [online] The Guardian. Disponibil la:
https://www.theguardian.com/technology/2018/feb/02/how-youtubes-algorithm-
distorts-truth [Accesat 1 Apr. 2018].
Littlefair, T. (2018). CCCC Software Metrics Report. CCCC Software Metrics Report.
Loop54.com. (2017). How machine learning is changing e-commerce site-search for
the better. [online] Disponibil la: https://www.loop54.com/blog/machine-learning-is-
changing-ecommerce-site-search-for-the-better [Accesat 4 Apr. 2018].
Nudelman, G. (2011). Designing search. Ediția 1. Indianapolis, IN: Wiley, p.12.
Page, L., Brin, S., Motwani, R. și Winograd, T. (2018). The PageRank Citation
Ranking: Bringing Order to the Web. - Stanford InfoLab Publication Server. [online]
Ilpubs.stanford.edu. Disponibil la: http://ilpubs.stanford.edu:8090/422/ [Accesat 31
Mar. 2018].
Pelican, E. (2016). Modele de aproximare şi simulare, Curs
Petac, E. (2018). Elaborarea lucrării de disertaţie, Seminar
Radu, A. (2018). Raportul pieței de e-commerce 2017: Românii au cumpărat online
de 2,8 miliarde de euro (UPDATE cu infografic). [online] Blogul GPeC. Disponibil la:
https://www.gpec.ro/blog/raportul-pietei-de-e-commerce-2017-romanii-au-cumparat-
online-de-28-miliarde-de-euro [Accesat 31 Mar. 2018].
Sburlan, D. (2016). Modele neconvenţionale de calcul, Curs
45
Sherman, C. și Price, G. (2001). The invisible web. Medford (New Jersey):
Information today, pp.56, 60.
Simon, M. (2015). The Value and Incremental ROI of Internal Site Search | Adobe
Blog. [online] Adobe Blog. Disponibil la: https://theblog.adobe.com/the-value-and-
incremental-roi-of-internal-site-search/ [Accesat 3 Apr. 2018].
StatCounter Global Stats. (2018). Search Engine Market Share Worldwide |
StatCounter Global Stats. [online] Disponibil la: http://gs.statcounter.com/search-
engine-market-shar
Statista. (2018). Facebook users worldwide 2017 | Statista. [online] Disponibil la:
https://www.statista.com/statistics/264810/number-of-monthly-active-facebook-users-
worldwide/ [Accesat 1 Apr. 2018].
Sullivan, D. (2010). Schmidt: Listing Google's 200 Ranking Factors Would Reveal
Business Secrets - Search Engine Land. [online] Search Engine Land. Disponibil la:
https://searchengineland.com/schmidt-listing-googles-200-ranking-factors-would-
reveal-business-secrets-51065 [Accesat 31 Mar. 2018].
Sullivan, D. (2016). FAQ: All about the Google RankBrain algorithm - Search Engine
Land. [online] Search Engine Land. Disponibil la: https://searchengineland.com/faq-
all-about-the-new-google-rankbrain-algorithm-234440 [Accesat 31 Mar. 2018].
Tempero, E. (2018). COMPSCI 702: Software Measurement. McCabe’s Cyclomatic
Complexity Number. [online] Disponibil la:
http://www.dcc.ufmg.br/~mtov/pmcc/cyclomatic_complexity_tempero.pdf [Accesat 3
Apr. 2018].
The Globe și Mail. (2001). AskJeeves acquires Teoma search engine. [online]
Disponibil la: https://www.theglobeandmail.com/technology/askjeeves-acquires-
teoma-search-engine/article1185212/ [Accesat 4 Apr. 2018].
Wagner, A. (2017). Are You Maximizing The Use Of Video In Your Content
Marketing Strategy. [online] Forbes.com. Disponibil la:
https://www.forbes.com/sites/forbesagencycouncil/2017/05/15/are-you-maximizing-
the-use-of-video-in-your-content-marketing-strategy/ [Accesat 1 Apr. 2018].
46
Anexa 1 – măsurarea complexității codului
Lini
a
Obi
ectu
l
măs
urat
LOC
phy
LOC
bl
LOC
pro
LOC
com
V B(x
100)
T N1
N2
n1 n2 D E L(x1
000)
MIw
oc
MIc
w
MI
2525
prog
ram
-
v.0.
124.
cp
p 2525
579
1756
332
7261
0
1904
210:
38:3
5
4487
3829
38 387
188
1364
9676
5 50 27 77
126
Ste
rgeE
cr
an()
19 1 18 2 316
4 0:01
:14
34 34 5 20 4 1342
235
93 24 117
152
Lite
raM
ica(
) 28 1 7 20 105
3 0:00
:48
16 11 9 6 8 870
121
92 48 140
181
Ulti
mel
e_2
_Sau
_3_C
arac
tere
_..
.() 43 3 37 5 1105
42 0:41
:20
122
97 15 18 40 4464
9
25 71 25 96
225
Elim
ina_
Or
ice_
Altc
ev
a_D
ecat
_..
.() 29 3 20 7 914
31 0:26
:10
93 80 17 22 31 2826
2
32 78 34 113
256
Cuv
antu
l1
Est
eCon
tin
utIn
Cuv
ant
ul2(
)
34 2 21 12 518
19 0:12
:48
56 45 19 16 27 1384
2
37 80 40 120
291
load
_Con
j
unct
ii_si
_P
repo
zitii
()
30 4 19 7 354
7 0:03
:05
37 32 13 22 9 3346
106
85 34 119
322
load
_Fis
ier
_Lis
ta_L
ap
topu
ri()
96 12 57 29 2219
74 1:35
:54
204
158
26 44 47 1035
78
21 53 38 90
419
load
_Arr
ay
_Fro
m_F
il
e_au
toc_
tx
t() 30 4 19 7 354
7 0:03
:05
37 32 13 22 9 3346
106
85 34 119
450
Afis
eaza
_
Sug
estii
()
160
21 137
23 3250
124
3:30
:29
300
248
22 39 70 2273
36
14 39 28 67
47
611
Cau
taP
otri
vire
Exa
cta
() 43 9 30 8 679
19 0:12
:53
72 65 12 19 21 1393
2
49 75 31 106
656
Cau
taIn
ver
sare
Lite
re(
) 73 9 57 11 1391
60 1:10
:06
144
121
18 20 54 7572
4
18 61 28 89
730
Cau
taP
ozit
iaLi
tere
iPe
Tast
atur
a()
23 5 17 2 316
9 0:03
:54
34 34 11 14 13 4218
75 89 22 111
754
Cau
taLi
ter
eTas
tate
G
resi
t()
85 16 65 9 1878
69 1:26
:38
185
155
18 28 50 9356
5
20 56 24 80
841
Cau
taC
uvi
nteC
areI
nc
epC
u()
53 12 37 6 841
28 0:22
:29
87 77 15 20 29 2429
0
35 70 25 94
897
Cau
taC
uvi
nteC
uLite
r
aInP
lus(
)
68 12 53 9 1240
50 0:53
:10
129
109
17 20 46 5743
6
22 63 27 90
967
Cau
taC
uvi
nteC
uLite
r
aInM
inus
()
67 11 51 10 1177
46 0:47
:43
123
103
17 20 44 5153
8
23 63 28 92
1036
Cau
ta_S
u
gest
ii()
48 16 30 4 581
16 0:09
:21
60 50 16 23 17 1011
1
58 74 22 95
1085
impa
rte_Q
uery
_in_
C
uvin
te()
62 15 44 13 1253
55 1:01
:24
130
101
22 21 53 6631
4
19 63 33 96
1148
Citi
re_T
ast
e()
307
60 232
35 4917
124
3:30
:50
447
298
23 74 46 2277
07
22 17 25 42
1457
Ver
ifica
Da
caTe
rmen
ulA
pare
...()
46 14 26 8 717
20 0:13
:43
68 61 19 28 21 1483
0
48 74 30 104
1504
prel
ucre
az
a_Q
uery
()
938
263
624
73 1949
9
573
34:4
4:15
1539
1342
16 93 115
2250
997
9 -14
21 6
48
2443
Afis
eaza
_
Rez
ulta
te()
77 18 57 8 1806
54 1:00
:12
167
153
16 34 36 6501
7
28 59 24 83
2521
mai
n()
5 0 5 0 43 1 0:00
:04
7 6 4 6 2 86 500
125
0 125
Metricele de mai sus sunt metrici obținute cu Testwell CMT++ (Instrument de Măsură a Complexității Codului - Complexity Measures Tool). Programul cu care am testat a fost obținut de aici: http://www.verifysoft.com/en.html, iar tabelul obținut este un rezumat al tabelului furnizat de instrument (existau mai multe coloane, și câteva linii în plus, și nu exista legenda).
Explicații:
LOCphy Număr linii codLOCbl Număr linii goale (nu conțin nimic)LOCpro Numărul liniilor de program (instrucțiuni, declarații)LOCcom Numărul liniilor cu comentariiV Volumul programului (dimensiune)B(x100) Numărul de buguri; B = ( E ^ (2/3) ) / 3000T Timpul de implementare; T = E / 18N1 Numărul total de operatoriN2 Numărul total de operanzin1 Număr operatori unici folosițin2 Număr operanzi unici folosițiD Gradul de dificultate al programului; D = ( n1 / 2 ) * ( N2 / n2 )E Efortul de implementare; E = V * DL(x1000)
Nivelul programului; L = 1 / D
MIwoc Indicele de mentenanță, fără comentariiMIcw Gradul de importanță al comentariilorMI Indicele de mentenanță
49
Anexa 2 – graficul funcțiilor tabelului Mai jos, se pot vedea funcțiile programului – cum se întrepătrund, care dintre ele
folosesc alte funcții, și în ce alte funcții sunt apelate. Săgețile nu au o semnificație
aparte.
50