Preprocessing van verschillende modaliteiten

Multi-modale modellen met Hugging Face

James Chapman

Curriculum Manager, DataCamp

Tekst preprocesen

Een voorbeeldtekststring.

  • Tokenizer: zet tekst → modelinput
Multi-modale modellen met Hugging Face

Tekst preprocesen

Stroomschema van tekst-preprocessing tot en met normalisatie

  • Tokenizer: zet tekst → modelinput
    • Normaliseren: lowercasing, speciale tekens verwijderen, extra witruimte verwijderen
Multi-modale modellen met Hugging Face

Tekst preprocesen

Vervolg van stroomschema naar tokenization

  • Tokenizer: zet tekst → modelinput
    • Normaliseren: lowercasing, speciale tekens verwijderen, extra witruimte verwijderen
    • (Pre-)tokenization: tekst splitsen in (sub)woorden
Multi-modale modellen met Hugging Face

Tekst preprocesen

Vervolg van stroomschema naar ID-conversie en padding

  • Tokenizer: zet tekst → modelinput
    • Normaliseren: lowercasing, speciale tekens en witruimte verwijderen
    • (Pre-)tokenization: tekst splitsen in (sub)woorden
    • ID-conversie: tokens naar gehele getallen m.b.v. een vocabulaire
Multi-modale modellen met Hugging Face

Tekst preprocesen

preprocessing_text5.jpg

  • Tokenizer: zet tekst → modelinput
    • Normaliseren: lowercasing, speciale tekens en witruimte verwijderen
    • (Pre-)tokenization: tekst splitsen in (sub)woorden
    • ID-conversie: tokens naar gehele getallen m.b.v. een vocabulaire
    • Padding: extra tokens toevoegen voor gelijke lengte
Multi-modale modellen met Hugging Face

Tekst preprocesen

from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('distilbert/distilbert-base-uncased')

text = "Do you need more éclairs?"
print(tokenizer.backend_tokenizer.normalizer.normalize_str(text))
do you need more eclairs
tokenizer(text, return_tensors='pt', padding=True)
{'input_ids': tensor([[  101,  ..., 102]]), ...}
Multi-modale modellen met Hugging Face

Afbeeldingen preprocesen

  • Normaliseren: pixelintensiteit aanpassen
  • Resizen: afstemmen op inputlaag van model
  • Vuistregel → gebruik preprocessing van het originele model

afbeeldingen van een groep mensen die springen vóór en na beeld-preprocessing

1 https://huggingface.co/datasets/nlphuji/flickr30k
Multi-modale modellen met Hugging Face

Afbeeldingen preprocesen

Multimodale taken vereisen consistente preprocessing:

from transformers import BlipProcessor, BlipForConditionalGeneration

checkpoint = "Salesforce/blip-image-captioning-base"
model = BlipForConditionalGeneration.from_pretrained(checkpoint) processor = BlipProcessor.from_pretrained(checkpoint)

Encode afbeelding → transformeer naar tekstencoding → decodeer tekst

image = load_dataset("nlphuji/flickr30k")['test'][11]["image"]
inputs = processor(images=image, return_tensors="pt")

output = model.generate(**inputs)
print(processor.decode(output[0]))
[{'generated_text': 'a group of people jumping'}]
Multi-modale modellen met Hugging Face

Audio preprocesen

Audiospectrum

  • Audio-preprocessing:
    • Sequentiële array → filter/padding
    • Samplefrequentie → resampling

Feature-extractie als modelinput (spectrogram)

spectro

Multi-modale modellen met Hugging Face

Audio preprocesen

from datasets import load_dataset, Audio

dataset = load_dataset("CSTR-Edinburgh/vctk")["train"] dataset = dataset.cast_column("audio", Audio(sampling_rate=16_000))
  • Modelspecifieke, volledige preprocessors zijn beschikbaar:
from transformers import AutoProcessor
processor = AutoProcessor.from_pretrained("openai/whisper-small")
audio_pp = processor(dataset[0]["audio"]["array"], 
                     sampling_rate=16_000, return_tensors="pt")
  • Samplefrequentie moet aansluiten op modelinput
1 https://huggingface.co/datasets/CSTR-Edinburgh/vctk
Multi-modale modellen met Hugging Face

Laten we oefenen!

Multi-modale modellen met Hugging Face

Preparing Video For Download...