Lectoriumi ülevaade
Sissejuhatus
Eesti seadused on avalikud ja tasuta loetavad. Riigi Teataja on hea register - probleem pole ligipääsus. Probleem on navigeerimises: et leida vastus oma küsimusele, pead juba teadma, millist seadust avada ja kuidas see säte on sõnastatud. Inimene, kes tahab teada, kui pikk on tema põhipuhkus, ei tea, et vastus on töölepingu seaduse §-s 55.
Lectorium on katse see vahe kinni katta. Küsid tavakeeles, saad vastuseks asjakohase sätte koos viitega. Sellel lehel kirjeldame ausalt, kuidas süsteem töötab, mida me ise treenisime, kui täpne see mõõdetult on ja mis selle juures praegu ei tööta.
Kirjutame ka puudustest, sest õigusinfo puhul on ebatäpsuse hind kõrge. Süsteem, mille piirangud on avalikult kirjas, on usaldusväärsem kui süsteem, mis lubab kõike.
Mis on Lectorium?
Lectorium on otsingupõhine (retrieval-grounded) õigusassistent. Ta ei kirjuta vastust ise, vaid leiab küsimusega haakuva sätte indekseeritud seadusetekstist ja tsiteerib seda sõna-sõnalt koos viitega Riigi Teatajasse.
Praegu on indekseeritud kakskümmend kaks seadust - kokku 3531 sätet:
- 22seadust
- 3531indekseeritud sätet
- 768vektori mõõdet
Suurim neist on võlaõigusseadus (1143 sätet), väikseim noorsootöö seadus (22). Ülejäänud: asjaõigusseadus (265), perekonnaseadus (225), sotsiaalhoolekande seadus (191), pärimisseadus (188), ehitusseadustik (180), tsiviilseadustiku üldosa seadus (174), töölepingu seadus (159), avaliku teenistuse seadus (144), tervishoiuteenuste korraldamise seadus (138), loomakaitseseadus (103), mittetulundusühingute seadus (99), tarbijakaitseseadus (92), ravikindlustuse seadus (82), korteriomandi- ja korteriühistuseadus (81), töötervishoiu ja tööohutuse seadus (62), lastekaitseseadus (52), isikuandmete kaitse seadus (38), töövõimetoetuse seadus (34), tervishoiuteenuse osutaja kohustusliku vastutuskindlustuse seadus (34) ning kollektiivlepingu seadus (25).
Kuidas see töötab
Kogu töö jaguneb kaheks: ehitusajaks (indeksi koostamine, käib Pythonis) ja päringuajaks (küsimusele vastamine, käib puhtas Go-s). Päringu ajal Pythonit ei jooksuta.
1. Seadusetekstide sissetoomine
Tekstid tulevad Riigi Teatajast. Iga seadust viidatakse versiooni-ID kaudu, mis lahendatakse alati kehtivaks redaktsiooniks - nii jäävad viited õigeks ka pärast seadusemuudatust.
2. Tükeldamine
Tekst lõigatakse paragrahvide kaupa. Pikk paragrahv jagatakse omakorda lõigete piiril väiksemateks tükkideks, millest igaüks kannab kordusena paragrahvi pealkirja - muidu sulaks kümne erineva reegliga paragrahv üheks keskmistatud vektoriks ega vastaks enam ühelegi küsimusele hästi. 3531 sättest saab nii 4693 otsingutükki. Iga tükk kannab kaasa oma metaandmed: seadus, paragrahvi number, peatükk, jõustumiskuupäev ja valmis link Riigi Teatajasse. Seetõttu saab iga vastuse juurde alati panna täpse viite - viide ei ole hilisem oletus, vaid ehitusajal salvestatud fakt. Sama paragrahvi eri tükke allikaloendis ei korrata: näidatakse parimat.
2b. Lisade tabelid
Osa seadusi delegeerib kõige sagedamini küsitava vastuse lisasse. Ehitusseadustiku § 35 ütleb, et ehitusteatis on nõutav „lisas 1 nimetatud ehitiste puhul“ - see, kas kuur vajab luba, on otsustatud tabelis, mitte üheski paragrahvis. Riigi Teataja peidab need lisad seaduse XML-i sisse base64-kodeeritud PDF-idena; Lectorium võtab need välja, teisendab tekstiks ja indekseerib nagu iga teise sätte. Tabeli veerud jäävad alles eraldajatena, et rida oleks loetav ka siis, kui kirjatüüp pole ühelaiune.
3. Vektoriseerimine
Iga säte teisendatakse arvuvektoriks mudeliga
multilingual-e5-base (768 mõõdet). See on mitmekeelne
avatud kaalude mudel, mis oskab eesti keelt. Vektor kirjeldab teksti
tähendust, mistõttu küsimus ja säte võivad kokku sobida ka siis,
kui neis pole ühtegi ühist sõna.
4. Otsing
Küsimus vektoriseeritakse sama mudeliga ja võrreldakse kõigi sätetega
koosinussarnasuse abil. Tagastatakse viis parimat. Kui parim tulemus jääb
alla lävendi 0.81, ei vasta Lectorium üldse - ta ütleb, et
asjakohast sätet ei leidnud.
5. Vastus
Parimast leitud sättest valitakse küsimusega kõige haakuvamad lõiked ja need esitatakse muutmata kujul, kujul „§ N (seadus): tekst“.
- Vektorimudel
- multilingual-e5-base
- Vektori mõõtmed
- 768
- Indeksi suurus
- 3531 sätet (4693 tükki)
- Tagastatud tulemusi
- 5
- Asjakohasuse lävend
- 0.81 koosinus
- Vastuse tüüp
- ekstraktiivne (tsitaat)
- Päringuaja käitusaeg
- Go + ONNX Runtime
Mudel, mille treenisime
Lectoriumi projekti üks eesmärk oli treenida eesti keele mudel nullist - mitte kohandada olemasolevat. Seda me tegime, ja tulemus õpetas meile projekti kõige olulisema asja.
Esimene katse: protsessoril
Alustasime tavalisel protsessoril (16 tuuma, ilma graafikakaardita): 6,79 miljoni parameetriga mudel, 8000-sõnaline oma BPE-sõnastik, 2200 sammu, umbes kaks tundi. Valideerimiskadu langes 9,02-lt 5,36-le ja perplekssus 8300-lt 210-le - puhas, ühtlane langus. Mudel kirjutas äratuntavat eesti keelt ja teadis reaalseid nimesid (Riigikogu, Tartu Ülikool), aga oli selgelt alatreenitud: kordas ennast ja rääkis segast.
See ei olnud kasutatav mudel. See oli tõestus, et ahel töötab.
Teine katse: graafikakaardil
Päris treening käis ühel renditud RTX 3090-l.
- Parameetrid
- 33,4 miljonit
- Arhitektuur
- 8 layers, 8 heads, 512 dims
- Konteksti pikkus
- 512 tokenit
- Sõnastik
- 16 000 BPE
- Treeningkorpus
- 111M tokenit (eesti Vikipeedia)
- Epohhe
- 3
- Samme
- 15 000
- Treeningaeg
- ~41 minutit
- Kogumaksumus
- 0,24 USD
- Valideerimiskadu
- 3,16
- Perplekssus
- ~24
Perplekssus paranes 210-lt 24-le - umbes üheksa korda. Mudel kirjutab nüüd soravat, grammatiliselt korrektset eesti keelt ja kasutab reaalseid nimesid.
Ja siis leidsime probleemi
Sorav eesti keel ei tähenda tõest eesti keelt. Mudel kirjutas näiteks:
Grammatiliselt laitmatu lause. Sisuliselt täielik väljamõeldis. Mudel oli õppinud, kuidas eesti keel kõlab, aga mitte seda, mis on tõsi.
Just see katse on põhjus, miks Lectorium ei kasuta seda mudelit vastuste kirjutamiseks. Kui mudel suudab veenvalt väita, et Tallinn asub Põhja-Makedoonias, ei tohi ta öelda sulle, milline on sinu koondamishüvitis. Meie enda treenitud mudel on tõestus sellest, mida keelemudel ei tohi õigusinfo puhul teha.
Miks vastus on tsitaat
Sellest järeldusest sündis Lectoriumi keskne otsus: vastus on tsitaat, mitte jutt. Süsteem ei sõnasta seadust ümber ega võta kokku - ta näitab sätte teksti nii, nagu see Riigi Teatajas on.
See loobub mugavusest. Sujuvalt kirjutatud kokkuvõtet oleks meeldivam lugeda. Aga kokkuvõtet ei saa kontrollida, tsitaati saab.
Sama loogika on kolmes reeglis, mis on koodis jõustatud:
- Ilma allikata vastust ei väljastata. Vastus ja tühi allikaloend on üksteist välistavad - seda kontrollitakse vastuse koostamise tasandil, mitte ei jäeta mudeli hooleks.
- Alla lävendi ei vastata. Kui parim leitud säte skoorib alla 0.81, tuleb vastuseks „asjakohast sätet ei leitud“.
- Hoiatus käib kaasas. Iga vastus kannab märget, et tegemist ei ole õigusnõustamisega.
Päringuaja teenus on kirjutatud Go-s ja vektormudel jookseb ONNX Runtime'i kaudu samas protsessis. Vastamiseks ei ole vaja Pythonit ega välist API-t - küsimus ei lahku serverist.
Sebastian: kui otsing on kahevahel
Osal küsimustest on kaks erinevat õiget vastust - olenevalt sellest, kes küsib. „Millised on tööandja kohustused töötaja ees?“ tähendab töölepingu seaduses üht ja töötervishoiu ja tööohutuse seaduses teist. Mõlemad sätted on asjakohased, mõlemad on üle lävendi, ja nende skoorid erinevad tuhandikutes. Varem valis Lectorium siin lihtsalt ise - vaikselt ja küsimata.
→ TLS § 15 (0.880) · TTOS § 14 (0.870) - vahe 0.010
Nüüd küsib Sebastian üle. Ta ilmub vastuse alla - seadus on juba tsiteeritud ja viidatud - ja pakub ühe valiku: „Kas küsid tööõiguse või töökeskkonna ohutuse kohta?“ Vajutad, ja otsing käib uuesti, seekord teades, mida sa silmas pidasid. Kui sa teda ignoreerid, jääb esimene vastus alles - täpselt nagu enne.
Millal ta ilmub
Reegel on tahtlikult kitsas. Kõik tingimused peavad korraga kehtima:
- Kaks seadust on üle lävendi. Kui vastust ei tulnud või vastas üks seadus, ei ole midagi täpsustada.
- Nende vahe on alla 0,015. Selge võitja ei vaja küsimust. Kaugemal kui tuhandikud - ta vaikib.
- Selle seadusepaari kohta on käsitsi kirjutatud juhtum. Praegu on neid seitse. Paar ilma juhtumita tähendab vaikimist - ja jõuab järjekorda.
- Küsimuses on teema märksõna. Ainult seadusepaarist ei piisa: „Mis on ostueesõigus?“ ei ole küsimus defektse kauba kohta, kuigi tabab sama paari.
- Sa ei ole juba ise öelnud, kumba mõtled. Kui küsimuses on sõna „ametnik“, ei küsi ta sinult, kas sa oled ametnik.
Mõõtmise järgi ilmub ta kümne küsimuse juures 301-st - kolm sajast. Ühe vastuse kohta esitab ta ühe küsimuse ja ühes vestluses kõige rohkem kaks - teisel korral ainult mõne teise, uue eristuse kohta. Milline täpsustus on juba tehtud, kannab kaasas rakendus ise; serveris sinu kohta seanssi ei hoita.
Mida ta kunagi ei tee
Sebastian ei vasta ühelegi õiguslikule küsimusele. Ta ei tee kokkuvõtteid, ei tõlgenda, ei soovita. Ta ei kirjuta ka omi lauseid: iga tema öeldud sõna - küsimus ja valikud - on eelnevalt käsitsi kirja pandud ja tarnitakse koos indeksiga. Keelemudel tema teksti ei genereeri. Vastus tuleb ikka seadusest, sõna-sõnalt ja viitega; Sebastian ainult suunab, millist sätet otsida.
Ta oskab ainult neid eristusi, mis on talle kirja pandud - seitse paari kahekümne kahe seaduse peale. Ja ta ei aita seal, kus abi kõige rohkem vaja oleks: kui otsing on enesekindlalt vale ühe seaduse kasuks, ei ole viiki, mida märgata, ja Sebastian jääb vait. Ta lahendab kahevahel olemist, mitte eksimist.
Kui täpne see on?
Täpsust mõõdame 296 küsimusega kahekümne kahe seaduse peale. Iga küsimuse oodatav vastus on määratud seaduse enda pealkirjade järgi - mitte selle järgi, mida otsing tagastab. See on tähtis vahe: nii ei saa mõõdik ennast ilustada. Lisaks on komplektis viis lõksuküsimust, mille õige tulemus on vaikimine: vastus asub õigusaktis, mida indeksis ei ole.
- 79%õige säte esimesel kohal
- 94%õige säte kolme parima seas
- 96%õige säte viie parima seas
Kuna Lectorium näitab mitut leitud sätet korraga, on praktikas kõige olulisem keskmine number: 94% küsimustest leiab õige sätte kolme parima seas. See number ei ole kaheksa seaduse lisamise vältel langenud, kuigi indeks kahekordistus - iseseisev seadus ei lõhu seda, mis juba töötas. Viimane tõus tuli pealkirjaboonusest: kui küsimuse sisusõna esineb paragrahvi pealkirjas, saab see säte kolmesajandiku jagu kaalu juurde. See parandab „üldsäte lööb ära täpse sätte“ mustri - MTÜS § 18 „Üldkoosolek“ ei tõrju enam § 19 „Üldkoosoleku pädevust“. Konkreetsed küsimused - tähtajad, määrad, hüvitised, õiguskaitsevahendid - lähevad tavaliselt õigesti.
Probleemid
Need on teadaolevad puudused. Osa on parandatavad, osa on praegu elus.
Definitsiooniküsimused suurtes seadustes
Kõige nõrgem koht on endiselt lihtne küsimus kujul „Mis on X?“. Suures seaduses kaotab üldine mõistesäte konkreetsemale kõrvalsättele, sest viimane sisaldab sama sõna tihedamalt. Võlaõigusseaduses võidab § 8 „Lepingu mõiste“ ikka päringuid, mis peaksid minema mujale.
Osa sellest osutus siiski hoopis tükeldamise veaks: pikad paragrahvid jäid tükeldamata ja üks vektor keskmistas kümmet erinevat reeglit. Pärast parandust tõusis täpsus esimesel kohal 69%-lt 76%-le ja kolme parima seas 87%-lt 90%-le. Õppetund: kui viga käib käsikäes seaduse suurusega, tasub enne mudelit kahtlustada töötlusahelat.
Osa neist parandaks ümberjärjestaja (reranker), aga mitte kõiki - mõnel juhul ei jõua õige säte üldse esimese kümne sekka, mis tähendab, et tegu on leidmise, mitte järjestamise veaga. Ümberjärjestamine ei aita, kui õiget vastust pole pakis.
Vale seadus õige teema kohta
See on üks päris viga, ja see on praegu toodangus:
→ TKS § 9 „Üldnõuded“ (0.867 - üle lävendi)
→ oodatud: VÕS § 222 (0.864 - teine koht)
Tarbija õiguskaitsevahendid on võlaõigusseaduses; tarbijakaitseseadus määrab peamiselt mõisted ja järelevalve. Otsing eelistab siin vale seadust - ja teeb seda skooriga üle lävendi, mis tähendab, et vastus tuleb enesekindlalt vale.
See ei ole üksik päring, vaid muster: möödaminnes mainimine kitsas seaduses lööb ära sätte, mis mõiste tegelikult määratleb. Küsimus „Mis on käsundusleping?“ annab nüüd esimesena sotsiaalhoolekande seaduse sätte perevanemaga sõlmitava lepingu kohta (0.809), sest seal on sõna „käsundusleping“ juhuslikult sees - võlaõigusseaduse § 619 „Käsunduslepingu mõiste“ jääb kahe tuhandiku kaugusele teiseks. Iga uus seadus annab sellele mustrile juurde pinda.
Ümberjärjestaja lahendab selle küsimuse ära - katsetes tõuseb VÕS § 222 esimeseks. Aga toodangus ümberjärjestajat ei ole: Go-teenus kasutab ainult vektormudelit ja ümberjärjestaja pole veel ONNX-kujule eksporditud. Vahe on nüüd kolm tuhandikku (0.867 vs 0.864) ja õige säte on allikaloendis näha, aga esimesel kohal seisab endiselt vale seadus. Kuni ümberjärjestaja puudub, on see päring teadaolev auk.
Vahepealse lahendusena küsib siin nüüd Sebastian üle: kolme tuhandiku vahe on tema jaoks viik, ja selle seadusepaari kohta on juhtum olemas. „Mida saan müüjalt nõuda“ viib võlaõigusseadusse, „millised nõuded kauplejale kehtivad“ tarbijakaitseseadusse. See ei paranda järjestust - see annab kasutajale võimaluse see ise ära otsustada.
Rahvakeel versus seaduse keel
Inimene küsib nii, nagu ta räägib; seadus on kirjutatud abstraktselt. Kui ükski säte ei kanna seda sõna, mida küsija kasutab, ei tulnud õige säte varem pinnale üldse. Näiteks „kas pean taluma naabri müra ja tolmu?“ andis asjaõigusseaduse § 150 (piiril kasvavad puud), sest sõna „müra“ ei esine üheski sättes - õige vastus § 143 „Kahjulikud mõjutused“ jäi neljandaks ja alla lävendi.
Nüüd on olemas sõnastiku kiht: enne otsingut lisatakse küsimusele seaduse enda terminid. „Müra“ toob juurde „kahjulikud mõjutused“, „kuur“ toob „abihoone“ ja „ehitisealune pind“, „servituut“ toob „reaalservituudi mõiste“. Lisatakse ainult otsingusse - küsimus, mida sulle tagasi näidatakse, ja viide jäävad muutmata. Kolm ülalkirjeldatud küsimust annavad nüüd õige sätte, ja ükski varem töötanud vastus ei läinud katki.
Sõnastik teab ainult neid sõnu, mis sinna on kirja pandud - iga uus kirje lisatakse siis, kui mõni päris küsimus on nähtud mööda minemas. Sõna, mida seal veel ei ole, kukub endiselt läbi. Ja teadlikult ei laiendata küsimust siis, kui inimene kasutab juba seaduse terminit: katse „aegumist“ automaatselt täiendada rikkus ära vastuse, mis oli varem õige.
Isikuandmete kaitse: pool vastust on väljaspool Riigi Teatajat
Isikuandmete kaitse seadus üksnes täpsustab EL isikuandmete kaitse üldmäärust (GDPR). Kõige sagedamini küsitav - töötlemise õiguslikud alused, andmesubjekti õigused, rikkumisest teatamise tähtaeg, andmekaitsespetsialisti kohustus - on üldmääruses endas, mida Riigi Teataja ei sisalda ja mida Lectorium seetõttu ei tsiteeri.
Seetõttu kannab iga isikuandmete kaitse seadusele tuginev vastus eraldi märkust, et tsiteeritud säte ei pruugi olla kogu reegel. Seaduse 4. peatükk (§ 12-50) on indeksist teadlikult välja jäetud: see kehtib ainult õiguskaitseasutustele süüteomenetluses, kuid selle pealkirjad kõlavad nagu üldreeglid - näiteks „Andmekaitsespetsialisti määramine“. Ilma väljajätmiseta oleks tavaline ettevõtja saanud enesekindla vastuse, mis temale ei kohaldu.
Mida Lectorium ei tee
- Ei sünteesi mitmest sättest. Kui vastus nõuab kahe seaduse koosmõju, näitab Lectorium sätteid, aga ei ühenda neid järelduseks.
- Ei tunne kohtupraktikat. Indeksis on seadusetekst, mitte lahendid ega tõlgendused.
- Ei kata kogu Eesti õigust. Kaheksateist seadust on väike osa. Kui küsimus puudutab indekseerimata seadust, ei leia Lectorium midagi - see on ohutu käitumine, aga sinu küsimusele see ei vasta.
- Ei ole õigusnõustamine. Eestis on reguleeritud, kes tohib õigusabi anda. Lectorium näitab seadusteksti; järelduse oma olukorra kohta teed sina või sinu jurist.
Mis edasi?
Järjekord on umbes selline:
- Ümberjärjestaja Go-teenusesse. Ekspordime cross-encoder-mudeli ONNX-kujule. See sulgeb ülalkirjeldatud TKS/VÕS augu ja parandab osa definitsiooniküsimusi.
- Rohkem seadusi. Iga uus seadus on senini tulnud ilma varasemate täpsust langetamata - pärimisseaduse lisamine ei muutnud eelmiste tulemusi ühegi protsendi võrra.
- Juhendtreening. Selleks et meie oma mudel saaks kunagi vastuseid sõnastada, peab ta õppima etteantud sätetest vastama, mitte teksti jätkama. Seda me pole veel teinud - ja kuni pole, jääb vastus tsitaadiks.
- Sõnastiku kihi laiendamine. Alus on olemas; iga uus kirje tuleb päris küsimusest, mis läks mööda. Pikemas plaanis peaks see tulema seaduste enda sõnavarast, mitte käsitsi.
- Isikuandmete kaitse üldmäärus indeksisse. GDPR-i eestikeelne tekst tuleb tuua EUR-Lexist. Enne seda jäävad andmekaitse üldküsimused sisuliselt vastuseta.
- Parem definitsioonide leidmine. Tükeldamine sai korda; järele jääb mõistesätete eraldi käsitlus.
Kui midagi läheb valesti - vale säte, puuduv seadus, kummaline vastus - siis see on kasulik info. Selle lehe numbrid muutuvad koos süsteemiga.