Dil Modellerinin Karışıklığı
Şaşkınlık, dil modellerinin kalitesini ölçen bir değerlendirme ölçüsüdür. Bu gönderide, şaşkınlığın ne olduğunu ve popüler model GPT2 için nasıl hesaplandığını tartışacağız .
Dil Modeli nedir?
Doğal Dil İşleme'nin çehresini değiştiren BERT, GPT2 vb. gibi büyük dil modellerini (LLM) zaten duymuş olabilirsiniz. İstatistiksel dil modelleri ve sinirsel dil modelleri gibi farklı dil modelleri türleri vardır. SLM'ler, Sinir dili modellerinin sinir ağı mimarileri kullanılarak eğitildiği verilen metindeki istatistiklere dayanmaktadır.
Özünde, bir dil modeli (LM), modelin kelime dağarcığı olarak bilinen bir dizi kelime üzerindeki olasılık dağılımından başka bir şey değildir. Kelime dağarcığındaki belirli bir kelimenin, önceki tüm kelimeleri göz önüne alındığında ortaya çıkma olasılığını söyler. Genellikle, dizide bir sonraki tahmin edilen kelime olarak en yüksek olasılığa sahip olan kelime seçilir.
Bu olasılık, bu dizinin olasılığını veren önceki sözcükleri verilen her sözcük için bir koşullu olasılıklar dizisi çarpılarak hesaplanabilir.
Örneğin “Güzel bir gün” örnek cümlesinin ortak olabilirliği aşağıda gösterildiği gibi yazılmıştır. Bu olasılığı hesaplamak, bir dizideki sonraki veya eksik kelimeleri tahmin etmemize yardımcı olur ve böylece model, dilin nüanslarını öğrenir - dolayısıyla dil modeli terimi.
P(It,is,a,beautiful,day) = P(day|beautiful, a, is, it) *
P(beautiful|a, is, it) * P(a|is, it) * P(is|it)
Sonraki bölümlerde Şaşkınlığı hesaplamak için kullanılan bazı önemli terimleri tartışacağız.
Entropi
Entropi, belirsizliği ölçen bir ölçüdür ve meydana gelen bir olayın olasılığının tersi olarak elde edilir. Olasılık ne kadar yüksekse, belirsizlik o kadar azdır. Bu nedenle, dil modelinin amacı, eğitim dizilerine benzer bir sözcük dizisi oluşturma entropisini en aza indirmektir. Entropi hesaplama formülü aşağıda verildiği gibidir, burada P(x), x kelimesinin olasılığıdır.
İşte Entropy'yi daha detaylı anlamak için harika bir video:https://youtube.com/watch?v=YtebGVx-Fxw
Çapraz Entropi
Çapraz Entropi, iki olasılık dağılımını P(x) ve Q(x) karşılaştırır. Dil modelleri bağlamında, kelimeler üzerinden tahmin edilen olasılık dağılımını gerçek olasılık dağılımıyla karşılaştırırız. Burada, P(x) gerçek olasılık dağılımıdır ve Q(x) model tarafından tahmin edilen dağılımdır. Çapraz entropi daha sonra aşağıda gösterildiği gibi hesaplanır ve dil modellerini eğitmek için bir kayıp fonksiyonu olarak kullanılabilir.
Sadece 5 sözcükten oluşan “güneşli”, “gün”, “güzel”, “manzara”, “bulutlar” sözcük dağarcığı ile eğitilmiş bir dil modelimiz olsun. Şimdi modelin “güzel manzara” ibaresini gördüğündeki şaşkınlığını hesaplamak istiyoruz.
PyTorch'ta basit bir örnek kullanarak çapraz entropiyi hesaplayalım.
# Get the needed libraries
import torch
from torch.nn import functional as F
Bu logitler daha sonra değerleri normalleştiren ve bunları bir olasılık dağılımına dönüştüren bir softmax işlevine geçirilir. Bu tahmin edilen olasılık dağılımıdır.
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)
Sezgisel olarak şaşkınlık, şaşırmak demektir. Yeni verileri görerek modelin ne kadar şaşırdığını ölçüyoruz. Şaşkınlık ne kadar düşükse, eğitim o kadar iyi olur.
Şaşkınlık, modelden elde edilen kaybın üssü olarak hesaplanır. Yukarıdaki örnekte örnek modelimizin “güzel manzara” ifadesine göre şaşkınlığının 9.97 olduğunu görüyoruz. Şaşkınlık formülü, bir girdi dizisindeki tüm sözcüklerin log olasılığının ortalamasının üssüdür.
Şimdi iki cümlenin şaşkınlığını GPT2 ile karşılaştıralım ve ne kadar şaşkın olduğunu görelim. HuggingFace'ten GPT2 modeli için önce bir tokenizer ve bir nedensel başlık yüklüyoruz:
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
Şaşkınlık genellikle yalnızca bir modelin eğitim setini ne kadar iyi öğrendiğini belirlemek için kullanılır. BLEU , ROUGE vb. gibi diğer metrikler , test performansını ölçmek için test setinde kullanılır.
Bu gönderide, bir dil modelinin Çapraz Entropisini, Şaşkınlığını tartıştık ve hesapladık. Bir sonraki yazımızda popüler dil modellerinin genel dil anlama yeteneğini ölçen GLUE kriterinden bahsedeceğiz.