Sobes.tech
Middle — Senior

BERT'i NER için nasıl ince ayar yaparsınız? Hangi loss ve etiket tokenizasyonu?

sobes.tech yapay zeka

AI'dan gelen yanıt

NER görevi için BERT'i ince ayar yapmak genellikle aşağıdaki yaklaşımı kullanır:

  • Tokenizasyon: BERT'in WordPiece tokenizasyonu kullanılır. NER için etiketler (labels) genellikle tokenlara karşılık gelir, ancak WordPiece kelimeleri altkelimelere böldüğü için, etiket ilk altkelimeye atanır ve diğer altkelimeler için genellikle özel bir etiket (örneğin, "X") veya ilk altkelimenin etiketi tekrarlanır.

  • Etiket formatı: genellikle varış noktası ve devamını göstermek için BIO (Begin, Inside, Outside) şeması kullanılır.

  • Kayıp fonksiyonu: genellikle her tokeni sınıflandırmak için Çapraz Entropi Kayıp (Cross-Entropy Loss) kullanılır. Kayıp hesaplaması istenmeyen tokenlar (örneğin, padding veya "X" etiketiyle altkelimeler) için maskeleme yapılır.

PyTorch ve HuggingFace Transformers kullanımıyla örnek:

from transformers import BertForTokenClassification, BertTokenizerFast
import torch

model = BertForTokenClassification.from_pretrained('bert-base-cased', num_labels=num_labels)
tokenizer = BertTokenizerFast.from_pretrained('bert-base-cased')

# Cümle ve etiket örneği
sentence = "John lives in New York"
labels = [1, 0, 0, 2, 3]  # BIO formatında örnek etiketler

encoding = tokenizer(sentence.split(), is_split_into_words=True, return_tensors="pt", truncation=True, padding=True)

# Altkelimeler için etiketlerin dönüştürülmesi
word_ids = encoding.word_ids()
label_ids = []
previous_word_idx = None
for word_idx in word_ids:
    if word_idx is None:
        label_ids.append(-100)  # Padding'i atla
    elif word_idx != previous_word_idx:
        label_ids.append(labels[word_idx])
    else:
        label_ids.append(-100)  # Altkelimeleri atla
    previous_word_idx = word_idx

outputs = model(**encoding, labels=torch.tensor([label_ids]))
loss = outputs.loss
loss.backward()

Anahtar noktalar, dikkatli tokenizasyon ve etiketlerin hizalanması ile Cross-Entropy Loss'un maskeleme ile kullanılmasıdır.