Kiss Miklós POFA I. Product Opinion Finder & Analyzer
Prototípus Interneten fellelhető termékek jellemzőit prezentálja. Egy meghatározott keresés eredmény-oldalaiból a felhasználó számára lényeges információkat releváns sorrendben jelenít meg. Kvantitatív szövegelemzés segítségével. Cél: olyan gyakorlatiasan használható termék legyen előállítható a prototípusból, amely az internetes vásárlások előtti (jellemzők) vagy vásárlás utáni (jellemző problémák) információgyűjtést jelentős mértékben megkönnyíti, gyorsítja. 2/32
Projekt célja Öntanuló, nagy mennyiségű és eltérő forrásokból származó szövegek kvantitatív módszerekkel történő tartalomelemzésére alkalmas algoritmusváltozatok kutatása, modellezése és tervezése; a létrehozott algoritmusok optimalizálása teljesítmény szempontjából (felkészítése nagy mennyiségű, egyidejű elemzésekre – performancia optimalizálás); az algoritmusok tanulási folyamatának irányítására, az eredmények elemzésének prezentálására alkalmas felhasznáói felületek tervezése. 3/32
Algoritmusok jellemzői Nagytömegű (internetről származó) szövegek kvantitatív feldolgozása; öntanuló jelleg kialakítása az algoritmusban a felhasználóval történő interaktív együttműködés alapján, jellemző szóösszetételek tárolása, források rangsorolása tartalmakra adott visszajelzések alapján; performancia optimalizáció a nagy felhasználószám kiszolgálásához (az adatbázis struktúrájának, a lekérdező SQL-ek optimalizálása, a szövegelemzés jellemző eredményeinke adatbázis szinten való gyorsítótárazása, a prezentáló eszköz és a szerver oldali réteg kapcsolatának optimalizálása az adatforgalomnak megfelelően. 4/32
Prototípus elemei elemző algoritmusok A kifejlesztésre kerülő algoritmusok egy megadott termék interneten fellelhető jellemzőinek, illetve a termékkel kapcsolatos egyéb információknak (vélemények, típushibák, használati tapasztalatok, probléma megoldások, vásárlási/szervíz tapasztalatok) különböző forrásokból származó szöveges megjelenési formáiból képes gyors, irányított elemzések végrehajtására. A kvantitatív módszerekre épülő elemzési logika és az adatbányászati jellegű mesterséges intelligencia segítségével olyan elemzési modellt implementálunk, mellyel minimalizáljuk a nyelvészeti jellegű elemzési módszertanokat. 5/32
Prototípus elemei Irányítási és prezentációs réteg I. Az elemző algoritmusok egy bemenő szöveghalmazt dolgoznak fel. E szövegek szavaiból, kifejezéseiből statisztikai módszerek alkalmazásával címkefelhőt állítunk elő, amely segítségével a felhasználó finomíthatja az elemzést és befolyásolhatja a vizsgálat további eredményét. A felhasználó és a prototípus közötti webes technológiákon alapuló, irányításra és az elemzések (rész)eredményeinek megjelenítésére szolgál ez a réteg. Az elemzés irányának befolyásolása, terjedelmének szűkítése során felhasznált szavakat a prototípus eltárolja, és hozzárendeli az eredeti kereső kifejezéshez, valamint egy előre megadott – a felhasználó által kiválasztott – kategóriához. 6/32
Prototípus elemei Irányítási és prezentációs réteg II. E szűkítés alapján a réteg a keresőmotor találati listája szövegeinek egy tartalmialg szűrt verzióját prezentálja, sőt az egyes elemek viszonylatában csak a releváns részleteket jeleníti meg. Ezeket a szövegrészleteket a felhasználó egyesével tovább értékelheti. A kategória és szó összerendeléseket, valamint a szövegértékelést a prototípus szintén rögzíti, s ez alapján az algoritmus a következő tartalom elemzési lépés során már felhasználó igényeihez közelebb álló tartalmat képes prezentálni, illetve egyre pontosabbá teszi a téma szerint értékelt források rangsorát. 7/32
Prototípus elemei fogalmi háló modell Az algoritmusok és a felhasználó interakciója során a prototípus létrehoz egy fogalmi hálót statisztikai módszerekkel, amely révén, ha nem is válik teljesen szükségtelenné a nyelvi elemzés, de mindneképpen minimalizálódik a felhasználása a prototípusban, és egy kvázi nyelv független elemzési algoritmus állhat össze. 8/32
Műszaki újdonság Nem webes tartalmak megtalálása, hanem kizárólag a megtalált szövegek továbbszűrése, elemzése, kategorizálása és megfelelő prezentációja, specifikusabb részcélok alapján, nagyban építve a felhasználói aktivitásra (szavak összefüggései) és visszajelzésekre (tartalom értékelése). Internetes tartalmak (termékismertetők, kommentek, hírcsatornák, cikkek, fórumok, blogok stb.) tartalmi elemzése, szűrése és csoportosítása, prezentációja és ezzel kapcsolatos nyelv független részmegoldások keresése. 9/32
Eredmények Input: 4 magyar oldalról (digitális fényképező, mobiltelefon, notebook) [crawler] Terméknevek Adatlapok Vélemények Kategóriák 2574 terméknév 2277 adatlap kategória 3551 kategória 10/32
Eredmények ~ adatelem (termék, kategória, stb.) ~ kapcsolat ~ tulajdonság 11/32
Eredmények 12/32
Eredmények - lekérdezés Felhasználói keresőkifejezés Cél: visszavezetni minél szűkebben termék(ek)re Egy termék részletezése vagy több termék összehasonlítása Példa: „macbook”: 13/32 Query string: "macbook", language: hu Best matching entity names: macbook: "Apple MacBook Pro" 2483 macbook: 0.2 "Apple MacBook Air ( 13,3/1,86/2/120" 450 macbook: "Apple MacBook Pro 15 ( z0j5000cx/mg" 3854 macbook: "Apple MacBook Pro 15 notebook ( z0j4000cp/mg" 4562 macbook: "Apple MacBook Core 2 Duo 2.4GHz 2GB 250GB 13.3" macbook: 0.1 "Apple MacBook Pro Core 2 Duo 2.4GHz 2GB 250GB 15.4" Best matching category names: macbook: 0.5 "MacBook Pro " 2486 macbook: 0.2 "Apple Macbook Air 11 Z0JJ0004A/MG" Best found entities (category -> entity):
Eredmények - lekérdezés 14/32 Query string: "macbook pro dell d510", language: hu Best matching entity names: dell: "Dell Latitude D510" 3044 dell: "Dell Inspiron M5010 DIM501HMHA24M35GBC6LHR" d510: "Dell Latitude D510" 3044 macbook pro: "Apple MacBook Pro" 2483 macbook pro: "Apple MacBook Pro 15 MC371ZH-A" macbook pro: "Apple MacBook Pro 15 ( z0j5000cx/mg" 3854 [...] Best matching category names: dell: "Dell Notebook" 188 dell: "Dell Vostro " dell: "Dell notebook, laptop, netbook" 296 dell: "Dell Inspiron N5010 Core i3-350M 2.26GHz 2GB 320GB 15.6" macbook pro: "Apple MacBook Pro 13.3 Core 2 Duo 2.4GHz 4GB 250GB" Best found entities (category -> entity): Dell notebook, laptop, netbook: "Dell Latitude E5510 ( i5-560M/4/320/GMA/W7" 294 Dell Notebook: "Dell Inspiron M5010 DIM501HMHA24M75GBC6LHB" Dell Notebook: "Dell Inspiron M " Dell Notebook: "Dell Inspiron N " Dell Notebook: "Dell Inspiron M5030 DIM503HMHA34I35ZBC6HB" [...] Futásidő: ~1000 ms (~500 ms cache)
Eredmények – input oldal Termék név: „Dell Latitude D510” Kategóriák: „informatika, távközlés, internet, TV/Rádió” „Hardver, szoftver” „Komplett gép” „Notebook” Adatlap Vélemény: 15/24 "Minőségi Notebook A hordozható masina küllemét tekintve igényes, és a magabiztosság érzetét kelti használójában, legyen az akár, egy egyetemi hallgató, vagy egy komoly üzletember. Az 1600 MHZ-s processzor lehetőséget nyújt az irodában végezendő munkák elvégzéséhez. Összességében egy elég jól sikerült notebookról beszélhetünk.„
Felépítés - Feladatcsoportok Adatgyűjtés Crawler, nyers input begyűjtése Előfeldolgozás Nyers inputok tördelése, felesleges részek eltávolítása, későbbi feldolgozás előkészítése (index építés, alapvető kapcsolatok kialakítása) Elemzés Szövegelemzés, rejtett/indirekt kapcsolatok felismerése, tanítás előkészítése Lekérdezés Keresőkifejezés és szűrők alapján entitások és hozzájuk kapcsolódó vélemények megjelenítése Általános vélekedés számszerűsítése Tanítás Felhasználói visszajelzések alapján a szövegelemek jelentésének tanulása Karbantartás Automatikus adatbázis karbantartás 16/32
Felépítés – Input előállítása Célok: csak és kizárólag az „értékes” részeit tartsuk meg az oldalnak Crawler automatikusan képes legyen begyűjteni ezeket Ne akarjuk letölteni a teljes internetet Lehetőleg csak jó minőségű adatok kerüljenek a rendszerbe 17/32 Mi megoldásunk: „restricted crawler”: csak az előre megadott URL-eken található oldalakat járja be domain függő szabályrendszer az oldalak szerkezetének leírására DOM fa alapján tördeljük az oldalt (javítás szükséges lehet) Reguláris kifejezésekkel rugalmas szabályok adhatók meg
Felépítés - szabályrendszer seed: crawler induló URL-jei accept: csak az ezekre (valamelyikre) illeszkedő URL-ek tartalmát elemzi (crawl szempontból is) rule: tartalom típusa type: ENTITY, TEXT, FACTSHEET, BREADCRUMBS path: DOM fa útvonala (class és id attribútumok is megadhatók), reguláris kifejezés exclude: sikeres illesztésből kihagyja az erre illeszkedő részfákat Nem szép, de jól működik 18/ body>form#aspnetform>div#page>div\.yui-skin-sam velemenyolvasas>h1>a" exclude=""/> body>form#aspnetform>div#page>div\.yui-skin-sam velemenyolvasas>table>tr>td>div\.velemenyszoveg" exclude="(div.*|table.*|script|h3)"/> body>form#aspnetform>div#page>div\.yui-skin-sam velemenyolvasas>div>table>tr>td\.termekcontainer>table>tr>td\.padvaligntop elem vertline>table>tr" exclude=""/>
Felépítés - feldolgozás Tokenekre bontás Termék nevek, kategóriák (itt minden jel fontos, minimális hibajavítás) Vélemények szövege (itt lehet is és kell is hibákat javítani) mindenki más stílussal ír (pl: írásjelek környéki szóköz) elírások, „divatos” alternatív szavak („naon”, „vok”), rövidítések írásjelek nélküli mondatok Tokenek használata: Index építés, visszakeresés Hasonlóságok felismerése szövegekben Token: szó, szókapcsolat (szótövek) smiley terméknév 19/32
Index építés termék és kategória megnevezésből (exact) minden létező szókapcsolatot indexelünk „Dell Latitide D510”: „dell”, „latitude”, „d510” „dell latitude”, „latitude d510” „dell latitude d510” véleményszöveg tokenelésénél (exact) minden token 1-szer szerepel az adatbázisban (tanulás alapelemei) szótövezett alakot is és eredeti alakot is indexeljük 20/32
Adattárolási célok 21/32 kategóriákentitások hozzászólásoktokenek nyelv Típus „fényképező”, „LCD TV”, stb. Kifejezés „tartós akku”, „éles kép”, stb. Kulcs-érték Memória 4GB, Képátló 22”, stb. NévAdatlap entitás Szinte minden összefügg mindennel A kapcsolatok túlnyomó többsége n-n kapcsolat
Adattárolás – gráf szerkezet 22/32
Adattárolás - Tokenek Szótő alapú egyezésvizsgálat Előfordulások száma / dokumentumok száma TF/IDF számításhoz jó (mennyire meghatározó a token) Tanítás értékei is itt lesznek tárolva Tájolás (pozitív/negatív jelentés) Hasznosság (információtartalom) 23/32
Adattárolás - Adatlapok Kulcs-érték párok keresése Egy kulcshoz több érték tartozhat Összefésülés Ha több adatlapot találunk ugyanahhoz a termékhez Kereshetővé tétel Tárolás: Explicit: JSON (gyors megjelenítés) Implicit: gráf csúcsok és kapcsolatok (gyors keresés) 24/32
Adatlap explicit formában az értékek JSONArray-ban String-ek Implicit formából kinyerhető: pl. processzorok listája 26/32 { "Súly":["2,36 kg”], "Videokártya típusa":["Intel Graphics Media Accelerator 900 /GMA900 ”], "Modell":["Latitude D510 ”], "Memória típusa":["DDR2 ”], "Videokártya memóriája":["128 MB”], "Méret(magasság x szélesség x mélység)":["338*273*35mm mm”], "Gyártó":["Dell ”], "Note/net":["Notebook ”], "Processzor típusa":["Intel Celeron-M 380 ”], "Felbontás (X x Y)":["1024x768 pixel”], "Tipikus memória méret":["0,5 GB”], "Kijelzõ mérete":["15 inch”], "Órejel":["1600 MHz”], "Akkumulátor":["53 Wh”], "Operációs rendszer":["Windows, linux ”], "Hangkártya típusa":["AC97 (Soft Audio) / ICH3 ”] } Intel Celeron 220 Intel Celeron 900 Intel Celeron C900 Intel Celeron Dual-Core P4500 Intel Celeron Dual-Core T3100 Intel Celeron M Intel Celeron P4600 Intel Celeron T3000 Intel Celeron T3300 Intel Celeron T3500 Intel Celeron U3400 Intel Celeron ULV 743 Intel Celeron-M 380 Intel Celeron-M Dual Core Intel Centrino Atom N270 Intel Centrino Duo T4400 Intel Centrino Duo T4500 Intel Centrino Solo SU2300 Intel Centrino T4400 Intel Core 2 Duo Intel Core 2 Duo P4600 Intel Core 2 Duo P7570 Intel Core 2 Duo SU7300 Intel Core 2 Duo T6500 Intel Core 2 Duo T
Nehézségek Karakterkódolási problémák Crawler-ben javítani kellett (crawler4j) DB: feltöltő és letöltő stream kódolása is UTF-8 Hibás HTML-ek JTidy szépen megoldja a feladatot Időnként más a DOM fa, mint amit a böngésző készít (dinamikus generálás?) Feladatcsoportok közötti kommunikáció Részben függetlenek Egyelőre események mentén kommunikálnak 26/32
Nehézségek Tördelés (2. modul) Kategória indexelés Ismerni kell a nyelvet (szótövezés, megfelelő index használata) Nyelvfelismerés csak a 6. modulban történne Különböző nyelvű adatlapokat nem szabad összefésülni Nyelvfelismerés itt nem megbízható 27/24 Megoldások: Oldalról kivágott hasznos szövegrészletekre előzetes nyelvfelismerést futtatunk (kategóriáknak, adatlapoknak jó) A domain-okhoz megadunk nyelvet is
Érdekességek Adatlap „értelmezés” Tördelő megtalálja a DOM fa alapján a hasznos kódrészt HTML tag-ek és „:”-ok cseréje sortörésre Eredmény: soronként egy erősen összefüggő adatunk lesz (tábla cellái vagy kulcs:érték elemei külön-külön) A legelső elemet vesszük kulcsnak A többi elemet pedig értékeknek Meglepően pontos eredményeket ad 28/24 { "USB (db)": ["3"], "Optikai meghajtó": ["DVD-RW Lightscribe"], "Merevlemez kapacítása": ["320 GB"], "Kivitel": ["Laptop"], "Súly": ["2,49 kg"], "Videokártya típusa": ["Intel Graphics Media Accelerator 4500MHD"], "Memória mérete": ["3 GB"], "Kapcsolatok": ["Wi-Fi", "Bluetooth"], "Processzor órajele": ["2100 MHz"], "Processzor": ["Intel Centrino 2"], "Kijelzõ felbontása": ["1366x768"], "Csatlakozók": ["10/100mbps LAN, 56K modem, VGA monitor kimenet, Wireless LAN b/g (WiFi), USB 2.0 (3db), Express card kártyahely, HDMI csatlakozó, Bluetooth v2.1 + EDR"], "Processzor típusa": ["T6570"], "Kijelzõ mérete": ["15,6\""], "Kijelzõ típusa": ["TFT-LCD"], "Sebessége": ["5400rpm"], "Méret": ["37,18 x 24,96 x 2,75 mm"], "Hangkártya": ["Intel High Definition audio compliant audio chip"], "Akkumulátor": ["6 cellás"], "Operációs rendszer": ["Linux"] }
Érdekességek Keresőkifejezés „értelmezése” Entitásokat (terméknév) akarunk találni Minden lehetséges (egy- vagy többszavas) kifejezést előállítunk Entitás-indexben megkeressük a találatokat Csoportosítjuk a kereső kifejezés „kulcsa” alapján a találatokat Súlyozás: hasonlóság (Levenhstein-távolság) szavanként, illesztett szövegrész hasonlósága egyben, többszavas egyezésre bónusz [0..1] intervallum; 1=(majdnem) pontos egyezés Kategória-indexben hasonló módszerrel keresünk Legjobb kategóriákba tartozó entitások neveit ismét illesztjük a keresőkifejezéshez Csopotrosítás miatt egyszerre több különböző entitást is fel tudunk ismerni 29/32 „nokia classic samsung galaxy mobiltelefon” Best matching entity names: nokia: "Nokia 6700 Classic Gold Edition" nokia: "Nokia 3720 Classic" nokia: "Nokia 6303i Classic" samsung galaxy: "Samsung Galaxy Tab P GB" classic: "Nokia 6700 Classic Gold Edition" classic: "Nokia 3720 Classic" classic: "Nokia 6303i Classic" Best matching category names: nokia: "Nokia 2730 Classic" nokia: "Nokia Mobiltelefon" mobiltelefon: "Samsung Mobiltelefon" mobiltelefon: "Nokia Mobiltelefon" samsung: "Samsung Mobiltelefon" samsung: "Samsung I5700 Galaxy Spica" samsung: "Samsung i9000 Galaxy S" classic: "Nokia 2730 Classic" galaxy: "Samsung I5700 Galaxy Spica" galaxy: "Samsung i9000 Galaxy S" Nokia 3720 Classic Nokia 6303i Classic Nokia 6700 Classic Gold Edition Samsung Galaxy Tab P GB Nokia Mobiltelefon Samsung Mobiltelefon
Érdekességek „Egybeírtszavak” / „kül ön írt sza vak” N-gramok használatával (nyelvfüggően) lenyomatot veszünk a kommentekből Számoljuk, hogy mekkora eséllyel előzi meg vagy követi whitespace az adott n-gramot 2-5 gramokat használunk a prototípusban 30/24 „Nagyon megvagyok el égedve a telefonommal!Szerintemn agyon szuper:)” 40%/10%: " Nagyon m eg vagyok elégedve a telefonommal! Szerintem nagyon szuper:)" 40%/30%: " Nagyon m eg vagyokelégedve a telefonommal! Szerintem nagyon szuper:)" 40%/50%: " Nagyon m eg vagyokelégedve a telefonommal! Szerintem nagyon szuper:)" 40%/70%: " Nagyon m eg vagyokelégedve a telefonommal! Szerintem nagyon szuper:)" 40%/90%: " Nagyon m eg vagyokelégedve a telefonommal! Szerintem nagyon szuper:)" 45%/10%: " Nagyon meg vagyok elégedve a telefonommal! Szerintem nagyon szuper:)" 45%/30%: " Nagyon meg vagyokelégedve a telefonommal! Szerintem nagyon szuper:)" 45%/50%: " Nagyon meg vagyokelégedve a telefonommal! Szerintem nagyon szuper:)" 45%/70%: " Nagyon meg vagyokelégedve a telefonommal! Szerintem nagyon szuper:)" 45%/90%: " Nagyon meg vagyokelégedve a telefonommal! Szerintem nagyon szuper:)" 50%/10%: " Nagyon meg vagyok elégedve a telefonommal! Szerintem nagyon szuper:)" 50%/30%: " Nagyon meg vagyokelégedve a telefonommal! Szerintem nagyon szuper:)" 50%/50%: " Nagyon meg vagyokelégedve a telefonommal! Szerintem nagyon szuper:)" 50%/70%: " Nagyon meg vagyokelégedve a telefonommal! Szerintem nagyon szuper:)" 50%/90%: " Nagyon meg vagyokelégedve a telefonommal! Szerintem nagyon szuper:)" 55%/10%: " Nagyon meg vagyok elégedve a telefonommal! Szerintemnagyon szuper:)" 55%/30%: " Nagyon meg vagyokelégedve a telefonommal! Szerintemnagyon szuper:)" 55%/50%: " Nagyon meg vagyokelégedve a telefonommal! Szerintemnagyon szuper:)" 55%/70%: " Nagyon meg vagyokelégedve atelefonommal! Szerintemnagyon szuper:)" 55%/90%: " Nagyon meg vagyokelégedve atelefonommal! Szerintemnagyon szuper:)" 60%/10%: " Nagyon meg vagyok elégedve a telefonommal!Szerintemnagyon szuper:)" 60%/30%: " Nagyon meg vagyokelégedve a telefonommal!Szerintemnagyon szuper:)" 60%/50%: " Nagyon meg vagyokelégedve a telefonommal!Szerintemnagyon szuper:)" 60%/70%: " Nagyon meg vagyokelégedve atelefonommal!Szerintemnagyonszuper:)" 60%/90%: " Nagyon meg vagyokelégedve atelefonommal!Szerintemnagyonszuper:)"
Köszönöm a figyelmet! 31/32