Kód ellenőrzés + AI #2

Előzmények itt.

Célom a fejlesztők munkájának megtámogatása a platformomon úgy, hogy egyetlen klikkel meg tudják vizsgáltatni a kódjukat anomáliák után kutatva benne egy tanított mesterséges intelligenciával. Ez bármilyen rendellenességet jelenthet, melyet az AI a tanult adatok alapján képez.

Meg van a backend és a frontend működés is. Elkezdtem betanítani az AI-t és kutatom hogy milyen mintával tanított modell milyen mintában talál lehetséges anomáliákat. Valószínű hogy többször újra kell tanítanom, egyelőre teszt jelleggel egy alap tanítással kísérletezek. Nyilván adhat több false jelzést.

100 ezer mintával tanítottam ami egyenként 10 egész számból áll. Ezt Babylon-nal generálom a tanító kódok forrásából úgy, hogy Babylon által adott AST típusaiból számot képzek, melyben egyforma típusok azonos számmal jelennek meg. Vagyis egyetlen tanítási minta 10 darab szintaxis típus tulajdonképpen. És azért számok, hogy a gépnek értelmezhető formátum legyen. Egyelőre nem emeltem be másodlagos tulajdonságnak a típus mélységét (mennyire beágyazott helyet foglal el a kódban, vagyis mennyi blokkon belül található), mert tapasztalatom alapján az a sejtésem, hogy ez túl részletgazdag információt ad, amellyel túl taníthatom.

Kb. 20 percig tart az egyszeri tanítás és 3.2 MB-os a modell lementett szöveges állománya (ami kb 3%-ára tömöríthető bzip-pel, mely 124 KB).

Jelenleg egy folyamatos kutatást fogok végezni újra és újra felülvizsgálva minden részletet, mely a lehetőségek optimalizálásáról szól. Ez egy relatíve nehéz folyamat, melyben nem meghatározott inputok alapján fogom vizsgálni a probléma domain-t. Mit lehet, mekkora a hiba faktor és mennyire jól reagál a ténylegesen elhelyezett anomáliákra a kódban.

Persze a kevésbé hatékony működés is jobb mint a semmi, de a jövőben egy előremutató folyamatot határozok meg, mellyel idővel folyamatosan nőhet a találati minőség.

Alább egy rövid videó a frontend működésről, melynél egyetlen klikk az ellenőrzés és amely a problémás területhez állítja a kurzort az ellenőrzés után. Ez a kurzor állítás egy nehezebb dolog, mert több absztrakción átívelve kellene pontosan visszahelyeznem az AST típusa helyére. Ráadásul nem is Javascript-be ha más dialektust használtunk, hanem ez utóbbiba, amiről JS-t fordítottuk. Ezt még tovább fogom fejleszteni, vannak ötleteim, például Babylon kimenetében ott a loc (line of code) start és end értékekkel, melyek a karakter pozíciót mutatják. Egyelőre a script hosszának százalékban számolt körülbelüli helyére állítom a kurzort. Ez még fejlesztés alatt.

A videóban egy véletlenszerűen kiválasztott JS kód van, mely elé és után betettem még HTML, CSS és JS kódot:

https://youtu.be/v2V40r73u00

Hozzászólások

Közben nekiálltam futtatni egy algót, mellyel az állítható paramétereket változtatom, vizsgálva a teszt adatbázison keletkező fals riasztások számát (a teszt adatbázist jónak veszem, ezért itt minél kevesebbnek kell lennie a riasztásnak). Egyelőre nagyon rossz az arány. Kíváncsi vagyok meddig fog futni és mi lesz a legjobb arány amit el tudok érni.

Közben többször változtattam az algon. Minden változtatás random értékkel történik és pontszámozom a feltételrendszerem alapján és ha van nagyobb pontszám, akkor letárolom a paraméter kombinációt.

Nyilván egy hiperbolikus görbét fog mutatni az új találatok száma az idő függvényében ahogy emelem a megugrandó pontszám értékét, ezért egyre lassulni fog a folyamat.

Egyelőre fut szépen és lassan emelkedik a minőség.

Több nap futás után sikerült elérnem a kívánt limitet, körülbelül 98-99%-os a felismerés helyessége, vagyis a normál adatokra adott fals riasztás mértéke <2%.

Érdekesség, hogy az 5 - 50 méretű minta intervallumon belül (mennyi darab szintaxist veszek egybe) a 45-46-ot választotta ki mint optimálist.

Most "kézileg" preparált rendellenesség felismertetésével kezdem el validálni a működés helyességét. Ehhez kutatás a normál tanító adatbázistól eltérő minták után.

Nincs kedved egy cikksorozatot irni AI-rol, ami kicsit foldhozragadtabb, mint a kodellenorzes?

A multkori AI bevezeto tok erdekes volt.

Mondjuk valamilyen gyumolcs felismerese egy kepen (pl. meggy). A feketeoves fokozat, amikor a gyumolcs szarat is felismerjuk (az tipikusan beleolvad a hatterbe mivel zold/barna).

---
Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....