Řešení pomocí #ChatGPT se jevilo jako první možnost. Nakonec se ukázalo jako zbytečně složité a stačilo použít „obyčejnou“ databázi a dotazování pomocí SQL. Díky našemu řešení klient ušetřil stovky hodin mravenčí práce a získal jednoduchou tabulku, kterou uměl použít každý.
Zadání znělo jasně: Potřeba vyhledat desítky kombinací slov v tisícovkách dokumentů a emailů. A to vše s omezeným rozpočtem.
Zprvu jsme se nechali strhnout módní vlnou a šli cestou ChatuGPT, co jiného by také člověka napadlo, když na něj AI buzzwordy skáčí už i z ledničky. Záhy jsme ale zjistili, že toto řešení připomíná spíše chytání sardinek sítí na žraloky a vydali se konzervativnější, a hlavně efektivnější, cestou.
“Při takovýchto projektech je potřeba předvídat, jaký typ výstupu bude pro klienta nejužitečnější. Někdy není potřeba hledat nejvíc trendy technologii, ale osvědčené řešení. V tomto případě tabulku coby rozcestník s výstupy.” František Kopřiva, Engagement manager projektu, Revolt BI
Obdrželi jsme přes 12 tisíc dokumentů a 2 tisíce emailových řetězců, kdy navíc poslední email je nahoře a všechny předchozí v citaci pod ním. Úkolem bylo vyhledat v nich zadaná klíčová slova tak, aby se co nejvíce zredukoval počet dokumentů, které je potřeba pročítat manuálně. Pro tyto účely jsme zvolili, možná až překvapivě, přímočaré řešení – nahrát veškerý text do databáze a nad ní se dotazovat pomocí SQL, konkrétně BigQuery nad Google Cloud Storage.
Naše cesta se neobešla bez komplikací. Některé PDF soubory nebyly strojově čitelné, protože se jednalo o skeny (image only). Ty bylo potřeba nejprve převést na prostý text pomocí optického rozpoznávání znaků. Více než tisícistránkové dokumenty pak bylo ještě potřeba rozdělit na menší díly.
Pro každý hledaný slovní řetězec existovala řada variant, např. pro slovní spojení o třech slovech, z nichž každé slovo má 2 další synonyma, existuje 27 možných kombinací. Navíc jsme předem nedokázali odhadnout, kolik výskytů najdeme, tedy zda se nám vůbec podaří dostatečně snížit množství dokumentů k přečtení. Připravili jsme tedy pro každý slovní řetězec dvě úrovně – obecnou, kdy jsme hledali výskyt alespoň jednoho ze synonym, a detailní, kdy jsme hledali přesnou shodu.
Díky obecné rovině jsme v některých případech odhalili “zavádějící stopu”, kdy se žádné ze synonym v dokumentech vůbec nevyskytuje. V jiných případech bylo naopak shod příliš mnoho (typicky stovky). Zde přišla na řadu detailní úroveň, kdy už shod bylo řádově méně a dal se lépe odhadnout kontext.
Finálním výstupem se na základě tohoto řešení stala jednoduchá tabulka, v níž byl u každé varianty slovního řetězce uvedený počet nalezených shod a seznam konkrétních dokumentů k prozkoumání. Díky převedení všech dokumentů na prostý text se pak přesná pozice slova v konkrétním dokumentu dala najít už klasicky přes fulltextové vyhledávání.
Naše řešení klientovi ušetřilo stovky hodin mravenčí práce bez jistého výsledku.