Na začiatku cesty smerujúcej k CHAT GPT stál programovací jazyk PROLOG.

S počítačmi 5-tej generácie sme mali dávno komunikovať v bežnom jazyku. Umožniť to mal aj programovací jazyk PROLOG.

Písmo: A- | A+
Diskusia  (0)

Ó hlubino myšlení, co jest odpověď na základní otázku života, vesmíru a vůbec?

(D.Adams, Stopařův průvodce po galaxii)

Takúto otázku mal vyriešiť po miliónoch rokov výpočtov počítač v dnes už kultovom diele.

To naše počítače po rokoch síce dokážu čo to vypočítať, ale filozofické úvahy im zatiaľ nejdú ( teda až donedávna) . Nerozumejú bežnej ľudskej reči a stále sme pri väčšine úloh odkázaní na klávesnicu a myš. V tomto sa predpovede odborníkov spred desaťročí nesplnili.

Počítače dokážu spracovávať ohromné množstvo dát, uchovávať rôzne databázy aj viac alebo menej úspešne vyhľadávať v texte ale textu s ktorým pracujú nerozumejú.

SkryťVypnúť reklamu
SkryťVypnúť reklamu
Článok pokračuje pod video reklamou

Možno viete o počítači Deep Blue ktorý súperil v šachu so svetovým veľmajstrom. Ale šach je v podstate matematická a logická hra kde je počítač dosť v pre neho pohodlnom prostredí. Ale pred viac ako 10 rokmi existoval aj projekt rovnakej firmy IBM a to Watson, ktorý si zasúťažil v kvízovej hre s názvom Jeopardy s ľudskými hráčmi.

Watson je počítač, ktorý je schopný rozpoznávať ľudskú reč, analyzovať otázky a následne formulovať odpovede.

Práve také mali byť počítače 5-tej generácie. Na rozpoznávanie reči a programovanie umelej inteligencie v japonskom projekte počítačov piatej generácie bol vybraný jazyk PROLOG ktorý umožňuje tzv logické programovanie. Ten vznikol ešte v roku 1972 vo Francúzsku a pôvodne bol určený na riešenie úloh v oblasti spracovania prirodzeného jazyka.

SkryťVypnúť reklamu

Aj keď by sa zdalo, že najnovší četovací program CHAT GPT je niečo nové, je len pokračovaním vývoja v oblasti ktorý začal pred desiatkami rokov.

Na to, ako text v prirodzenom jazyku vyzerá poznáme isté pravidlá. Tie by nám už samé od seba mohli pomôcť vytvoriť gramaticky správne vety. To je ale iba časť z problému spracovania prirodzeného jazyka. Druhá je o tom, čo vlastne veta znamená sama o sebe či v skupine viet idúcich za sebou. A to už je vec, ktorá súvisí s významom (sémantikou) textu. Spôsob ako z textu získavať údaje, prípadne na základe nich odvodiť nejaký iný poznatok je už vec nejakých logických postupov.

SkryťVypnúť reklamu

Programovací jazyk PROLOG je veľmi odlišný jazyk od ostatných. Umožňuje zapisovať rôzne tvrdenia , pravidlá a potom zadať výrazy na vyhodnotenie.

Príklad:

FAKTY

Jozef je človek.

Pavol je človek.

Bager je stroj.

Žeriav je stroj.

Jozef pracuje pre firmu.

Pavol pracuje pre firmu.

Bager pracuje pre firmu.

Žeriav pracuje pre firmu.

Zamestnanec je človek ktorý pracuje pre firmu.

Majetok firmy je stroj ktorý pracuje pre firmu.

OTÁZKA:

Kto je zamestnanec ?

Čo je majetok firmy ?

V jazyku Prolog by to vyzeralo takto:

je_stroj(bager).

je_stroj(zeriav).

je_clovek(jozef).

je_clovek(peter).

pracuje_pre_firmu(bager).

