AI-værktøjer 101

Komplet begynderguide til Hugging Face LLM-værktøjer

mm
Føj Unite.AI til dine foretrukne kilder på Google
HUGGING FACE - COMPLETE GUIDE

Hugging Face er et AI-forskningslaboratorium og -hub, der har opbygget en fællesskab af forskere, studerende og entusiaster. På kort tid har Hugging Face opnået en betydelig tilstedeværelse i AI-verdenen. Tech-giganter som Google (GOOGL ), Amazon (AMZN ) og Nvidia (NVDA ) har støttet AI-startup Hugging Face med betydelige investeringer, hvilket har gjort deres værdi til 4,5 milliarder dollars.

I denne guide vil vi introducere transformers, LLM’er og hvordan Hugging Face-biblioteket spiller en vigtig rolle i at fremme en åben AI-fællesskab. Vi vil også gå igennem de væsentlige funktioner i Hugging Face, herunder pipelines, datasets, modeller og mere, med praktiske Python-eksempler.

Transformers i NLP

I 2017 offentliggjorde Cornell University en indflydelsesrig artikel, der introducerede transformers. Disse er dybe læringmodeller, der bruges i NLP. Denne opdagelse fremmede udviklingen af store sprogmodeller som ChatGPT.

Store sprogmodeller eller LLM’er er AI-systemer, der bruger transformers til at forstå og oprette menneske-lignende tekst. Dog er det dyrt at oprette disse modeller, ofte kræver det millioner af dollars, hvilket begrænser deres tilgængelighed til store virksomheder.

Hugging Face, der blev grundlagt i 2016, har til formål at gøre NLP-modeller tilgængelige for alle. Trods at det er et kommercielt selskab, tilbyder det en række åbne ressourcer, der hjælper mennesker og organisationer med at bygge og bruge transformer-modeller på en billig måde. Maskinlæring handler om at lære computere at udføre opgaver ved at genkende mønstre, mens dyb læring, en undergruppe af maskinlæring, skaber et netværk, der lærer uafhængigt. Transformers er en type dyb læringarkitektur, der effektivt og fleksibelt bruger inputdata, hvilket gør dem til en populær valg til at bygge store sprogmodeller på grund af deres mindre træningstidskrav.

Hvordan Hugging fremmer NLP- og LLM-projekter

Hugging Face-økosystem - Modeller, dataset, metrikker, transformers, accelerate, tokenizers

Hugging Face har gjort det lettere at arbejde med LLM’er ved at tilbyde:

  1. Et udvalg af fortrænede modeller at vælge imellem.
  2. Værktøjer og eksempler til at finjustere disse modeller til dine specifikke behov.
  3. Lette installationsmuligheder for forskellige miljøer.

En fremragende ressource, der er tilgængelig via Hugging Face, er Open LLM Leaderboard. Den fungerer som en omfattende platform, der systematisk overvåger, rangerer og vurderer effektiviteten af et spektrum af store sprogmodeller (LLM’er) og chatbots, og giver en diskriminerende analyse af fremgangen i det åbne domæne

LLM-benchmarks måler modeller gennem fire metrikker:

  • AI2 Reasoning Challenge (25-shot) – en række spørgsmål om grundlæggende videnskab.
  • HellaSwag (10-shot) – en fællesforståelses-test, der er enkel for mennesker, men en betydelig udfordring for avancerede modeller.
  • MMLU (5-shot) – en multifacetteret vurdering, der berører en tekstmodels kompetence på tværs af 57 forskellige domæner, herunder grundlæggende matematik, jura og datalogi, blandt andet.
  • TruthfulQA (0-shot) – et værktøj til at bestemme en models tendens til at gentage ofte mødt online-misinformation.

Benchmarks, der beskrives med begreber som “25-shot”, “10-shot”, “5-shot” og “0-shot”, indikerer antallet af prompt-eksempler, der gives til en model under vurderingsprocessen for at måle dens præstation og resonneringsfærdigheder i forskellige domæner. I “few-shot”-paradigmer gives modellerne en lille mængde eksempler for at hjælpe med at guide deres svar, hvorimod modeller i en “0-shot”-sætning ikke modtager nogen eksempler og må kun stole på deres forudgående viden for at svare passende.

Komponenter af Hugging

Pipelines

‘Pipelines’ er en del af Hugging Faces transformers-bibliotek – en funktion, der hjælper med den lette brug af fortrænede modeller, der er tilgængelige i Hugging Faces repository. Det giver en intuitiv API til en række opgaver, herunder sentimentanalyse, spørgsmålssvar, maskeret sprogmodellering, navngivet entitetsgenkendelse og sammenfatning.

