Update Feldolgozás
@@ -44,3 +44,104 @@ A content pedig minden olyan tartalom ami a keresések megválaszolásához szü
|
|||||||
A chunkok ebből a fa szerkezetből épülnek fel, ahogy bejárjuk a fát minden context-et összefűzünk egészen addig amíg nem érkezünk egy olyan levélhez ami content-et tartalmaz. Ezáltal a végén kapunk egy olyan egybefüggő szöveget amiben szerkezet szerint a kontextus-ban szerepel minden content-ig vezető információ, és a contentben összefűzve az kereshető rész áll elő. A legvégén pedig eltávolítunk minden HMTL/XML elemet a szövegből.
|
A chunkok ebből a fa szerkezetből épülnek fel, ahogy bejárjuk a fát minden context-et összefűzünk egészen addig amíg nem érkezünk egy olyan levélhez ami content-et tartalmaz. Ezáltal a végén kapunk egy olyan egybefüggő szöveget amiben szerkezet szerint a kontextus-ban szerepel minden content-ig vezető információ, és a contentben összefűzve az kereshető rész áll elő. A legvégén pedig eltávolítunk minden HMTL/XML elemet a szövegből.
|
||||||
|
|
||||||
A `jhId` (NJT-n való anchor linkek előállításához szükséges) hozzárendelése a chunkokhoz egyszerűen a fában való felfele kereséssel lett megoldva, így a chunkhoz legközelebbi `jhId`-t tudjuk meghatározni.
|
A `jhId` (NJT-n való anchor linkek előállításához szükséges) hozzárendelése a chunkokhoz egyszerűen a fában való felfele kereséssel lett megoldva, így a chunkhoz legközelebbi `jhId`-t tudjuk meghatározni.
|
||||||
|
|
||||||
|
|
||||||
|
## Keresési találatok szövegkiemelése
|
||||||
|
|
||||||
|
A beérkező kérést feldaraboljuk szavakra és eltávolítunk belőle minden nem a magyar ABC-ben szereplő karaktert.
|
||||||
|
Ezeknek a szavaknak megkeressük a szótöveit a Hunspell nevű könyvtárral, majd ezeknek az összegyűjtött szavaknak és szótöveknek megkeressük a szinonímáit egy Thesaurus nevű könyvtárral és ezeket is belerakjuk a lehetséges kiemelendő szavak közé.
|
||||||
|
|
||||||
|
A kiemelt szavakat szűrjük egy előre megírt listával ami tartalmazza a kötőszavakat/kérdőszavakat és egyéb szavakat amit nem szeretnénk semmilyen formában látni a kiemelés során.
|
||||||
|
|
||||||
|
A folyamat végén pedig megkeressük a szavakat a keresési eredmények között és a szövegben megtalált szavakat kiegészítjük hogy teljes szavakat emeljük ki. (pl adat -> adatok, adatai)
|
||||||
|
|
||||||
|
|
||||||
|
## Metadatás keresés évszámos és sorszámos keresések
|
||||||
|
|
||||||
|
A keresés több stratégiával is működik, ha a beérkező kérést felismerjük valamilyen minta szerint akkor tudunk a törvények meta-adatai között is keresni.
|
||||||
|
Jelenleg az alábbi stratégiák támogatottak.
|
||||||
|
|
||||||
|
#### Évszámos és Sorszámos keresés
|
||||||
|
Évszámot és sorszámot is akkor tudunk így is keresni különböző formátumokban.
|
||||||
|
- A következő formátumok támogatottak:
|
||||||
|
- `2016. évi XXXIII. törvény`
|
||||||
|
- `2016 / 33`
|
||||||
|
- `2016. 33.`
|
||||||
|
- `2016. XXXIII.`
|
||||||
|
- `2016 33`
|
||||||
|
- a fentieknek akár fordított formában is, pl: `33 2016.`
|
||||||
|
|
||||||
|
Ha nem sikerül jól beazonosítani hogy melyik rész az évszám vagy a sorszám, akkor mindkét verzióban megpróbáljuk.
|
||||||
|
|
||||||
|
#### Évszámos keresés
|
||||||
|
Ha évszámot adunk meg akkor a jogszabályok évszámában keresünk.
|
||||||
|
|
||||||
|
#### Sorszámos keresés
|
||||||
|
Ha számot vagy római számot kapunk, akkor a jogszabályok sorszámaiban keresünk.
|
||||||
|
|
||||||
|
|
||||||
|
## Keresési kifejezés/kérdés kiegészítése
|
||||||
|
|
||||||
|
Lehetőségünk van arra hogy mielőtt a beérkező keresést módosítsuk a jobb találtok érdekében, ez a beérkező kérés elején egy előre meghatározott gyűjteményből tudunk szöveget kicserélni. Így képesek vagyunk olyan kereséseket is finomhangolni ami nem feltétlenül szerepel a jogszabályban és nehezen lenne kereshető. (pl: Mi a chipsadó? -> Mi a Népegészségügyi termékadó?)
|
||||||
|
|
||||||
|
Továbbá a chunk építés során gyűjtünk egy listát ami alias-okat tartalmaz, ezt a "továbbiakban" különböző variációinak felismeréséből építjük fel.
|
||||||
|
(pl. NEBEK -> Nemzetközi Bűnügyi Együttműködési Központ)
|
||||||
|
|
||||||
|
|
||||||
|
# Vektor keresés
|
||||||
|
## Embedding Modellek
|
||||||
|
|
||||||
|
- Llama 3.2 72B
|
||||||
|
- Backend: Ollama
|
||||||
|
- Tapasztalat: az egyes embeddingek vektorai túl hasonlóak, ezért nem alkalmasak keresésre
|
||||||
|
- gte-Qwen2-7B-instruct
|
||||||
|
- Backend: Ollama
|
||||||
|
- Tapasztalat:
|
||||||
|
Ez a modell specifikusan embedding célokra van tanítva, ezért a generált vektorok között nagyobb a távolság, jól kereshető.
|
||||||
|
A kisebb paraméterszám ellenére is jobb találatokat ad, mint a Llama3.2 modell.
|
||||||
|
Ezen felül sokkal gyorsabb a vektorok generálása, az előzetes embedding generálás és a felhasználó keresések során egyaránt.
|
||||||
|
- bge-multilingual-gemma2
|
||||||
|
- Backend: egyedi (SentenceTransformer)
|
||||||
|
- Tapasztalat:
|
||||||
|
A Qwen embedding modellhez hasonlóan szintén jól összehasonlítható vektorokat generál.
|
||||||
|
- nv-embed-v2
|
||||||
|
- backend: egyedi (SentenceTransformer)
|
||||||
|
- Tapasztalat:
|
||||||
|
- nem generál megfelelő vektorokat 16bit precízió mellett GPU-n, 32bites módban nincs elég VRAM
|
||||||
|
|
||||||
|
|
||||||
|
## Embedding Backendek
|
||||||
|
|
||||||
|
- Ollama
|
||||||
|
- hivatalos Docker image
|
||||||
|
- CPU/GPU support
|
||||||
|
- GGUF formátum
|
||||||
|
- egyedi modellarchitektúrák konvertálása alkalom adtán nehézkes lehet (gemma, nv-embed)
|
||||||
|
- egyedi (SentenceTransformer)
|
||||||
|
- python alapú szerver, docker konténerben
|
||||||
|
- egyszerű REST API
|
||||||
|
- CPU/GPU support
|
||||||
|
- HF/Transformers modell formátum, a legtöbb modell alapra ebben készül
|
||||||
|
- Spring ONNX integráció
|
||||||
|
- alkalmazásszerverbe épül be
|
||||||
|
- CPU/GPU support
|
||||||
|
- ONNX formátum szükséges, csak támogatott architektúrákkal megy
|
||||||
|
|
||||||
|
## Reranking
|
||||||
|
|
||||||
|
- [reranking service]
|
||||||
|
|
||||||
|
## Vektoros keresés
|
||||||
|
|
||||||
|
- Qdrant
|
||||||
|
- nagyobb méretű vektorok támogatása
|
||||||
|
- hivatalos Docker image
|
||||||
|
|
||||||
|
# Válaszgenerálás
|
||||||
|
- OpenAI API GPT4-en keresztül generált
|
||||||
|
- prompt:
|
||||||
|
- instrukciók
|
||||||
|
- relevánsnak ítélt kontextus
|
||||||
|
- user query
|
||||||
|
- Az első két találat chunkjait (és a hozzájuk tartozó contextet) tartalmazza a kérés kontextje
|
||||||
|
- A kérés REST API-n történik, a válasz egyben meg van várva, nincsen streamelve
|
||||||
Reference in New Issue
Block a user