Tokenisoija: sanasto kuuluu mallin rajapintaan
Tokenisoija (tokenizer) muuntaa tekstin mallin käyttämiksi tunnisteiksi ja dekoodaa tunnisteet takaisin tekstiksi. Putkeen voi kuulua normalisointi, esijako, alisanajako ja erikoistokenien käsittely.
Sanasto määrittelee tunnisteiden merkityksen. Tokenisoijan vaihtaminen painojen pysyessä samoina voi saada upotushaun tulkitsemaan saman luvun eri tekstipalaksi.
Kouluta pieni tokenisoija, älä kielimallia
Asenna esimerkkiä varten tokenizers==0.22.2. Se kouluttaa tavutason BPE-sanaston kolmella muistissa olevalla merkkijonolla. Koko tavuaakkosto mahdollistaa myös muun tekstin esittämisen.
from tokenizers import Tokenizer, decoders, pre_tokenizers, trainers
from tokenizers.models import BPE
texts = ["Small models learn patterns.", "Models learn from text.",
"Small vocabularies split longer words."]
tokenizer = Tokenizer(BPE(unk_token="[UNK]"))
tokenizer.pre_tokenizer = pre_tokenizers.ByteLevel(add_prefix_space=False)
tokenizer.decoder = decoders.ByteLevel()
trainer = trainers.BpeTrainer(
vocab_size=300, special_tokens=["[UNK]"],
initial_alphabet=pre_tokenizers.ByteLevel.alphabet(),
)
tokenizer.train_from_iterator(texts, trainer=trainer)
encoded = tokenizer.encode("Small models learn.")
restored = tokenizer.decode(encoded.ids)
Opitut yhdistämiset määräävät, mitkä tavujonot muodostavat yhden tokenin. Ne eivät luo upotuksia tai opeta mallia ennustamaan kieltä; painot tarvitsevat erillisen koulutuksen.
Tokenisoijassa ei ole tekstin normalisointivaihetta, joten dekooderi voi palauttaa esimerkin täsmälleen. Muut putket voivat muuttaa tekstin pienaakkosiksi tai normalisoida merkkejä ja menettää alkuperäisen kirjoitusasun tarkoituksella. Keskustelupohjat ja mallikohtaiset erikoistokenit lisäävät rajapintaan oman kerroksensa.