Sissejuhatus
Suured keelemudelid (LLM) on viimastel aastatel muutnud loomuliku keele töötlemise (NLP) valdkonna. Need mudelid on saavutanud tipptasemel tulemusi mitmesugustes NLP ülesannetes, sealhulgas keele tõlkimises, teksti kokkuvõtte tegemises ja küsimustele vastamises. LLM-ide tõeline potentsiaal seisneb aga nende võimes arutleda ja mõista mõistete vahelisi keerulisi seoseid. Selles artiklis süveneme LLM-i arutluskäigu edusammudesse, uurides selle aluseks olevaid tehnikaid, arhitektuure ja väljakutseid.
Taust
LLM-id on teatud tüüpi närvivõrk, mis on koolitatud suurel hulgal tekstiandmetel, et õppida sõnade ja mõistete vahelisi mustreid ja seoseid. Need mudelid koosnevad tavaliselt kodeerijast ja dekoodrist, kus kodeerija töötleb sisendteksti ja dekooder genereerib väljundteksti. Kodeerija on tavaliselt trafopõhine arhitektuur, mis sobib eriti hästi järjestikuste andmete (nt teksti) jaoks.
Transformeri arhitektuur
Trafo arhitektuur, mida tutvustasid Vaswani jt artiklis "Tähelepanu on kõik, mida vajate". (2017), on saanud LLM-ide de facto standardiks. Trafo koosneb kodeerijast ja dekoodrist, millest igaüks koosneb mitmest kihist. Iga kiht koosneb kahest alamkihist: enesetähelepanu mehhanismist ja täielikult ühendatud feed-forward võrgust (FFNN).
import tõrvik
import tõrvik.nn kui nn
klass TransformerLayer(nn.Module):
def __init__(ise, d_mudel, n_heads, d_ff):
super(TransformerLayer, ise).__init__()
self.self_attn = nn.MultiHeadAttention(d_mudel, n_heads)
ise.ffnn = nn.Lineaarne(d_mudel, d_ff)
self.dropout = nn.Dropout(0,1)
self.layer_norm = nn.LayerNorm(d_model)
def forward(ise, x):
# Enesetähelepanu mehhanism
x_attn = ise.self_attn(x, x)
x_attn = self.dropout(x_attn)
x_attn = x + x_attn
# FFNN
x_ffnn = ise.ffnn(x_attn)
x_ffnn = self.dropout(x_ffnn)
x_ffnn = ise.kihi_norm(x_ffnn + x_attn)
tagasta x_ffnn
Edusammud LLM-i arutluskäigus
LLM-id on saavutanud märkimisväärseid edusamme mõistetevaheliste keerukate suhete põhjendamisel ja mõistmisel. Mõned peamised edusammud hõlmavad järgmist:
1. Graafikupõhine arutluskäik
Graafikupõhine arutluskäik hõlmab teadmiste esitamist graafikuna, kus sõlmed esindavad mõisteid ja servad nendevahelisi suhteid. LLM-e saab koolitada nende graafikute üle arutlema, tehes ennustusi sõlmede vaheliste suhete kohta.
kasuta graafikut::Graafik;
kasuta neural_network::NeuralNetwork;
fn graph_reasoning(graafik: &graafik, päring: &str) -> String {
let embedding = neural_network.query(graaf, päring);
let result = neural_network.reason(graph, embedding);
result.to_string()
}
2. Multi-Task õpe
Mitme ülesandega õppimine hõlmab ühe mudeli treenimist mitme ülesande jaoks samaaegselt. On näidatud, et see lähenemisviis parandab LLM-ide jõudlust erinevate ülesannete täitmisel, sealhulgas arutluskäiku ja keeruliste suhete mõistmist.
pakett peamine
import (
"fmt"
"gonum.org/v1/gonum/mat"
)
tüüp Model struct {
*nn.Lineaarne
*nn.Lineaarne
}
func (m *mudel) Edasi (x *matt.Tihe) *matt.Tihe {
// Edasipääs
z := m.Lineaarne(x)
z = m. Lineaarne(z)
tagasi z
}
3. Tähelepanu mehhanismid
Tähelepanumehhanismid võimaldavad LLM-idel keskenduda väljundi loomisel sisendteksti teatud osadele. On näidatud, et see lähenemisviis parandab LLM-ide jõudlust erinevate ülesannete täitmisel, sealhulgas arutluskäiku ja keeruliste suhete mõistmist.
import tõrvik
import tõrvik.nn kui nn
klassi tähelepanumehhanism (nn. moodul):
def __init__(self, d_model, n_heads):
super(tähelepanumehhanism, ise).__init__()
self.query = nn.Lineaarne(d_mudel, d_mudel)
self.key = nn.Lineaarne(d_mudel, d_mudel)
self.value = nn.Lineaarne(d_mudel, d_mudel)
self.dropout = nn.Dropout(0,1)
self.layer_norm = nn.LayerNorm(d_model)
def forward(ise, x):
# Päring, võti ja väärtus
q = self.query(x)
k = self.key(x)
v = iseväärtus(x)
# Tähelepanu kaalud
kaalud = tõrvik.matmul(q, k.T) / math.sqrt(q.shape[1])
kaalud = self.dropout(kaalud)
kaalud = taskulamp.softmax(kaalud, dim = -1)
# Konteksti vektor
kontekst = torch.matmul(kaalud, v)
tagastab konteksti
Visualiseerimine
LLM-ide toimivuse visualiseerimiseks erinevate ülesannete puhul saame kasutada diagrammi, et võrrelda erinevate mudelite täpsust antud ülesande puhul. Siin on Chart.js-i kasutava diagrammi näide:
{
"type": "bar",
"andmed": {
"sildid": ["Task 1", "Task 2", "Task 3"],
"andmestikud": [
{
"label": "Mudel 1",
"andmed": [0,8, 0,7, 0,9],
"backgroundColor": "rgba(255, 99, 132, 0.2)",
"borderColor": "rgba(255, 99, 132, 1)",
"borderWidth": 1
},
{
"label": "Mudel 2",
"andmed": [0,9, 0,8, 0,7],
"backgroundColor": "rgba(54, 162, 235, 0,2)",
"borderColor": "rgba(54, 162, 235, 1)",
"borderWidth": 1
}
]
},
"valikud": {
"pealkiri": {
"ekraan": tõsi,
"text": "Erinevate mudelite täpsus erinevatel ülesannetel"
},
"kaalud": {
"yAxes": [
{
"puugid": {
"beginAtZero": tõsi
}
}
]
}
}
}
Järeldus
Selles artiklis oleme uurinud LLM-i arutluskäigu edusamme, sealhulgas graafikupõhist arutlust, mitme ülesandega õppimist ja tähelepanumehhanisme. Oleme nende mõistete illustreerimiseks pakkunud ka koodinäiteid Pythonis, Rustis ja Go. Lõpuks oleme kasutanud diagrammi, et visualiseerida LLM-ide toimivust erinevatel ülesannetel. Need edusammud võivad NLP valdkonda revolutsiooniliselt muuta, võimaldades LLM-idel arutleda ja mõista mõistete vahelisi keerulisi seoseid.
Viited
- Vaswani jt. (2017). Tähelepanu on kõik, mida vajate. arXiv eeltrükk arXiv:1706.03762.
- Devlin jt. (2018). BERT: kahesuunaliste sügavate transformaatorite eelkoolitus keele mõistmiseks. arXiv eeltrükk arXiv:1810.04805.
- Radford et al. (2019). Keelemudelid on järelevalveta multitegumõppijad. arXiv eeltrükk arXiv:1906.08237.