Pipelines integrerer tre centrale Hugging Face-komponenter:

  1. Tokenizer: Forbereder din tekst til modellen ved at konvertere den til et format, som modellen kan forstå.
  2. Model: Dette er hjertet af pipelinen, hvor de faktiske forudsigelser foretages på basis af den forarbejdede input.
  3. Post-processor: Transformerer modellens rå forudsigelser til en menneske-læselig form.

Disse pipelines reducerer ikke kun omfattende kodning, men tilbyder også en brugervenlig interface til at udføre forskellige NLP-opgaver.

Transformer-anvendelser med Hugging Face-biblioteket

Et højdepunkt i Hugging Face-biblioteket er Transformers-biblioteket, der forenkler NLP-opgaver ved at forbinde en model med nødvendige for- og efterbehandlingsfaser, hvilket strømliner analyseringsprocessen. For at installere og importere biblioteket skal du bruge følgende kommandoer:

pip install -q transformers
from transformers import pipeline

Efter at have gjort dette kan du udføre NLP-opgaver, starting med sentimentanalyse, der kategoriserer tekst som positiv eller negativ. Bibliotekets kraftfulde pipeline()-funktion fungerer som et hub, der omfatter andre pipelines og faciliterer opgave-specifikke anvendelser i lyd-, syns- og multimodale domæner.

Praktiske anvendelser

Tekstklassificering

Tekstklassificering bliver en leg med Hugging Faces pipeline()-funktion. Her er, hvordan du kan initiere en tekstklassificerings-pipeline:

classifier = pipeline("tekstklassificering")

For en praktisk oplevelse kan du føde en streng eller en liste af strenge ind i din pipeline for at få forudsigelser, som kan visualiseres pænt med Python’s Pandas-bibliotek. Her er et Python-eksempel, der demonstrerer dette:

sentences = ["Jeg er begejstret for at introducere dig til den vidunderlige verden af AI.",
"Jeg håber, det ikke vil skuffe dig."]

# Få klassificeringsresultater for hver sætning i listen
results = classifier(sentences)

# Løb igennem hvert resultat og udskriv label og score
for i, result in enumerate(results):
print(f"Resultat {i + 1}:")
print(f" Label: {result['label']}")
print(f" Score: {round(result['score'], 3)}\n")

Output

Resultat 1:
Label: POSITIV
Score: 1.0

Resultat 2:
Label: POSITIV
Score: 0.996

Navngivet entitetsgenkendelse (NER)

NER er afgørende for at trække virkelige objekter, kaldet “navngivne entiteter”, ud af teksten. Du kan bruge NER-pipelinen til at identificere disse entiteter effektivt:

ner_tagger = pipeline("ner", aggregation_strategy="simple")
text = "Elon Musk er direktør for SpaceX."
outputs = ner_tagger(text)
print(outputs)

Output

 Elon Musk: PER, SpaceX: ORG 

Spørgsmålssvar

Spørgsmålssvar indebærer at trække præcise svar til bestemte spørgsmål ud af en given kontekst. Initialiser en spørgsmålssvar-pipeline og indtast dit spørgsmål og kontekst for at få det ønskede svar:

reader = pipeline("question-answering")
text = "Hugging Face er et selskab, der skaber værktøjer til NLP. Det er beliggende i New York og blev grundlagt i 2016."
question = "Hvor er Hugging Face beliggende?"
outputs = reader(question=question, context=text)
print(outputs)

Output

 { 'score': 0.998, 'start': 51, 'end': 60, 'answer': 'New York' } 

Hugging Faces pipeline()-funktion tilbyder en række forudbyggede pipelines til forskellige opgaver, ud over tekstklassificering, NER og spørgsmålssvar. Her er detaljer om en undergruppe af tilgængelige opgaver:

Table: Hugging Face Pipeline-opgaver

Opgave Beskrivelse Pipeline-identifikator
Tekstgenerering Generer tekst baseret på en given prompt pipeline(task=”tekstgenerering”)
Sammenfatning Sammenfat en længere tekst eller dokument pipeline(task=”sammenfatning”)
Billedeklassificering Mærk en input-billede pipeline(task=”billedeklassificering”)
Lydklassificering Kategoriser lyddata pipeline(task=”lydklassificering”)
Visuel spørgsmålssvar Svar på et spørgsmål ved hjælp af både et billede og et spørgsmål pipeline(task=”vqa”)

 

Til detaljerede beskrivelser og flere opgaver henvises til pipeline-dokumentation på Hugging Faces hjemmeside.

Hvorfor Hugging skifter fokus til Rust

Hugging Face Safetensors og tokenizer Rust

Hugging Face Safetensors og tokenizer GitHub-side

Hugging Face-økosystemet (HF) begyndte at bruge Rust i dets biblioteker, såsom safetensors og tokenizers.

