Zakłopotanie modeli językowych

Nov 27 2022
Zakłopotanie jest miarą oceny, która mierzy jakość modeli językowych. W tym poście omówimy, czym jest konsternacja i jak jest obliczana dla popularnego modelu GPT2.

Zakłopotanie jest miarą oceny, która mierzy jakość modeli językowych. W tym poście omówimy, czym jest konsternacja i jak jest obliczana dla popularnego modelu GPT2 .

Co to jest model językowy?

Być może słyszałeś już o dużych modelach językowych (LLM), takich jak BERT, GPT2 itp., które zmieniły oblicze przetwarzania języka naturalnego. Istnieją różne typy modeli językowych, takie jak statystyczne modele językowe i neuronowe modele językowe. SLM są oparte na statystykach w danym tekście, gdzie modele języka neuronowego są trenowane przy użyciu architektur sieci neuronowych.

W swej istocie model językowy (LM) to nic innego jak rozkład prawdopodobieństwa w zestawie słów, który jest znany jako słownictwo modelu. Mówi o prawdopodobieństwie wystąpienia określonego słowa w słowniku, biorąc pod uwagę wszystkie jego poprzednie słowa. Zwykle każde słowo, które ma maksymalne prawdopodobieństwo, jest wybierane jako następne przewidywane słowo w sekwencji.

Prawdopodobieństwo to można obliczyć, mnożąc sekwencję prawdopodobieństw warunkowych dla każdego słowa, biorąc pod uwagę jego poprzednie słowa, co daje prawdopodobieństwo tej sekwencji.

Na przykład łączne prawdopodobieństwo zdania przykładowego „Jest piękny dzień” jest zapisane w sposób przedstawiony poniżej. Obliczenie tego prawdopodobieństwa pomaga nam przewidywać kolejne lub brakujące słowa w sekwencji, dzięki czemu model uczy się niuansów języka — stąd termin model językowy.

P(It,is,a,beautiful,day) = P(day|beautiful, a, is, it) * 
                           P(beautiful|a, is, it) * P(a|is, it) * P(is|it)

W następnych rozdziałach omówimy kilka ważnych terminów używanych do obliczania Zakłopotania.

Entropia

Entropia jest miarą, która określa ilościowo niepewność i jest uzyskiwana jako odwrotność prawdopodobieństwa wystąpienia zdarzenia. Im większe prawdopodobieństwo, tym mniejsza niepewność. Stąd celem modelu językowego jest zminimalizowanie entropii generowania sekwencji słów podobnych do sekwencji uczących. Wzór do obliczania entropii jest podany poniżej, gdzie P(x) jest prawdopodobieństwem wystąpienia słowa x.

Wzór na entropię rozkładu prawdopodobieństwa

Oto świetny film, aby bardziej szczegółowo zrozumieć Entropię:https://youtube.com/watch?v=YtebGVx-Fxw

Entropia krzyżowa

Cross Entropy porównuje dwa rozkłady prawdopodobieństwa P(x) i Q(x). W kontekście modeli językowych porównujemy przewidywany rozkład prawdopodobieństwa dla słów z rzeczywistym rozkładem prawdopodobieństwa. Tutaj P(x) to rzeczywisty rozkład prawdopodobieństwa, a Q(x) to rozkład przewidywany przez model. Następnie oblicza się entropię krzyżową, jak pokazano poniżej, którą można wykorzystać jako funkcję strat do trenowania modeli językowych.

Załóżmy, że mamy model języka, który został wytrenowany ze słownictwem składającym się tylko z 5 słów „słoneczny”, „dzień”, „piękny”, „krajobraz”, „chmury”. Teraz chcemy obliczyć zakłopotanie modelu, gdy widzi frazę „piękna sceneria”.

Obliczmy entropię krzyżową na prostym przykładzie w PyTorch.

# Get the needed libraries
import torch
from torch.nn import functional as F

Logity te są następnie przekazywane do funkcji softmax , która normalizuje wartości i przekształca je w rozkład prawdopodobieństwa. To jest przewidywany rozkład prawdopodobieństwa.

tensor([[-0.7891,  1.3421,  0.4929,  0.0715, -0.0910],
        [ 0.9024, -0.8675,  0.8498, -1.0331,  0.5531]])

F.softmax(input, dim = -1)

Predicted:

tensor([[0.0575, 0.4841, 0.2071, 0.1359, 0.1155],
        [0.3369, 0.0574, 0.3196, 0.0486, 0.2375]])

Target/Actual: tensor([2, 3])

tensor([[0, 0, 1, 0, 0],
        [0, 0, 0, 1, 0]])

Loss for First Word:
(((- 0 * log(0.0575)) + (- 0 * log(0.4841)) + (- 1 * log(0.2071)) + 
  (- 0 * log(0.1359)) + (- 0 * log(0.1155))) = 1.5745535105805986

Loss for Second Word:
(((- 0 * log(0.3369)) + (- 0 * log(0.0574)) + (- 0* log(0.3196)) + 
  (- 1* log(0.0486)) + (- 0 * log(0.2375))) = 3.024131748075689

Loss = (1.5745535105805986 + 3.024131748075689)/2 = 2.299

loss = torch.nn.CrossEntropyLoss()

output = loss(input, target)
output

Loss: tensor(2.299)

Intuicyjnie zakłopotanie oznacza zaskoczenie. Mierzymy, jak bardzo model jest zaskoczony widząc nowe dane. Im mniejsze zakłopotanie, tym lepszy trening.

Konsternację oblicza się jako wykładnik straty otrzymanej z modelu. Na powyższym przykładzie widzimy, że zakłopotanie naszego przykładowego modelu w odniesieniu do frazy „piękna sceneria” wynosi 9,97. Wzór na zakłopotanie jest wykładnikiem średniej logarytmu prawdopodobieństwa wszystkich słów w sekwencji wejściowej.

Formuła zakłopotania od HuggingFace

Teraz porównajmy zakłopotanie dwóch zdań z GPT2 i zobaczmy, jak zakłopotany jest. Najpierw ładujemy tokenizer i głowę przyczynową dla modelu GPT2 z HuggingFace:

from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("gpt2")
tokenizer = AutoTokenizer.from_pretrained("gpt2")
inputs = tokenizer("ABC is a startup based in New York City and Paris", return_tensors = "pt")
loss = model(input_ids = inputs["input_ids"], labels = inputs["input_ids"]).loss
ppl = torch.exp(loss)
print(ppl)

Output: 29.48

inputs_wiki_text = tokenizer("Generative Pretrained Transformer is an opensource artificial intelligence created by OpenAI in February 2019", return_tensors = "pt")
loss = model(input_ids = inputs_wiki_text["input_ids"], labels = inputs_wiki_text["input_ids"]).loss
ppl = torch.exp(loss)
print(ppl)

Output: 211.81

Zakłopotanie jest zwykle używane tylko do określenia, jak dobrze model nauczył się zbioru uczącego. Inne wskaźniki, takie jak BLEU , ROUGE itp., są używane w zestawie testowym do pomiaru wydajności testu.

W tym poście omówiliśmy i obliczyliśmy entropię krzyżową, zakłopotanie modelu językowego. W następnym poście porozmawiamy o benchmarku GLUE, który mierzy ogólną zdolność rozumienia języka w popularnych modelach językowych.

Bibliografia