Jednou z funkcí, kterou jsme v uplynulém roce vylepšili pomocí jazykových modelů, byla detekce času v dotazu. Pojďme se podívat na to, proč bychom to měli umět, jaká to má úskalí a jak jsme si s tím poradili.
Motivace je jednoduchá. Pokud uživatel položí např. dotaz „počasí na víkend“, chce si pravděpodobně prohlédnout předpověď na nejbližší víkend. Nebudou ho zajímat náhodné webové stránky, které obsahují slova počasí a víkend. Podobně to funguje i u jízdních řádů, slevových letáků nebo třeba horoskopů. Potřebujeme také rozpoznat, že „31. 1.“ a „31. ledna“ je totéž. Pokud v dotazu uživatel napsal první variantu a na webové stránce je ta druhá, musíme mu ji najít. A pokud začátkem února napíše „včera“, chceme ji najít také. Proto potřebujeme co nejpřesněji poznat, zda uživatel do dotazu napsal časový údaj, a případně jaký.
Jak na to? Vezmeme si kalendář, hodiny a vypíšeme si pár možných formátů, s tečkou, mezerou, bez nich, rozklíčujeme relativní zápis času vůči dnešku, dohodneme se, od kdy do kdy trvá odpoledne, a když to najdeme v dotazu, víme, o jaké datum a čas jde. Vyřešeno? Ne tak úplně.
Pak totiž přijdou následující dotazy:
- poliklinika ostrava 17. listopadu
- lékárna Dr.Max 28. října
- do kdy platí 2000 Kč
- hecht 2026
- když duben přichází
- robinson a pátek
V žádném z nich ve skutečnosti časový údaj není, i když to tak pro stroj může vypadat.
Takže co s tím? Ideální řešení nabízejí jazykové modely. Požádali jsme anotátory, aby ve velké sadě dotazů z vyhledávání na Seznamu označili všechny časové údaje a řekli nám, o jaký časový úsek se přesně jednalo. K tomu anotátor potřebuje vědět, kdy byl dotaz položen, jinak by nemohl správně určit, co je to „zítra“.
Jazykový model doučený na těchto datech zohledňuje kontext celého dotazu. Díky tomu pak snadno rozhodne, že v dotazu „TV Seznam dnes“ časový údaj je, zatímco v dotazu „Dnes neumírej“ není. Pak je stále ještě potřeba trocha toho poctivého kódování s regulárními výrazy k tomu, abychom poznali, o který konkrétní čas se jednalo. K tomu jsme částečně využili naši starou pravidlovou detekci času.
Víte, že specialisté z Vyhledávání vyvinuli technologii, která dokáže rozeznat související slovní spojení? Díky tomu při nastavování kampaní v Skliku ušetříte čas, a navíc zvýšíte jejich zásah.
Na závěr trocha čísel. Nově umíme časový údaj správně určit v 99,9 % dotazů. To vypadá jako zázrak, že? Ale je potřeba si uvědomit, že majoritou ve vyhledávání jsou dotazy bez časových údajů, kde správně žádný nenajdeme. Proto tu máme dvě relevantnější čísla. Ze všech dotazů, které podle anotovaných dat obsahují časový údaj, ho správně poznáme v 95 % případů. (Před nasazením to bylo 72 %.) A ze všech případů, kdy v dotazu detekujeme časový údaj, tam tento údaj opravdu byl v 98 % i podle anotací. (Dříve to bylo v 88 %.) Dokonalé to tedy není, ale jsme blízko.
Za tým Vyhledávání Martina Pomikálková