pracuje_pre_firmu(zeriav).

SkryťVypnúť reklamu

pracuje_pre_firmu(peter).

pracuje_pre_firmu(jozef).

kto_je_zamestnanec(X):-je_clovek(X) ,pracuje_pre_firmu(X).

co_je_majetok_firmy(X):-je_stroj(X) ,pracuje_pre_firmu(X).

V posledných dvoch pravidlách sme napisali, ze zamestnanec je človek ktory pracuje pre firmu.

Ak sa teda opýtame kto je zamestnanec, mali by sme dostať mená jozef a peter. Podobne funguje druhé pravidlo.

kto_je_zamestnanec(X).

X = jozef

X = peter

Samozrejme toto je len akýsi náčrt aký je koncept jazyka. PROLOG je tzv. turingovsky úplný jazyk, čo znamaná , že je v ňom možné naprogramovať riešenie akejkoľvek úlohy. Prispôsobený je však na veľmi špecifický typ úloh.

V tomto jazyku sa dajú popísať syntaktické pravidlá a gramatiky pre jazyk a zároveň vytvárať programy ktoré dokážu odpovedať na otázky súvisiace s údajmi ktoré sme do neho zadali. Ak správne naprogramujeme fakty, program poskytuje vždy presné údaje, tj odpoveď ak ju program nájde, je vždy pravdivá. Problém s použitím takejto simulovanej umelej inteligencie je ten, že všetky pravidlá musíme do nej dopredu nastaviť a štruktúru údajov presne popísať čo by mohla byť obrovská úloha.

Jedným so spôsobov popisu jazyka v Prologu je Gramatika s konečnou klauzulou (Definite Clause Grammar).

Jednoduchá gramatika v DSG by mohla vyzerať nejako takto. (v angličtine je to jednoduchšie kôli jednoduchšej gramatike).

sentence -->

subject,

verb,

object.

subject -->

adj,

noun.

object -->

adj,

noun.

adj --> [hladna].

noun --> [macka].

noun --> [mys].

noun --> [puma].

verb --> [nahana].

verb --> [zerie].

Na základe predošlého programu vieme vygenerovať napríklad všetky vety ktoré spĺňajú pravidlá našej gramatiky (bez iných obmedzení ktoré by sme museli dplniť).

sentence(X,[]).

X = [hladna, macka, nahana, hladna, macka]

X = [hladna, macka, nahana, hladna, mys]

X = [hladna, macka, nahana, hladna, puma]

X = [hladna, macka, zerie, hladna, macka]

X = [hladna, macka, zerie, hladna, mys]

X = [hladna, macka, zerie, hladna, puma]

X = [hladna, mys, nahana, hladna, macka]

X = [hladna, mys, nahana, hladna, mys]

X = [hladna, mys, nahana, hladna, puma]

X = [hladna, mys, zerie, hladna, macka]

X = [hladna, mys, zerie, hladna, mys]

X = [hladna, mys, zerie, hladna, puma]

X = [hladna, puma, nahana, hladna, macka]

X = [hladna, puma, nahana, hladna, mys]

X = [hladna, puma, nahana, hladna, puma]

X = [hladna, puma, zerie, hladna, macka]

X = [hladna, puma, zerie, hladna, mys]