Hugging Face har meget nyligt også udgivet et nyt machine learning-rammeværk kaldet Candle. I modsætning til traditionelle rammeværker, der bruger Python, er Candle bygget med Rust. Formålet med at bruge Rust er at forbedre ydeevnen og simplificere brugeroplevelsen, samtidig med at det understøtter GPU-operationer.

Det primære mål med Candle er at facilitere serverless inference, hvilket gør det muligt at deploye letvægtige binærer og fjerner Python fra produktionsarbejdsprocesser, som kan være langsomme på grund af deres overhead. Dette rammeværk kommer som en løsning for at overvinde problemerne, der er forbundet med fulde machine learning-rammeværker som PyTorch, der er store og langsomme, når de oprettes på en cluster.

Lad os udforske, hvorfor Rust bliver et mere populært valg end Python.

  1. Hastighed og ydeevne – Rust er kendt for sin utrolige hastighed, der overgår Python, der traditionelt bruges i machine learning-rammeværker. Pythons ydeevne kan nogle gange være langsommere på grund af dets Global Interpreter Lock (GIL), men Rust har ikke dette problem, hvilket lover en hurtigere udførelse af opgaver og en bedre ydeevne i projekter, hvor det implementeres.
  2. Sikkerhed – Rust giver garantier for hukommelsessikkerhed uden en genbrugsindsamler, et aspekt, der er afgørende for at sikre sikkerheden af samtidige systemer. Dette spiller en afgørende rolle i områder som safetensors, hvor sikkerhed i håndtering af datastrukturer er en prioritet.

Safetensors

Safetensors drager fordel af Rusts hastighed og sikkerhedsfunktioner. Safetensors indebærer manipulation af tensorer, en kompleks matematisk enhed, og med Rust sikres det, at operationerne ikke kun er hurtige, men også sikre, og undgår almindelige fejl og sikkerhedsproblemer, der kan opstå på grund af hukommelsesfejl.

Tokenizer

Tokenizers håndterer opdelingen af sætninger eller fraser i mindre enheder, såsom ord eller termer. Rust hjælper med dette ved at accelerere udførelsestiden, hvilket sikrer, at tokeniseringsprocessen ikke kun er præcis, men også hurtig, og forbedrer effektiviteten af naturligsprogsbehandling.

I hjertet af Hugging Faces tokenizer ligger begrebet subword-tokenisering, der finder en balance mellem ord- og karakterniveau-tokenisering for at optimere informationsbevarelse og ordliste-størrelse. Det fungerer gennem oprettelsen af subtokens, såsom “##ing” og “##ed”, der bevare semantisk rigdom, samtidig med at de undgår en opblæst ordliste.

Subword-tokenisering indebærer en træningsfase for at identificere den mest effektive balance mellem karakter- og ordniveau-tokenisering. Det går ud over blot præfiks- og suffiksregler og kræver en omfattende analyse af sprogmønstre i store tekstkorpusser for at designe en effektiv subword-tokenizer. Den genererede tokenizer er i stand til at håndtere nye ord ved at bryde dem ned i kendte subwords, samtidig med at den opretholder et højt niveau af semantisk forståelse.

Tokeniseringskomponenter

Tokenizers-biblioteket deler tokeniseringsprocessen op i flere trin, hvor hvert trin behandler en særlig aspekt af tokenisering. Lad os dykke ned i disse komponenter:

  • Normalisator: Udfører de første transformationer på input-strengen, anvender nødvendige justeringer som omregning til små bogstaver, Unicode-normalisering og fjernelse.
  • Præ-tokenizer: Ansvarlig for at fragmentere input-strengen i præ-segmenter, bestemmer splittene på basis af foruddefinerede regler, såsom mellemrum.
  • Model: Overvåger opdagelsen og oprettelsen af subtokens, tilpasser sig specifikationerne for din input-data og tilbyder træningsmuligheder.
  • Post-processorer: Forbedrer konstruktionsfunktioner for at sikre kompatibilitet med mange transformer-baserede modeller, såsom BERT, ved at tilføje tokens såsom [CLS] og [SEP].

For at komme i gang med Hugging Face-tokenizers skal du installere biblioteket ved hjælp af kommandoen pip install tokenizers og importere det i dit Python-miljø. Biblioteket kan tokenisere store mængder tekst på meget kort tid, hvilket sparer værdifulde beregningsressourcer til mere intensive opgaver som modeltræning.

Tokenizers-biblioteket bruger Rust, der arver C++’s syntaktiske lighed, samtidig med at det introducerer nye koncepter i programmeringssprogdesign. Kombineret med Python-bindings sikrer det, at du kan nyde ydeevnen af et lavniveau-sprog, samtidig med at du arbejder i et Python-miljø.

Datasets

