megjegyzés: README eléggé le van maradva a fejlesztéstől, TODO ezt javítani
A K-Monitor sajtóadatbázisának bővítését segíteni gépi tanulással.
Tehát korrupció* témájú szövegek gépi elemzése, klasszifikációja, ténykinyerés stb.
*korrupcióról, közbeszerzésekről, közpénzfelhasználásról, illetve általában a közélet tisztaságáról, átláthatóságáról szóló
Magas szinten:
Rendszeresen lekérjük hírportálok RSS feed-jét és az új cikkeket letöltjük newspaper3k python könyvtárral.
TODO: majd külön scraperek írása olyan oldalakhoz, amikkel nem (tökéletesen) működik a newspaper3k.
Egyelőre csak URL alapján kiszűrjük az angol híreket (pl.: https://telex.hu/english/.*
) vagy életmód, stb. irreleváns rovatba tartozó cikkeket.
A newspaper3k nem tökéletes, a szövegbe kerülnek felesleges sorok. Ezek gyakran ismétlődnek, így globális előfordulási gyakoriság alapján szűrhetők. Magyarul: van egy common_lines fájl, ami a gyakori sorokat tartalmazza.
Cikkekről eldönteni, hogy korrupciós témát dolgoznak-e fel.
Kiválasztottam 36 012 db cikket manuális annotálásra, ezeket sorba rendeztem régi (~85%-os) modellel és korrupciósabb felétől kezdve elkezdtem annotálni. Az utolsó 20 000 cikket megjelöltem negatívnak, így kevesebbet kell annotálnom. Végül csak az első 6000 cikk annotálását végeztem el, de talán így is elég lesz
K-monitor sajtóadatbázisának scrapelése.
A rendszer emberi felügyelet alatt működne, ezekből az emberi beavatkozásokból tanulhat a modell.
Már létrehoztam egy demo oldalt, ami egy kevésbé kifinomult modellt használva megjelenít korrupciósnak vélt cikkeket. Kész van egy alap felület, amiben felül lehet bírálni a modell döntését és a hibás döntéseket kiírom egy csv file-ba. Ezt pedig visszapörgetem a tanítóhalmazba.
Mindenképpen LoRA finomhangolást kell végezni.
Alap modellre két lehetőség van:
- llama 7B: jobb, viszont kell engedélyt szerezni a meta-tól
- PULI-GPT-3SX: rosszabb, viszont szabadon használható
TODO: kísérletezni, mennyi a különbség (ha nem sok, akkor kevesebb szöveggel tanítás gyorsíthat a finomhangoláson és a használaton is).
lehetőségek:
- Cím + lead + kulcsszavak
- Cím + lead + random bekezdés + kulcsszavak
- Cím + lead + teljes szöveg + kulcsszavak
Az adatbázist nem szeretnénk redundáns cikkekkel megtölteni, amik a már adatbázisban levő cikkek átvételei és semmilyen plusz információt nem tartalmaznak.
Ehhez egy egyszerű minta-alapú algoritmust használunk, ami például ilyen szerkezetű mondatokat ismer fel: "... írja a telex.hu".
TODO: lehetne HuSpaCy-vel bonyolítani
Szeretnénk külön kezelni helyreigazításokat és esetleg kinyerni melyik cikkre hivatkozik a helyreigazítás.
Erre is egy szabály-alapú algoritmus/HuSpaCy lenne a megoldás.
Hasonló, mint a "Korrupció klasszifikáció"-nál.
Spacy-vel előre kinyerjük a szövegben előforduló entitásokat. Majd ezek közül választja ki a következő lépés a relevánsakat.
(lehet hogy a végleges megoldásban el lesz hagyva, ha nem javít sokat a végeredményen)
Kiválasztja a releváns entitásokat a szövegből, tehát pl. személy esetén azt aki a cikk szerint korrupciós tevéknenységgel összefüggésbe hozható.
Entitások közti reláció kinyerése. Pl. millyen kapcsolat van két személy esetén.
Ilyen hármasok formájában: {Jancsi, Juliska, testvér}
+ bekezdés, ami erről ír + indoklás
Ehhez OpenAI API-t fogok használni: Megadok egy bekezdést és megkérem, hogy indoklással együtt adja meg a benne szereplő kapcsolatokat.
TODO:
- cikkeket bekezdésre bontani
- szűrni azokat, amik tartalmaznak 2 entitást
- OpenAI API-nak odaadni, hogy gyűjtse ki belőlük az entitások közti kapcsolatokat, indoklással
Egy egyszerű webes felület, ami a modell által korupciósnak ítélt cikkeket megjeleníti egy listában. A cikkekhez két gomb lenne: helyes a döntés vagy sem. Ugyanígy a kulcsszavakra, entitás kapcsolatokra és releváns entitásokra is kell egy szerkesztői felület.