Nagy nyelvi modellek (LLM-ek)
Megjegyzés:
További részletekért tekintse meg a Szöveg és képek lapot!
A generatív AI középpontjában a nagy nyelvi modellek (LLM-ek) - és kompaktabb kapcsolataik, a kis nyelvi modellek (SLM-ek) - a szavak és kifejezések közötti nyelvi és szemantikai kapcsolatokat foglalja magában a szókincsben. A modell felhasználhatja ezeket a kapcsolatokat a természetes nyelvi bemenetek alapján történő következtetéshez, és értelmes és releváns válaszokat generálhat.
Az LLM-eket alapvetően arra tanítjuk be, hogy befejezéseket generáljanak kérések alapján. Képzeld el őket úgy, mint a prediktív szövegbevitel funkció rendkívül erős példáit sok mobiltelefonon. A parancssor olyan szöveges előrejelzések sorozatát indítja el, amelyek szemantikailag helyes befejezést eredményeznek. A trükk az, hogy a modell megérti a szavak közötti kapcsolatokat, és meg tudja állapítani, hogy az eddigi sorrendben mely szavak befolyásolják a legnagyobb valószínűséggel a következőt; és ezzel előrejelezheti a sorozat legvalószínűbb folytatását.
Vegyük például a következő mondatot:
Hallottam, ahogy egy kutya hangosan ugat egy macskánál.
Tegyük fel, hogy csak az első néhány szót hallotta: "Hallottam egy kutyát ...". Tudod, hogy néhány ilyen szó hasznosabb nyom arra, hogy mi lehet a következő szó, mint mások. Tudod, hogy a "hallott" és a "kutya" erős jelzések arra vonatkozóan, hogy mi következik, és ez segít szűkíteni a valószínűségeket. Tudod, hogy jó esély van rá, hogy a mondat folytatódni fog , mint " hallottam egy kutyaugatását".
Kitalálhatja a következő szót, mert:
- Nagy szókészlete van a szavaknak, amelyekből rajzolni kell.
- Megtanulta a közös nyelvi struktúrákat, így tudja, hogyan viszonyulnak egymáshoz a szavak értelmes mondatokban.
- Tisztában van a szavak szemantikai fogalmaival - tudja, hogy valami, amit hallott , valamilyen hangnak kell lennie, és tudja, hogy vannak bizonyos hangok, amelyeket egy kutya készít.
Hogyan tanítunk be egy modellt, hogy ugyanazokkal a képességekkel rendelkezzen?
Tokenizálás
Az első lépés az, hogy a modell nagy szókincset biztosít szavakból és kifejezésekből; és valóban nagyot értünk alatta. Az LLM-k legújabb generációja több százezer tokenből álló vokabulárokkal rendelkezik, amelyek nagy mennyiségű betanítási adaton alapulnak az interneten és más forrásokból.
Várj egy percet. Jogkivonatok?
Bár hajlamosak vagyunk a nyelvre szavakban gondolni, az LLM-ek a szókincsüket tokenekre bontják. A tokenok közé tartoznak a szavak, de a részszavak is (például a "un" előtag a "hihetetlen" és a "valószínűtlen" szavakban), az írásjelek, és más gyakran használt karaktersorozatok. A nagy nyelvi modell betanításának első lépése tehát a betanítási szöveg különálló jogkivonatokra bontása, és egyedi egész számazonosító hozzárendelése mindegyikhez, például a következőhöz:
- Én (1)
- hallott (2)
- a (3)
- kutya (4)
- kéreg (5)
- hangosan (6)
- at (7)
- a (3) már hozzárendelve
- macska (8)
és így tovább.
Ahogy egyre több betanítási adatot ad hozzá, több token kerül a szókincsbe, és azonosítókhoz lesznek hozzárendelve; így előfordulhat, hogy tokene lesz például olyan szavaknak, mint kiskutya, gördeszka, autó, és mások.
Megjegyzés:
Ebben az egyszerű példában a példaszöveget szavak alapján tokenizáltuk. A valóságban alszavak, írásjelek és más tokenek is léteznek.
Tokenek átalakítása transzformátorral
Most, hogy rendelkezünk egyedi azonosítókkal rendelkező tokenekkel, módot kell találnunk arra, hogy összekapcsoljuk őket. Ehhez minden tokenhez egy vektort rendelünk (több numerikus értékből álló tömböt, például [1, 23, 45]). Minden vektor több numerikus elemmel vagy dimenzióval rendelkezik, és ezekkel kódolhatjuk a jogkivonat nyelvi és szemantikai attribútumait, így sok információt kaphatunk arról, hogy mit jelent a jogkivonat, és hogyan kapcsolódik más jogkivonatokhoz, hatékony formátumban.
Át kell alakítanunk a tokenek eredeti vektorábrázolását új vektorokká, amelyekbe nyelvi és szemantikai jellemzők vannak beágyazva, a tréningadatokban való megjelenésük környezetének alapján. Mivel az új vektorok szemantikai értékeket ágyaznak be, beágyazásoknak nevezzük őket.
A feladat elvégzéséhez transzformátormodellt használunk. Ez a modell két "blokkból" áll:
- Egy kódolóblokk, amely egy figyelem mechanizmus nevű technika alkalmazásával hozza létre a beágyazásokat. A figyelemréteg minden egyes tokent vizsgál, és meghatározza, milyen hatással vannak rá a körülötte lévő tokenek. A kódolási folyamat hatékonyabbá tétele érdekében a többfejes figyelem a jogkivonat több elemének párhuzamos kiértékelésére és az új vektorelem-értékek kiszámítására használható súlyok hozzárendelésére szolgál. A figyelemréteg eredményei egy teljesen csatlakoztatott neurális hálózatba kerülnek, hogy megtalálják a beágyazás legjobb vektorábrázolását.
- Egy dekódoló réteg, amely a kódoló által kiszámított beágyazásokat használja a következő legvalószínűbb token meghatározásához egy indítás által kezdeményezett sorozatban. A dekóder a figyelmet és az előrecsatolt neurális hálózatot is használja az előrejelzések készítéséhez.
Megjegyzés:
Jelentősen leegyszerűsítettük a transzformátor architektúráját és folyamatát a leírásban és a diagramban. Ne aggódjon túlságosan a figyelem működésének konkrét részletei miatt – a lényeg az, hogy segít rögzíteni az egyes tokenek nyelvi és szemantikai jellemzőit a használt környezetek alapján. Ha mélyebb betekintést szeretne a transzformer architektúrájába és abba, hogy hogyan használja fel a figyelmet, elolvashatja az eredeti A figyelem minden, amire szükséged van tanulmányt.
Kezdeti vektorok és pozíciókódolás
Kezdetben a tokenvektor értékeit véletlenszerűen rendeli hozzá a rendszer, mielőtt a transzformátoron keresztül táplálná őket beágyazási vektorok létrehozásához. A tokenvektorokat a transzformátorba etetjük, valamint egy pozíciókódolást , amely jelzi, hogy hol jelenik meg a jogkivonat a betanítási szöveg sorozatában (ezt azért kell tennünk, mert a jogkivonatok sorrendje a sorozatban való megjelenésük szempontjából releváns az egymáshoz való viszonyuk szempontjából). Például a tokenek így nézhetnek ki:
| Jelző | Jogkivonat azonosítója | Position | Vector |
|---|---|---|---|
| I | 1 | 1 | [3, 7, 10] |
| hallott | 2 | 2 | [2, 15, 1] |
| de | 3 | 3 | [9, 11, 1] |
| kutya | 4 | 4 | [2, 7, 11] |
| kéreg | 5 | 5 | [9, 12, 0] |
| hangosan | 6 | 6 | [3, 8, 13] |
| at | 7 | 7 | [5, 7, 10] |
| de | 3 | 8 | [9, 11, 1] |
| macska | 8 | 9 | [8, -6, 9 ] |
| ... | ... | ... | ... |
| kiskutya | 127 | 45 | [7, 7, -2] |
| autó | 128 | 56 | [5, -5, 1 ] |
| gördeszka | 129 | 67 | [4, 7, 14] |
Megjegyzés:
Egyszerűnek tartottuk a dolgokat úgy, hogy csak három elemet tartalmazó vektorokat használunk (ez segít majd a későbbi három dimenzióban való vizualizációban). A valóságban a vektorok több ezer elemből áll.
Figyelem és beágyazások
A beágyazott környezeti információkat tartalmazó jogkivonatok vektoros ábrázolásának meghatározásához a transzformátor figyelemrétegeket használ. A figyelemréteg minden egyes tokenet egymás után vesz figyelembe, azon tokenek sorozatának kontextusában, amelyben megjelenik. Az aktuális token körüli tokenek súlyozottak az általuk kifejtett hatás tükrözése érdekében. Ezek a súlyok felhasználásra kerülnek az aktuális token beágyazási vektorához tartozó elemértékek kiszámítására. Ha például az "ugatás" tokenet a "Hallottam egy kutyát ugatni" kontextusban veszi figyelembe, a "heard" és a "dog" tokenek nagyobb súlyt kapnak, mint az "I" vagy az "a", mivel erősebb jelzői az "ugatásnak".
A modell kezdetben nem "tudja", hogy mely jogkivonatok befolyásolnak másokat; de mivel nagyobb mennyiségű szövegnek van kitéve, iteratív módon megtanulhatja, hogy mely jogkivonatok jelennek meg együtt, és olyan mintákat kereshet, amelyek segítenek a tokenek nyelvi és szemantikai jellemzőit tükröző vektorelemekhez olyan értékeket rendelni, amelyek közelsége és gyakorisága alapján együtt használják őket. A folyamat hatékonyabb azáltal, hogy többirányú figyelmet használ a vektorok különböző elemeinek párhuzamos figyelembe vételére.
A kódolási folyamat eredménye beágyazások halmaza; vektorok, amelyek környezeti információkat tartalmaznak arról, hogy a szókincsben lévő jogkivonatok hogyan kapcsolódnak egymáshoz. Egy valódi transzformátor több ezer elemből álló beágyazásokat hoz létre, de az egyszerűség érdekében ragaszkodjunk a példánkban csak három vektort tartalmazó vektorokhoz. A szókészlet kódolási folyamatának eredménye a következőhöz hasonló lehet:
| Jelző | Jogkivonat azonosítója | Beágyazás |
|---|---|---|
| I | 1 | [2, 0, -1] |
| hallott | 2 | [-2, 2, 4 ] |
| de | 3 | [-3, 5, 5 ] |
| kutya | 4 | [10, 3, 2 ] |
| kéreg | 5 | [9, 2, 10 ] |
| hangosan | 6 | [-3, 8, 3 ] |
| at | 7 | [-5, -1, 1] |
| macska | 8 | [10, 3, 1] |
| kiskutya | 127 | [5, 3, 2 ] |
| autó | 128 | [-2, -2, 1 ] |
| gördeszka | 129 | [-3, -2, 2 ] |
| kéreg | 203 | [2, -2, 3 ] |
Ha megfigyeli, észrevehette, hogy az eredmények két beágyazást tartalmaznak a "kéreg" jogkivonathoz. Fontos tisztában lenni azzal, hogy a beágyazások egy adott környezetben lévő jogkivonatot jelölnek; és egyes jogkivonatok több dolgot is jelenthetnek. Például a kutyakérge eltér a fakérgétől! A különböző kontextekben gyakran használt tokenek vagy elemek többféle beágyazást is létrehozhatnak.
A beágyazások elemeit dimenzióként tekinthetjük egy többdimenziós vektortérbe. Az egyszerű példánkban a beágyazásoknak csak három eleme van, így vektorként jeleníthetjük meg őket háromdimenziós térben, például:
Mivel a dimenziók kiszámítása a tokenek nyelvtani kapcsolatuk alapján történik, a hasonló kontextusban használt (és ezért hasonló jelentéssel rendelkező) tokenek hasonló irányú vektorokat eredményeznek. A "kutya" és a "kölyök" beágyazása például többé-kevésbé azonos irányba mutat, ami nem különbözik túl a "macska" beágyazásától; de nagyon különbözik a "gördeszka" vagy az "autó" beágyazásától. A vektorok koszinuszos hasonlóságának kiszámításával szemantikai értelemben mérhetjük, hogy milyen közel állnak egymáshoz a tokenek.
Befejezések előrejelzése a parancssorból
Most, hogy már van egy beágyazási készletünk, amely beágyazza a tokenek közötti környezetfüggő kapcsolatot, használhatjuk a transzformátor dekóderblokkját a következő szó iteratív előrejelzésére egy kezdő parancssor alapján.
A rendszer ismét figyelmet fordít az egyes tokenek kontextusban való figyelembevételére; de ezúttal a megfontolandó környezet csak azokat a tokeneket tartalmazhatja, amelyek megelőzik az előrejelezni kívánt tokenet. A dekódermodell betanítása úgy történik, hogy olyan adatokat használunk, amelyekhez már megvan a teljes sorozat, a maszkolt figyelem nevű technikát alkalmazva; amelyben az aktuális token utáni tokeneket figyelmen kívül hagyjuk. Mivel a képzés során már tudjuk a következő tokent, a transzformátor összehasonlíthatja a megjósolt tokennel, és a későbbi képzési iterációkban módosíthatja a tanult súlyokat a modell hibájának csökkentése érdekében.
Új kiegészítés előrejelzésekor, amelynek következő tokenjei ismeretlenek, a figyelemrétegek kiszámítják a következő token lehetséges vektorait, és az előrecsatolt hálózat segít meghatározni a legvalószínűbb jelöltet. Az előrejelzett érték ezután hozzáadódik a sorozathoz, és az egész folyamat ismétlődik a következő jogkivonat előrejelzéséhez; és így tovább, amíg a dekóder előre nem jelzi, hogy a sorozat véget ért.
Például a "Mikor a kutyám volt ..." sorozatot tekintve a modell kiértékeli a sorozat eddigi tokeneit, súlyok hozzárendelésére használja a figyelmet , és előrejelzi, hogy a következő legvalószínűbb token a "kiskutya" ahelyett, hogy mondjuk "macska" vagy "gördeszka".