Datasets er grundlaget for AI-projekter. Hugging Face tilbyder en bred vifte af datasets, der er egnet til en række NLP-opgaver og mere. For at bruge dem effektivt er det vigtigt at forstå processen med at indlæse og analysere dem. Her er et velkommenteret Python-script, der demonstrerer, hvordan du kan udforske datasets, der er tilgængelige på Hugging Face:

from datasets import load_dataset
# Indlæs et dataset
dataset = load_dataset('squad')
# Vis den første indgang
print(dataset[0])

Dette script bruger load_dataset-funktionen til at indlæse SQuAD-datasettet, der er et populært valg til spørgsmålssvar-opgaver.

Udnyttelse af fortrænede modeller og samling af det hele

Fortrænede modeller udgør ryggraden af mange dybe læring-projekter, hvilket giver forskere og udviklere mulighed for at starte deres initiativer uden at skulle starte fra scratch. Hugging Face faciliterer udforskningen af en bred vifte af fortrænede modeller, som vist i koden nedenfor:

from transformers import AutoModelForQuestionAnswering, AutoTokenizer

# Indlæs den fortrænede model og tokenizer
model = AutoModelForQuestionAnswering.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')
tokenizer = AutoTokenizer.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')

# Vis modellens arkitektur
print(model)

Med modellen og tokenizeren indlæst kan vi nu gå videre til at oprette en funktion, der tager en tekst og et spørgsmål som input og returnerer svaret, der er udtrukket fra teksten. Vi vil bruge tokenizeren til at behandle input-teksten og spørgsmålet til et format, der er kompatibelt med modellen, og derefter føre denne behandlede input ind i modellen for at få svaret:


def get_answer(text, question):
# Tokenisér input-teksten og spørgsmålet
inputs = tokenizer(question, text, return_tensors='pt', max_length=512, truncation=True)
outputs = model(**inputs)

# Få start- og slut-scores for svaret
answer_start = torch.argmax(outputs.start_logits)
answer_end = torch.argmax(outputs.end_logits) + 1

answer = tokenizer.convert_tokens_to_string(tokenizer.convert_ids_to_tokens(inputs['input_ids'][0][answer_start:answer_end]))
return answer

I dette kodeeksempel importerer vi de nødvendige moduler fra transformers-pakken, derefter indlæser vi en fortrænet model og dens tilhørende tokenizer ved hjælp af from_pretrained-metoden. Vi vælger en BERT-model, der er finjusteret på SQuAD-datasettet.

Lad os se et eksempel på, hvordan denne funktion kan bruges, hvor vi har en tekst og ønsker at trække et bestemt svar til et spørgsmål ud af den:


text = """
The Eiffel Tower, located in Paris, France, is one of the most iconic landmarks in the world. It was designed by Gustave Eiffel and completed in 1889. The tower stands at a height of 324 meters and was the tallest man-made structure in the world at the time of its completion.
"""

question = "Who designed the Eiffel Tower?"

# Få svaret på spørgsmålet
answer = get_answer(text, question)
print(f"The answer to the question is: {answer}")
# Output: The answer to the question is: Gustave Eiffel

I dette script bygger vi en get_answer-funktion, der tager en tekst og et spørgsmål, tokeniserer dem passende, og udnytter den fortrænede BERT-model til at trække svaret ud af teksten. Det demonstrerer en praktisk anvendelse af Hugging Faces transformers-bibliotek til at bygge et simpelt, men kraftfuldt spørgsmålssvar-system. For at forstå koncepterne bedre anbefales det at have en praktisk eksperimentering med en Google Colab Notebook.

Konklusion

Gennem sin omfattende række af åbne værktøjer, fortrænede modeller og brugervenlige pipelines giver Hugging Face både erfarne fagfolk og nye begyndere mulighed for at dykke ind i den vidtstrakte verden af AI med en fornemmelse af letthed og forståelse. Desuden understreger initiativet til at integrere Rust, på grund af dets hastighed og sikkerhedsfunktioner, Hugging Faces engagement i at fremme innovation, samtidig med at det sikrer effektivitet og sikkerhed i AI-anvendelser. Hugging Faces banebrydende arbejde demokratiserer ikke kun adgangen til højniveu-AI-værktøjer, men skaber også en samarbejdende miljø for læring og udvikling i AI-rummet, hvilket faciliterer en fremtid, hvor AI er tilgængelig for alle.

Jeg har brugt de sidste fem år på at dykke ned i den fascinerende verden af Machine Learning og Deep Learning. Min passion og ekspertise har ført mig til at bidrage til over 50 forskellige software-ingeniørprojekter, med en særlig fokus på AI/ML. Min fortsatte nysgerrighed har også ført mig mod Natural Language Processing, et felt jeg er ivrig efter at udforske yderligere.