X = [hladna, puma, zerie, hladna,

V programe teda vieme zadefinovať gramatiku, načítavať vstup a na základe rôznych pravidiel a faktov získavať odpoveď.

Tak ako dnes máme známy CHAT GPT-3 tak už v roku 1983 bol v PROLOGU napísaný CHAT-80 ktorý vie odpovedať na otázky v oblasti zemepisu. Teda kde aká krajina je, s kým susedí akú má rozlohu, aká rieka kde tečie... Program má iba 180Kb.

Autorom bol Fernando Periera a tento program bola jeho PhD práca s názvom "Logika pre analýzu prirodzeného jazyka" na katedre umelej inteligencie na University of Edinburg.

To, čo dnes predstavuje Chat GPT je celkom iný prístup ktorý umožnil až rozvoj kapacity a výkonu počítačov a dostatok zdrojového textu v elektronickej podobe.

To, ako Chat GPT funguje je odlišné od dopredu naprogramovaných údajov a pravidiel.

Predstavte si, že máte nejaký vám neznámy jazyk a v ňom veľké množstvo rôzneho textu. To, čo robí Chat GPT je , že na základe matematickej analýzy veľkého množstva textu, dokáže v tom jazyku zmysluplne odpovedať na otázky a tvoriť uspokojivé dlhšie výstupy a zlepšiť sa po tom , ak dostane od ľudí ktorý jazyku rozumejú nejakú spätnú väzbu alebo hodnotenie správnosti toho čo produkuje.

To je akoby k vám prišiel na návštevu niekto koho jazyku nerozumiete a vy sa s ním plynule porozprávate. On odíde celkom spokojný ale vy pritom vôbec netušíte význam toho na čo sa pýtal ani čo ste mu vlastne odpovedali .

Aby niečo také bolo možné, je potrebné zobrať veľké množstvo dostupného textu ktoré viac menej pokrýva všetky možné očakávané interakcie. Pravda, zdroje musia byť vhodne vybraté alebo ich váha nejako ohodnotená tak aby sa obmedzili v nich obsiahnuté nesprávne údaje. Tj. máte celú Wikipédiu, Quora, Reddit kde je obrovské množstvo údajov takmer o všetkom. Chat GPT je vlastne najlepší tvorca kompilátov na svete lebo dokáže kombinovať údaje z obrovského množstva textových údajov ktoré mal k dispozícii. Ak vytvoríte svoju prácu z 10 000 rôznych zdrojov, nikto nepríde na to že je to naozaj iba kompilát.

Problémom je, že sa mu nedá úplne veriť lebo sa riadi pravdepodobnosťou, nie istotou že dané tvrdenie je správne. Pri tvorení opisných textov, či odpovedí ktoré sú viac menej veľmi podobné tomu čo sa v podobnej forme nachádzalo v zdrojoch je výkon perfektný. Pri iných otázkach už vidno, že nemá naprogramovanú nejakú pevnú logiku v zmysle informácií , vzťahov a pravidiel. Všetky pravidlá sú tak vo forme pravdepodobnosti s ktorou je v danej vete dané slovo po inom a následne v nasledujúcej vete nejaké iné. Samozrejme celá vec s tou pravdepodobnosťou je oveľa komplexnejšia. Samozrejme nemôže rátať iba s akou pravdepodobnosťou nasleduje nejaké slovo po jedinom predošlom. Tá pravdepodobnosť závisí od všetkých slov v texte ktorý mu zadáme a postupne aj od predošlých slov ktoré použil v odpovedi.

Chat GPT je úžasný model v tom, ako presvedčivo vie predstierať inteligenciu. Nuž a to je vlastne dostačujúce v mnohých kreatívnych úlohách kde to nové je vlastne len nanovo pozliepané to staré.

Vraj mu veľmi dobre ide programovanie. Nuž ale keď spracoval všetky príručky , návody aj diskusie k nim, tak to nie je až tak prekvapivé že vie pri vhodnom zadaní zostaviť program. Síce robí aj chyby ktoré treba vedieť nájsť a povedať čo je nutné zmeniť, je otázne či by dokázal vyrobiť funkčný program aj zo zadania ktoré mu dá úplný laik.

Keďže sa mi nechcelo študovať aká je syntax pre jednoduchý numerický výpočet so zadaním vstupnej hodnoty ( zjednodušený výpočet čistej mzdy), vyskúšal som to cez CHAT-GPT. Program bol funkčný, síce najprv nepočítal presne to, čo som chcel ale podarilo sa inštruovať četbot k správnemu riešeniu. V dialógu sa podarilo opraviť aj moju chybu aj chybu ktorú urobil četbot.

Zaujímavé je, že program bol dobrý ale četbot simuloval zlú výstupnú hodnotu aj keď program v reálnom prostredí rátal dobre. Pri pokuse na to upozorniť sa už celkom poplietol a generované odpovede už boli úplne mimo. Každopádne ak má človek predstavu ako približne ten program má fungovať a vo výsledku aspoň rozozná štruktúru tak ak aj četbot nevygeneruje úplne presne čo chceme, tak ako nápoveda vyzerá byť úžasný.

?- [user].

|: salary_calculation :-

write('Enter gross salary: '),

read(GrossSalary),

social_insurance(GrossSalary, SocialInsurance),

health_insurance(GrossSalary, HealthInsurance),

TaxBase is GrossSalary - SocialInsurance - HealthInsurance,

untaxable_amount(UntaxableAmount),

taxable_income(TaxBase, UntaxableAmount, TaxableIncome),

tax(TaxableIncome, Tax),

NettSalary is GrossSalary - SocialInsurance - HealthInsurance - Tax,

write('Nett Salary: '), write(NettSalary), nl,

write('Deductions:'), nl,

write(' Social Insurance: '), write(SocialInsurance), nl,

write(' Health Insurance: '), write(HealthInsurance), nl,

write(' Tax Base: '), write(TaxBase), nl,

write(' Taxable Income: '), write(TaxableIncome), nl,

write(' Tax: '), write(Tax), nl.

social_insurance(GrossSalary, SocialInsurance) :-

SocialInsurance is 0.094 * GrossSalary.

health_insurance(GrossSalary, HealthInsurance) :-

HealthInsurance is 0.04 * GrossSalary.

untaxable_amount(410).

taxable_income(TaxBase, UntaxableAmount, TaxableIncome) :-

TaxableIncome is max(0, TaxBase - UntaxableAmount).

tax(TaxableIncome, Tax) :-

Tax is 0.19 * TaxableIncome.

|: |: |: |: |: |: |: |: |: |: |: |: |: |: |: |: |: |: |: |: |: |: |: |: |: |: |

% user://1 compiled 0.02 sec, 6 clauses

true.

A samotný program pracuje tak, že po nahratí pravidiel hore, zadáme cieľ výpočtu :

?- salary_calculation.

Enter gross salary: 1000.

Nett Salary: 779.36

Deductions:

Social Insurance: 94.0

Health Insurance: 40.0

Tax Base: 866.0

Taxable Income: 456.0

Tax: 86.64

true.

Numerický príklad nehovorí veľa o výnimočnosti jazyka Prolog preto jediné čo je tam odlišné, že program sa skladá z klauzúl a hodnota aritmetickej operácie sa vracia príkazom "is" a nie symbolom rovná sa.

Prolog vždy na konci vypíše true alebo false čo je vlastne spôsobené tým že celý program len vyhodnocuje logický výraz.

S jazykom PROLOG sa vraj najlepšie pracuje tak, že najprv musíte zabudnúť úplne všetko čo platí pre ostatné programovacie jazyky.

Matúš Lazúr

Matúš Lazúr

Bloger 
Populárny bloger
  • Počet článkov:  154
  •  | 
  • Páči sa:  1 728x

Dokážem usedavo ležať. Zoznam autorových rubrík:  AustráliaMalajziaSúkromnéNezaradenéVeda a technikaO dobe kovidovej

Prémioví blogeri

INEKO

INEKO

117 článkov
Marian Nanias

Marian Nanias

274 článkov
Pavol Koprda

Pavol Koprda

10 článkov
Karol Galek

Karol Galek

115 článkov
Juraj Hipš

Juraj Hipš

12 článkov
Marcel Rebro

Marcel Rebro

135 článkov
reklama
reklama
SkryťZatvoriť reklamu