Distanční opora předmětu: Databázové systémy Tématický blok č. 7: Fulltextové vyhledávání Autor: RNDr. Jan Lánský, Ph.D. Obsah kapitoly 1 Fulltextové vyhledávání 2 Porozumění textu 3 Přesnost a úplnost 4 Kritérium predikce a kritérium maxima 5 Předzpracování 6. Fulltextové vyhledávání v SQL Serveru Studijní cíle Znalost základních pojmů a problémů v oblasti fulltextového vyhledávání. Schopnost vytvořit fulltextový index v SQL Serveru a položit fulltextový dotaz.
Čas potřebný ke studiu 2 - 6 hodiny na prostudování výukových textů + zodpovězení otázek k rekapitulaci 1 - 4 hodiny na vypracování modelových úloh na PC + úlohy POT 4 1 - 2 hodiny na praktické zopakování učiva na PC ( v jiný den) 30 min - 1 hodina na (znovu)zodpovězení otázek k rekapitulaci (v jiný den) Časy jsou hodně individuální a jsou závislé na míře znalostí z oblasti databázových systémů získaných během bakalářského studia. Úvod V tomto bloku probereme následující témata. Seznámíme se principy dotazování nad množinou textových dokumentů a odlišnostmi oproti dotazování nad tabulkami v SQL databázi. Seznámíme se s problémy, kterém musíme řešit při zpracování textového dokumentu pro potřeby fulltextového vyhledávání. Vysvětlíme si, jak se měří kvalita odpovědi získané fulltextovým vyhledáváním (pomocí koeficientů přesnosti a úplnosti). Vysvětlíme si kritérium predikce a kritérium maxima, která zohledňují, že dotaz vytváří člověk. Naučíme se vytvářet fulltextový index nad textovým sloupcem tabulky v SQL Serveru. Naučíme se tvořit fulltextové dotazy s využitím tohoto indexu.
Výkladová část Vysvětlivky Červený text – Porušením nebo opomenutím takto označených pravidel vznikají těžko odladitelné chyby (zejména pro začínající programátory). Modrý text – Doporučení jak programovat v praxi. Často prevence závažných chyb. 1 Fulltextové vyhledávání V předchozích tématických blokách jsme předpokládaly, že data jsou v daném, předem definovaném formátu (SQL tabulky nebo XML dokumenty). Sloupce v SQL tabulkách nebo elementy v XML dokumentech mají předen definovaný význam (například cena zboží, jméno zákazníka). Protikladem těchto formátů jsou volně psané texty, ve kterých může být stejná skutečnost popsána více autory rozdílně (například použitím synonym, rozdílnou stavbou věty). Při fulltextové vyhledávání hledáme v množině dokumentů takové dokumenty, ve kterých se vyskytuje námi požadované slovo nebo slova. Můžeme hledat i v rámci jednoho dokumentu pozici nebo pozice výskytů daného slova či slov. Při fulltextové vyhledávání nemůžeme využít vnitřní struktury prohledávaného dokumentu. Fulltextového vyhledávání v rámci jednoho dokumentu využívají například textové editory. Fulltextově prohledávat větší množství souborů nám umožňují i operační systémy. Nejčastěji se s fulltextovým vyhledáváním setkáváme v prostředí internetu, při vyhledávání webové stránky pomocí webového vyhledávače (například google.com nebo seznam.cz). Databázové systémy (včetně SQL Serveru) mají obvykle své rozšíření pro práci s textovými daty. Sloupec tabulky může být datového typu, který umožní uchovat celý textový dokument. V takto uložených textových dokumentech lze fulltextově vyhledávat. Přestože v oblasti fulltextového vyhledávání v databázových systémech existuje standard SQL/MM 2 (SQL Multimedia and Application Packages Part 2: Full-Text), nebývá dodržován. Fulltextové vyhledávání v jednotlivých databázových systémech používá rozdílnou syntax a skript napsaný pro jeden databázový systém není přenositelný na jiný databázový systém. V tomto tématickém bloku budeme probírat syntax SQL Serveru 2005. V případě fulltextového vyhledávání existuje mnoho rozdílných přístupů, ze kterých nelze vybrat objektivně nejlepší řešení. I samotné zhodnocení, zda nalezené výsledky odpovídají zadání dotazu, je subjektivním názorem konkrétního uživatele. Je téměř nemožné (nad rozsáhlejší množinou neznámých dokumentů) zformulovat dotaz, který by nám vrátil všechny dokumenty, které nás zajímají a zároveň nevrátil žádné jiné. Obvykle je nám vrácena pouze část dokumentů, které nás zajímají (jsou relevantní) a zároveň s nimi jsou i vráceny dokumenty, které jsou pro nás nezajímavé (nerelevantní). Některé z důvodů (synonyma, homonyma, hierarchie) tohoto jevu si vysvětlíme v kapitole 2. O vráceném dokumentu bývá také obtížné rozhodnout, zda našemu dotazu vyhovuje či ne. Lepší je definovat míru shody (například v procentech) nalezeného dokumentu s položeným
dotazem. Dokument se shodou 100 % je zcela relevantní, dokument se shodou 0 % zcela nerelevantní. Nalezené dokumenty je vhodné uživateli předkládat setříděné sestupně podle klesající míry relevance dokumentu. V optimálním případě si uživatel prohlédne jen několik nejrelevantnějších dokumentů a zbytek odpovědi nebude mít zájem. 2 Porozumění textu Text je posloupností slov v přirozeném jazyce. Každé slovo zastupuje pro autora nějakou představu, kterou v něm slovo vyvolává – význam slova. Tyto představy reprezentují reálné předměty. Mezi slovy a významy bohužel neexistuje vzájemně jednoznačné zobrazení. Více různých slov může mít pro autora shodný význam, slova jsou navzájem synonymy, příklady nalezneme na slajdu č. 7. Jedno slovo naopak může mít pro autora několik různých významů. Tento vztah nazýváme homonymie a příklad homonym nalezneme na slajdu č. 8. Jeden tvar slova může mít více významů, které jsou gramatickými tvary od různých slov, někdy se jejich základní tvary liší i ve slovním druhu. Příklady takových slov nalezneme na slajdu č. 9. Významy slov se také mohou překrývat. Slova mohou být uspořádána v různých hierarchiích, kdy slovem nadřazeným můžeme zastoupit slovo podřazené. Slovo může být také zastoupeno nějakou jeho asociací. Příklady hierarchie a asociace najdeme na slajdu č. 10. Přiřazení významu slovu je závislé i na osobě, která text píše či čte. Dva lidé mohou jednomu slovu přikládat částečně nebo zcela rozdílný význam. Dva lidé si i pod stejným významem mohou představit jiný konkrétní předmět nebo množinu předmětů. Například v případě slov označujících příbuzenské vztahy (matka, otec, bratr, …) si každý z nich může představit osoby, které jsou v daném vztahu s ním samotným. Po přečtení stejného textu může nastat situace, že dva různí čtenáři nemusí přečtením získat stejnou informaci jako autor textu. Získaná informace se mlže lišit i mezi čtenáři navzájem. Homonymie a nejednoznačnosti narůstají při přechodu od slov k větám. Vlastní jména slovesného původu stojící na začátku věty mohou být zaměněny se souvětím o dvou větách (příklady na slajdu č. 12 nahoře). Problém dělá i spojka spojující dva předměty ve větě, pokud je první z předmětu rozvitý (příklady na slajdu č. 12 veprostřed). Někdy z věty nejde poznat, které slovo je podmětem a které předmětem věty (příklad na slajdu č. 12 dole). Příklady vět s několika možnými, zcela odlišnými, významy nalezneme na slajdech č. 13 (pro češtinu) a č. 14 (pro angličtinu). 3 Přesnost a úplnost Mějme dva různé fulltextové vyhledávací nástroje (například dva různé webové vyhledávače nebo dva dokumentografické informační systémy DIS). Jakým způsobem můžeme porovnat kvalitu jejich práce (nalezených odpovědí)? Jedna z možných situací je znázorněna na obrázku na slajdu č. 19. Celý obrázek (obdélník) znázorňuje dokumenty v databázi. Část dokumentů (elipsa vlevo dole) je nalezena a vrácena systémem DIS1, část dokumentů (elipsa vpravo nahoře) systémem DIS2. Relevantní dokumenty vzhledem k položenému dotazu jsou v elipse uprostřed. Průnik množin vrácených dokumentů oběma systémy je prázdný, přesto každý ze systému nalezl část relevantních dokumentů.
Další problém spočívá v různém hodnocení relevance dokumentu vzhledem k dotazu dvojicí různých tazatelů. Na obrázku na slajdu č. 20 je množina vrácených dokumentů (elipsa dole). Množiny relevantní dokumenty jsou pro každého z tazatelů rozdílné (elipsa nahoře a elipsa vpravo). Z vrácených dokumentů každý z uživatelů označí za relevantní jiné dokumenty. Pro měření kvality nalezeného výsledku (množiny dokumentů) pro daný dotaz se využívají dva koeficienty: přesnost a úplnost (slajd č. 21). Přesnost (Precision) má zkratku P a je definována jako podíl počtu vrácených relevantních dokumentů (Nvr) ku počtu všech vrácených dokumentů (Nv). Jedná se o pravděpodobnost, že dokument zařazený v odpovědi je relevantní. Úplnost (Recall) má zkratku R a je definována jako podíl počtu vrácených relevantních dokumentů (Nvr) k počtu relevantních dokumentů (Nr). Jedná se o pravděpodobnost, že relevantní dokument je součástí odpovědi. Koeficienty Nvr a Nr jsou závislé na subjektivním názoru tazatele o relevanci jednotlivých dokumentů. Přesnost a úplnost je zobrazena v grafu (slajd č. 23), kde přesnost je na ose x, úplnost na ose y. Přesnost i úplnost mohou nabývat hodnot z intervalu [0,1]. V ideálním případě by v odpovědi byly zařazeny právě a pouze všechny relevantní dokumenty, přesnost i úplnost by nabývala hodnot 1 (v grafu nahoře vpravo). V běžném případě odpověď na první verzi dotazu nebývá ani úplná, ani přesná (v grafu dole vlevo). Na obrázku na slajdu č. 24 je zobrazeno jak probíhá postupné ladění dotazu s cílem vylepšit jeho přesnost a úplnost. Optima lze teoreticky dosáhnout, ale v praktických případech to možné nebývá. V praxi jsou koeficienty přesnosti a úplnosti na sobě nepřímo závislé, jejich součin je konstanta výrazně menší než jedna. Pokud se snažíme zvýšit přesnost, snížíme počet získaných relevantních dokumentů. Pokud se snažíme zvýšit úplnost, získáme větší podíl nerelevantních dokumentů. Situace je graficky znázorněna na obrázku na slajdu č. 25. 4 Kritérium predikce a kritérium maxima Při formulaci dotazů je potřebné uhádnout, které termíny (slova) byly autorem dokumentu použity pro vyjádření dané myšlenky. Problém může způsobit použití synonym, které tazatele při formulaci dotazu nemusí ani napadnout, překrývání významů slov, či opisy jedné situace jinými slovy. Kritérium predikce se zabývá zajištěním shody při výběru termínu použitých v dotazu a v hledaném dokumentu. Částečným řešením je zařazení tezauru, který obsahuje hierarchie slov a jejích významů, synonyma slov a asociace mezi slovy. Tazatel může tezaurus využít při formulaci dotazů. Při ladění dotazů mají uživatelé tendenci se chovat konzervativně. V dotazu zůstávají ty části, které uživatele napadly na začátku a mění se jen ty části, které uživatele napadly později a podle uživatele pouze zpřesňují dotaz, ale v případě nekvalitního výsledku nemají šanci ho vylepšit. Je vhodné uživateli pomoci s odstraňováním části dotazu, které vedou k nerelevantním dokumentům a naopak mu navrhnout vylepšení dotazu, které k relevantním dokumentům vedou. Relevanci najitých dokumentů musí uživatel sám posuzovat.
Kritérium maxima říká, že uživatel je schopen a ochoten si prohlédnout 20-50 vrácených dokumentů. Větší počet vrácených dokumentů bude pravděpodobně nevyužit. Je třeba dokumenty řadit sestupně podle míry předpokládané relevance a v tomto pořadí je předkládat uživateli. V důsledku kritéria maxima se uživatel obvykle snaží zvýšit přesnost, najít malé množství dokumentů, mezi kterými se téměř nevyskytují nerelevantní dokumenty. V některých oblastech je potřeba kromě přesnosti i úplnost (například právo). 5 Předzpracování Pro fulltextové vyhledávání se používají dva modely: boolský a vektorový. V jednodušším boolském modelu jsou dotazy tvořeny ve formě boolských formulí. Formule se skládají z hledaných slov, která jsou spojena logickými spojkami (konjunkce, disjunkce, negace). Nejčastěji uživatelé hledají konjunkci zadaných slov. Na slajdu č. 32 vidíme způsob předzpracování dokumentů, než jsou zařazeny do databáze. První fáze je filtrace, při které se z dokumentu získá čistý text odstraněním formátovacích značek. Následuje Desambiguace, při které se podle kontextu určí význam jednotlivých slov. Následuje lematizace, při které se určí základní tvar slova. V další fázi se vytvoří index, který bude použitý při vyhledání konkrétních dotazů. Tomuto indexu se říká invertovaný seznam a obsahuje ke každému slovu (přesněji lematu) seznam dokumentů, ve kterých se dané slovo nachází. Můžou zde být i doplňkové informace o přesných pozicích výskytu slova v dokumentu. 6. Fulltextové vyhledávání v SQL Serveru Pro uložení textového dokumentu do tabulky v databázovém systému je třeba použít datové typy pro práci s rozměrnými daty, normou SQL nazývané jako Large Objects (LOB). V případě SQL Serveru můžeme použít datový typ Text (velikost až 2 GB) pro texty v angličtině nebo NText (velikost až 1 GB) pro texty v národní znakové sadě. Pro kratší texty lze použít i základní datové typy char, nchar, varchar a nvarchar. Pro vyhledávání v textovém sloupci tabulky je nutno vytvořit fulltextový index, plná syntax příkazu je uvedena na slajdu č. 39. Z povinných údajů je nutné zadat jméno tabulky a sloupec uchovávajícího textový obsah a v klauzuli KEY INDEX název existujícího unikátního jednosloupcového indexu. Sloupec, nad kterým je tento unikátní index vyroben musí mít integritní omezení NOT NULL. V nepovinné klauzuli LANGUAGE lze zvolit jazyk textového indexu. V nepovinné klauzuli WITH CHANGE_TRACKING se určuje způsob aktualizace indexu. Při volbě AUTO se bude index aktualizovat zároveň s aktualizací textových dat, což může při časté změně dat značně zpomalovat práci databázového sytému. Při volbě OFF se aktualizace neprovádí (defaultní nastavení). Při volbě MANUAL se vytváří žurnál změn v datech, jehož využití pro aktualizaci indexu lze provést ručně nebo pravidelně jednou za určitý časový interval. Na slajdu č. 42 vidíme příklad vytvoření textového indexu na tabulce JobCandidate. Nejprve na sloupci JobCandidateID vytvoříme unikátní index ui_ukJobCand. Tento sloupec obsahuje integritní omezení NOT NULL. Následně vytvoříme fulltextový katalog ft.
Tento katalog bude automaticky použit pro uchovávání všech fulltextových indexů, které vytvoříme. Konečně následuje vlastní vytvoření fulltextového indexu na sloupci Resume tabulky JobCandidate s využitím unikátního indexu ui_ukJobCand. Pro dotazování nad fulltextovým indexem lze použít predikát CONTAINS (slajd č. 44), který vyhodnocuje, zda hodnota v daném sloupci obsahuje slova v požadovaném vzájemném vztahu. Operátor má dva povinné parametry a jeden parametr nepovinný. Prvním parametrem je sloupec textového datového typu. Druhým parametrem je vlastní dotaz (uzavřený v apostrofech). Dotaz může obsahovat jednotlivá hledaná slova a definovat požadované vztahy mezi nimi pomocí operátorů. Třetí parametr je jazyk textu a tento parametr je nepovinný. Seznam binárních fulltextových operátorů je na slajdu č. 45. Binární operátory lze psát slovem nebo symbolem. Můžeme požadovat přítomnost obou operandu (operátor AND respektive &), přítomnost alespoň jednoho z operandů (operátor OR respektive |), přítomnost prvního operandu a nepřítomnost druhého operandu (operátor AND NOT respektive &!), přítomnost obou operandů blízko sebe v textu (operátor NEAR respektive ~). Dalším operátorem je FORMSOF (slajd č. 46), který se syntakticky chová spíše jako funkce. Své operandy má uzavřeny v kulatých závorkách a oddělené čárkou. Prvním operandem je buďto INFLECTION pro hledání všech slovních tvarů nebo THESAURUS pro hledání slov s podobným významem. Druhým parametrem je slovo uzavřené v uvozovkách, pro které se první parametr vyhodnocuje. Na následujícím příkladě vybíráme z tabulky TextTab ty řádky, které obsahují ve sloupci article text s výskytem slova game nebo slovo s podobným významem a zároveň neobsahuje slovo work. SELECT * FROM TextTab WHERE CONTAINS(article, 'FORMSOF(THESAURUS, "game") AND NOT work')
Ze slova můžeme uvést pouze jeho začátek a poté použít operátor hvězdičky *. Budou se hledat všechna slova s daným prefixem. Operátor ISABOUT (slajd č. 46), má své operandy v závorce, takže na první pohled vypadá jako funkce. Jednotlivé operandy jsou slova (bez použití uvozovek nebo apostrofů) následované klíčovým slovem WEIGHT a v závorce uzavřenou váhou slova v dotazu. Váha slova může nabývat hodnot z intervalu [0,1]. Čím je hodnota větší, tím je větší důležitost daného slova v dotazu. Operandů může být libovolné množství, jsou vzájemně oddělené čárkami. Operátor ISABOUT je vhodný pro dotazy s využitím CONTAINSTABLE. Funkce CONTAINSTABLE (slajd č. 48) se používá pro vytváření fulltextových dotazů, jejichž výsledky mají obsahovat číselné vyjádření relevance textu s dotazem. Parametry funkce jsou tabulka, textový sloupec této tabulky a dotaz. Nepovinně může následovat jazyk textu a omezení na daný počet nejvíce relevantních odpovědí. Funkce vrací tabulku hodnot shody textového sloupce původní tabulky s dotazem. Tabulka vrácená výsledkem dotazu obsahuje dva sloupce KEY a RANK. Sloupec KEY obsahuje identifikátor řádku (dle unikátního klíče použitého při tvorbě fulltextového indexu) Sloupec RANK je ohodnocení relevance textového sloupce s dotazem (čím vyšší hodnota, tím relevantnější dokument).
Na slajdu č. 49 je kostra vnitřního spojení původní tabulky s tabulkou vytvořenou funkcí CONTAINSTABLE. Spojení probíhá přes unikátní index, který byl použit při tvorbě fulltextového indexu. Na slajdu č. 50 vidíme použití této kostry k vytvoření skutečného dotazu, pro formulaci dotazu využíváme operátor ISABOUT. Na slajdu č. 51 vidíme využití kostry k vytvoření jiného dotazu s využitím operátorů OR a NEAR. Vráceno bude pouze 10 nejrelevantnějších odpovědí (číslo 10 je pro zvýraznění na slajdu podtrženo). Klíčové pojmy fulltextové vyhledávání synonyma, homonyma, hierarchie, asociace přesnost a úplnost kritérium predikce, kritérium maxima tezaurus boolský model invertovaný seznam CONTAINS, CONTAINSTABLE FORMSOF, ISABOUT Otázky k rekapitulaci Upozornění: odpovědi na některé zde uvedené otázky nelze najít ve studijním textu tohoto tématického bloku. Lze je získat vlastním experimentováním se zdrojovými kódy nebo studiem doporučené literatury. V jakých reálných aplikacích se můžeme setkat s fulltextovým vyhledáváním? Jaké jsou hlavní rozdíly mezi fulltextovým vyhledáváním a pokládáním dotazů v SQL databázi? V přirozených jazykách neexistuje jednoznačné zobrazení mezi slovy a jejich významy. Uveďte příklady dokládající toto tvrzení. Jak tato skutečnost ovlivňuje zpracování dokumentu pro fulltextové vyhledávání? Definujte přesnost a úplnost, uveďte i příslušné vzorce. Jakých hodnot tyto koeficienty nabývají a co tyto hodnoty říkají o kvalitě odpovědi? Je nějaký vzájemný vztah mezi přesností a úplností v praxi? Vysvětlete kritérium predikce a jeho důsledky. Vysvětlete kritérium maxima a jeho důsledky. Popište jak probíhá předzpracování dokumentu pro fulltextové vyhledávání. Jak se vytváří fulltextový index v SQL Serveru? Uveďte posloupnost příkazů a omezující podmínky. Jakou klauzuli lze použít pro fulltextové vyhledávání v SQL Serveru? Jaké operátory lze použít pro fulltextové vyhledávání v SQL Serveru? Podrobně vysvětlete operátor FROMSOF. Jakou funkci lze použít pro vytváření fulltextových dotazů, pokud chceme znát i míru relevance najitých dokumentů vzhledem k dotazu? Podrobně vysvětlete operátor ISABOUT. Své odpovědi zdůvodněte. Můžete přidat i syntaktické zápisy tam, kde je to vhodné.
Doporučené příklady k naprogramování 1. V SQL Serveru navrhněte tabulku novinových článků získaných z internetu. Napište SQL skript, které tyto tabulky vytvoří. Pokud jste vytvářeli tabulky v grafickém rozhraní, lze skript získat volbou (Skript table as). 2. Vytvořte SQL skript, který tabulku naplní alespoň 25 řádky s reálnými daty. 3. Vytvořte alespoň 5 zajímavých fulltextových dotazů nad touto tabulkou. Každý z v tomto bloku probíraných operátorů, funkcí či klauzulí využijte alespoň jednou. Do komentářů uveďte i zadání jednotlivých dotazů. Studijní literatura [1] Kopecký: Výběr ze slajdů k 6. přednášce z předmětu Databázové aplikace (DBI026) vyučovaného na MFF UK. (v tomto tématickém bloku označované jako „slajdy“) https://is.vsfs.cz/auth/el/6410/leto2010/EQ_N_DS/um/DS7.ppt [2] Pokorný, Snášel, Kopecký: Dokumentografické informační systémy. Karolinum, UK Praha, 2005. [3] Manning, Raghavan, Schütze: Introduction to Information Retrieval, Cambridge University Press, 2008. [4] Webové stránky předmětu Dokumentografické informační systémy (DBI010) vyučovaného na MFF UK. http://www.ms.mff.cuni.cz/~kopecky/vyuka/dis/