...
poměrně značné množství článků
...
To jsme se moc od "velkém množství českého textu" neposunuli. Kolik to je, 10k, 10M, 10G clanku?
Řazení výsledků... ta logika už může být poměrně komplikovaná, protože počet shod v příslušném článku nemusí nutně znamenat, že se jedná o nejrelevantnější výsledek. Dalo by se do toho zařadit s určitou váhou i četnost zobrazení takových článků za např. poslední tři měsíce apod.
Textova relevance je trochu slozitejsi obor nez "pocet shod". Asi bych nedoporucil to vymyslet/programovat, ale nechal to na pouzitem vyhledavaci, Elasticsearch napriklad pouziva variantu
BM25.
Pokud mate dalsi atributy (jako treba cetnost zobrazeni clanku), tim lepe. Musite nicmene vymyslet formuli, jak z vektoru atributu, vcetne textove relevance, vydestilujete radici kriterium. Typicky postup je:
dotaz->vyhledavaci stroj vrati N matchujicich dokumentu->pretrideni N dokumentu->vyber top K, ktere se zobrazi.
Velke vyhledavace pouzivaji na onu formuli strojove uceni, da se nicmene zacit i s z prstu vycucanym vzorcem typu:
("textove score"+(log("pocet zobrazeni"))
Nerozumím až tak návrhu "Zvazil bych vygenerovani embdedingu z dokumentu/dotazu pomoci jazykoveho modelu a pouziti podobnostniho hledani."
1. Predpocitate
embedding pro dokumenty pomoci jazykoveho modelu, aka cerne skrinky, ktera z textu v cestine vyrobi vektor cisel pevne delky (napriklad 1024 8bit cisel).
2. Pomoci stejneho modelu spocitate embedding/vektor dotazu
3. Podobnostnim vyhledavanim vyhledate dokumenty nejpodobnejsi vektoru dotazu. Podobnosti se typicky mysli kosinova podobnost.
Pro pocitani vektoru, mate-li nekonecne zdroje a spoustu casu, lze pouzit
OpenAI embedings jako sluzbu. Na vlastnim HW pro cestinu napriklad
Small-E-Czech.
Jako podobnostni databazi muzu doporucit
Faiss. Ale i dnesni nektere relacni databaze umi podobnostni hledani.
Nicmene, kdyz odhlednu od toho, co pisu, doporucil bych vyzkouset zminovany PostgreSQL/Elasticsearch se slovnikem typu ispell. Pokud to bude stacit, konec pribehu. Pokud ne, viz vyse
.