Įvadas
Dideli kalbos modeliai (LLM) pastaraisiais metais sukėlė revoliuciją natūralios kalbos apdorojimo (NLP) srityje. Šie modeliai pasiekė naujausių rezultatų atliekant įvairias NLP užduotis, įskaitant kalbos vertimą, teksto apibendrinimą ir atsakymus į klausimus. Tačiau tikrasis LLM potencialas slypi jų gebėjime samprotauti ir suprasti sudėtingus sąvokų ryšius. Šiame straipsnyje mes gilinsimės į LLM samprotavimo pažangą, išnagrinėsime pagrindinius metodus, architektūrą ir iššūkius.
Fonas
LLM yra neuroninio tinklo tipas, kuris yra apmokytas naudojant daugybę tekstinių duomenų, kad išmoktų žodžių ir sąvokų modelius ir ryšius. Šiuos modelius paprastai sudaro koduotuvas ir dekoderis, kur koduotuvas apdoroja įvesties tekstą, o dekoderis generuoja išvesties tekstą. Kodavimo įrenginys paprastai yra transformatoriaus architektūra, kuri ypač gerai tinka nuosekliems duomenims, pvz., tekstui.
Transformatoriaus architektūra
Transformatoriaus architektūra, pristatyta Vaswani ir kt. darbe „Dėmesys yra viskas, ko jums reikia“. (2017), tapo de facto LLM standartu. Transformatorius susideda iš kodavimo ir dekoderio, kurių kiekvienas sudarytas iš kelių sluoksnių. Kiekvienas sluoksnis susideda iš dviejų antrinių sluoksnių: savęs dėmesio mechanizmo ir visiškai prijungto perdavimo tinklo (FFNN).
importo žibintuvėlis
importuoti žibintuvėlį.nn kaip nn
klasė TransformerLayer(nn.Module):
def __init__(self, d_model, n_heads, d_ff):
super(TransformerLayer, self).__init__()
self.self_attn = nn.MultiHeadAttention(d_modelis, n_galvų)
self.ffnn = nn.Linear(d_model, d_ff)
self.dropout = nn.Dropout(0.1)
self.layer_norm = nn.LayerNorm(d_model)
def pirmyn (savęs, x):
# Dėmesio į save mechanizmas
x_attn = self.self_attn(x, x)
x_attn = self.dropout(x_attn)
x_attn = x + x_attn
# FFNN
x_ffnn = self.ffnn(x_attn)
x_ffnn = self.dropout(x_ffnn)
x_ffnn = self.layer_norm(x_ffnn + x_attn)
grąžinti x_ffnn
LLM samprotavimų pažanga
LLM padarė didelę pažangą mąstydami ir suprasdami sudėtingus sąvokų ryšius. Kai kurie pagrindiniai pažanga apima:
1. Grafikais pagrįstas samprotavimas
Grafikais pagrįstas samprotavimas apima žinių vaizdavimą kaip grafiką, kur mazgai vaizduoja sąvokas, o briaunos – ryšius tarp jų. LLM gali būti išmokyti samprotauti dėl šių grafikų, numatant ryšius tarp mazgų.
naudoti grafiką::Grafas;
naudoti neural_network::NeuralNetwork;
fn graph_reasoning(grafas: &grafikas, užklausa: &str) -> Eilutė {
tegul įterpimas = neural_network.query(grafas, užklausa);
tegul rezultatas = neural_network.reason(graph, embedding);
result.to_string()
}
2. Mokymasis iš kelių užduočių
Kelių užduočių mokymasis apima vieno modelio mokymą atliekant kelias užduotis vienu metu. Įrodyta, kad šis metodas pagerina LLM našumą atliekant įvairias užduotis, įskaitant samprotavimus ir sudėtingų santykių supratimą.
pagrindinis paketas
importuoti (
"fmt"
"gonum.org/v1/gonum/mat"
)
tipo modelis struct {
*nn.Tiesinis
*nn.Tiesinis
}
func (m *Modelis) Pirmyn (x *mat.Tankus) *mat.Tankus {
// Perdavimas pirmyn
z := m.Tiesinis(x)
z = m. Tiesinė (z)
grąžinti z
}
3. Dėmesio mechanizmai
Dėmesio mechanizmai leidžia LLM generuojant išvestį sutelkti dėmesį į konkrečias įvesties teksto dalis. Įrodyta, kad šis metodas pagerina LLM našumą atliekant įvairias užduotis, įskaitant samprotavimus ir sudėtingų santykių supratimą.
importo žibintuvėlis
importuoti žibintuvėlį.nn kaip nn
klasės dėmesio mechanizmas (nn. modulis):
def __init__(self, d_model, n_heads):
super(dėmesio mechanizmas, savęs).__init__()
self.query = nn.Tiesinis(d_modelis, d_modelis)
self.key = nn.Tiesinis(d_modelis, d_modelis)
self.value = nn.Tiesinis(d_modelis, d_modelis)
self.dropout = nn.Dropout(0.1)
self.layer_norm = nn.LayerNorm(d_model)
def pirmyn (savęs, x):
# Užklausa, raktas ir vertė
q = self.query(x)
k = self.key(x)
v = self.value(x)
# Dėmesio svarmenys
svoriai = torch.matmul(q, k.T) / math.sqrt(q.shape[1])
svoriai = self.dropout(svoriai)
svoriai = degiklis.softmax(svoriai, dim = -1)
# Konteksto vektorius
kontekstas = torch.matmul(svoriai, v)
grąžinti kontekstą
Vizualizacija
Norėdami vizualizuoti LLM našumą atliekant įvairias užduotis, galime naudoti diagramą, kad palygintume skirtingų modelių tikslumą atliekant tam tikrą užduotį. Čia yra diagramos, naudojant Chart.js, pavyzdys:
{
"tipas": "juosta",
"duomenys": {
"etiketės": ["Task 1", "Task 2", "Task 3"],
"duomenų rinkiniai": [
{
"etiketė": "1 modelis",
"duomenys": [0,8, 0,7, 0,9],
"backgroundColor": "rgba(255, 99, 132, 0.2)",
"borderColor": "rgba(255, 99, 132, 1)",
"borderWidth": 1
},
{
"etiketė": "2 modelis",
"duomenys": [0,9, 0,8, 0,7],
"backgroundColor": "rgba(54, 162, 235, 0.2)",
"borderColor": "rgba(54, 162, 235, 1)",
"borderWidth": 1
}
]
},
"parinktys": {
"pavadinimas": {
"display": tiesa,
"text": "Įvairių modelių tikslumas atliekant įvairias užduotis"
},
"svarstyklės": {
„yAxes“: [
{
"erkės": {
"beginAtZero": tiesa
}
}
]
}
}
}
Išvada
Šiame straipsnyje mes išnagrinėjome LLM samprotavimo pažangą, įskaitant grafiku pagrįstą samprotavimą, mokymąsi atliekant kelias užduotis ir dėmesio mechanizmus. Šioms sąvokoms iliustruoti taip pat pateikėme kodo pavyzdžių Python, Rust ir Go. Galiausiai, mes panaudojome diagramą, norėdami vizualizuoti LLM veiklą atliekant įvairias užduotis. Šie pasiekimai gali pakeisti NLP sritį, leisdami LLM mąstyti ir suprasti sudėtingus sąvokų ryšius.
Nuorodos
- Vaswani ir kt. (2017). Dėmesys yra viskas, ko jums reikia. arXiv išankstinis spausdinimas arXiv:1706.03762.
- Devlin ir kt. (2018). BERT: išankstinis giluminių dvikrypčių transformatorių mokymas kalbos supratimui. arXiv išankstinis spausdinimas arXiv:1810.04805.
- Radfordas ir kt. (2019). Kalbos modeliai yra neprižiūrimi daugiafunkciniai mokiniai. arXiv preprint arXiv:1906.08237.