Anslut dig till vÄrt nÀtverk!

AI-verktyg 101

Komplett nybörjarguide till Hugging Face LLM-verktyg

mm
Uppdaterad on
KRAMANDE ANSIKTE - KOMPLETT GUIDE

Hugging Face Àr ett AI-forskningslabb och nav som har byggt upp en gemenskap av forskare, forskare och entusiaster. PÄ kort tid har Hugging Face fÄtt en betydande nÀrvaro i AI-utrymmet. Tekniska jÀttar inklusive Google, Amazon och Nvidia har stÀrkt AI-startup Hugging Face med betydande investeringar, vilket gör sin vÀrdering $ 4.5 miljarder.

I den hÀr guiden kommer vi att introducera transformatorer, LLM:er och hur Hugging Face-biblioteket spelar en viktig roll för att frÀmja en öppen kÀllkods-AI-gemenskap. Vi kommer ocksÄ att gÄ igenom de vÀsentliga funktionerna i Hugging Face, inklusive pipelines, datauppsÀttningar, modeller och mer, med praktiska Python-exempel.

Transformatorer i NLP

2017 publicerade Cornell University en inflytelserik artikel som introducerade transformatorer. Dessa Àr modeller för djupinlÀrning som anvÀnds i NLP. Denna upptÀckt drev pÄ utvecklingen av stora sprÄkmodeller som ChatGPT.

Stora sprÄkmodeller eller LLM Àr AI-system som anvÀnder transformatorer för att förstÄ och skapa mÀnniskoliknande text. Det Àr dock dyrt att skapa dessa modeller och krÀver ofta miljontals dollar, vilket begrÀnsar deras tillgÀnglighet för stora företag.

Kramande ansikte, som startade 2016, syftar till att göra NLP-modeller tillgÀngliga för alla. Trots att det Àr ett kommersiellt företag erbjuder det en rad resurser med öppen kÀllkod som hjÀlper mÀnniskor och organisationer att bygga och anvÀnda transformatormodeller till ett överkomligt pris. MaskininlÀrning handlar om att lÀra datorer att utföra uppgifter genom att kÀnna igen mönster, medan djupinlÀrning, en delmÀngd av maskininlÀrning, skapar ett nÀtverk som lÀr sig sjÀlvstÀndigt. Transformatorer Àr en typ av djupinlÀrningsarkitektur som effektivt och flexibelt anvÀnder indata, vilket gör det till ett populÀrt val för att bygga stora sprÄkmodeller pÄ grund av mindre utbildningstidskrav.

Hur Hugging Face underlÀttar NLP- och LLM-projekt

Kramar ansikte Ekosystem - Modeller, dataset, mÀtvÀrden, transformatorer, accelerera, tokenizers

Hugging Face har gjort arbetet med LLM enklare genom att erbjuda:

  1. En rad förutbildade modeller att vÀlja mellan.
  2. Verktyg och exempel för att finjustera dessa modeller till dina specifika behov.
  3. Enkla distributionsalternativ för olika miljöer.

En stor resurs tillgĂ€nglig genom Hugging Face Ă€r Öppna LLM Leaderboard. Den fungerar som en heltĂ€ckande plattform och övervakar, rangordnar och mĂ€ter systematiskt effektiviteten hos ett spektrum av stora sprĂ„kmodeller (LLM) och chatbots, vilket ger en krĂ€sna analys av framstegen inom domĂ€nen med öppen kĂ€llkod.

LLM Benchmarks mÀter modeller genom fyra mÀtvÀrden:

  • AI2 Reasoning Challenge (25-shot) — en serie frĂ„gor kring kursplanen för grundlĂ€ggande naturvetenskap.
  • HellaSwag (10-shot) - ett sunt förnuftstest som, Ă€ven om det Ă€r enkelt för mĂ€nniskor, Ă€r en betydande utmaning för banbrytande modeller.
  • MMLU (5-shot) — en mĂ„ngfacetterad utvĂ€rdering som berör en textmodells skicklighet inom 57 olika domĂ€ner, som omfattar grundlĂ€ggande matematik, juridik och datavetenskap, bland annat.
  • Sanningsfull QA (0-shot) — ett verktyg för att faststĂ€lla tendensen hos en modell att eka ofta förekommande felaktig information online.

RiktmÀrkena, som beskrivs med termer som "25-shot", "10-shot", "5-shot" och "0-shot", indikerar antalet snabba exempel som en modell ges under utvÀrderingsprocessen för att mÀta dess prestanda och resonemangsförmÄga inom olika domÀner. I "fÄ-shot"-paradigm förses modeller med ett litet antal exempel för att vÀgleda deras svar, medan i en "0-shot"-instÀllning fÄr modellerna inga exempel och mÄste förlita sig enbart pÄ sin redan existerande kunskap för att svara pÄ lÀmpligt sÀtt .

Komponenter i Hugging Face

Rörledningar

'pipelines' Àr en del av Hugging Faces transformatorbibliotek, en funktion som hjÀlper till att enkelt anvÀnda förtrÀnade modeller tillgÀngliga i Hugging Face-förrÄdet. Det tillhandahÄller ett intuitivt API för en rad uppgifter, inklusive sentimentanalys, frÄgesvar, maskerad sprÄkmodellering, namngiven enhetsigenkÀnning och sammanfattning.

Pipelines integrerar tre centrala Hugging Face-komponenter:

  1. Tokenizer: Förbereder din text för modellen genom att konvertera den till ett format som modellen kan förstÄ.
  2. Modell: Detta Àr hjÀrtat i pipelinen dÀr de faktiska förutsÀgelserna görs baserat pÄ den förbearbetade inmatningen.
  3. Postprocessor: Förvandlar modellens rÄa förutsÀgelser till en form som kan lÀsas av mÀnniskor.

Dessa pipelines minskar inte bara omfattande kodning utan erbjuder ocksÄ ett anvÀndarvÀnligt grÀnssnitt för att utföra olika NLP-uppgifter.

Transformatorapplikationer som anvÀnder Hugging Face-biblioteket

En höjdpunkt i Hugging Face-biblioteket Àr Transformers-biblioteket, som förenklar NLP-uppgifter genom att koppla ihop en modell med nödvÀndiga för- och efterbehandlingssteg, vilket effektiviserar analysprocessen. För att installera och importera biblioteket, anvÀnd följande kommandon:

pip install -q transformers
from transformers import pipeline

Efter att ha gjort det kan du utföra NLP-uppgifter som börjar med sentimentanalys, som kategoriserar text i positiva eller negativa kÀnslor. Bibliotekets kraftfulla pipeline()-funktion fungerar som ett nav som omfattar andra pipelines och underlÀttar uppgiftsspecifika applikationer inom ljud-, bild- och multimodala domÀner.

Praktiska tillÀmpningar

Textklassificering

Textklassificering blir en bris med Hugging Faces pipeline()-funktion. SÄ hÀr kan du initiera en pipeline för textklassificering:

classifier = pipeline("text-classification")

För en praktisk upplevelse, mata in en strÀng eller lista med strÀngar i din pipeline för att fÄ förutsÀgelser, som enkelt kan visualiseras med Pythons Pandas-bibliotek. Nedan Àr ett Python-utdrag som visar detta:

sentences = ["I am thrilled to introduce you to the wonderful world of AI.",
"Hopefully, it won't disappoint you."]

# Get classification results for each sentence in the list
results = classifier(sentences)

# Loop through each result and print the label and score
for i, result in enumerate(results):
print(f"Result {i + 1}:")
print(f" Label: {result['label']}")
print(f" Score: {round(result['score'], 3)}\n")

Produktion

Result 1: 
Label: POSITIVE 
Score: 1.0 

Result 2: 
Label: POSITIVE 
Score: 0.996 

Namngiven entitetsigenkÀnning (NER)

NER Àr avgörande för att extrahera verkliga objekt som kallas "namngivna enheter" frÄn texten. AnvÀnd NER-pipeline för att identifiera dessa enheter effektivt:

ner_tagger = pipeline("ner", aggregation_strategy="simple")
text = "Elon Musk is the CEO of SpaceX."
outputs = ner_tagger(text)
print(outputs)

Produktion

 Elon Musk: PER, SpaceX: ORG 

FrÄgestÀllning

FrÄgesvar innebÀr att extrahera exakta svar pÄ specifika frÄgor frÄn ett givet sammanhang. Initiera en pipeline för att svara pÄ frÄgor och mata in din frÄga och ditt sammanhang för att fÄ det önskade svaret:

reader = pipeline("question-answering")
text = "Hugging Face is a company creating tools for NLP. It is based in New York and was founded in 2016."
question = "Where is Hugging Face based?"
outputs = reader(question=question, context=text)
print(outputs)

Produktion

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

Hugging Faces pipeline-funktion erbjuder en rad förbyggda pipelines för olika uppgifter, förutom textklassificering, NER och frÄgesvar. Nedan finns information om en undergrupp av tillgÀngliga uppgifter:

Tabell: Hugging Face Pipeline-uppgifter

uppgift Systembeskrivningar Rörledningsidentifierare
Textgenerering Skapa text baserat pĂ„ en given uppmaning pipeline(task=”textgenerering”)
Sammanfattning Sammanfatta en lĂ„ng text eller ett dokument pipeline(task=”sammanfattning”)
Bildklassificering MĂ€rk en ingĂ„ngsbild pipeline(task=”bildklassificering”)
Ljudklassificering Kategorisera ljuddata pipeline(task=”audio-classification”)
Svara pĂ„ visuella frĂ„gor Svara pĂ„ en frĂ„ga med bĂ„de en bild och en frĂ„ga pipeline(task=”vqa”)

 

För detaljerade beskrivningar och fler uppgifter, se pipelinedokumentation pÄ Hugging Faces hemsida.

Varför Hugging Face Àndrar fokus pÄ Rust

Kramande ansikte Safetensors och tokenizer Rust

Kramande ansikte Safetensors och tokenizer GitHub Page

The Hugging Face (HF) ekosystem började anvÀnda Rust i sina bibliotek som safesensors och tokenizers.

Hugging Face har helt nyligen ocksÄ slÀppt ett nytt ramverk för maskininlÀrning som heter Ljus. Till skillnad frÄn traditionella ramverk som anvÀnder Python Àr Candle byggd med Rust. MÄlet bakom att anvÀnda Rust Àr att förbÀttra prestanda och förenkla anvÀndarupplevelsen samtidigt som det stödjer GPU-operationer.

Huvudsyftet med Candle Àr att underlÀtta serverlös slutledning, göra distributionen av lÀtta binÀra filer möjlig och ta bort Python frÄn produktionsbelastningen, som ibland kan sakta ner processer pÄ grund av dess omkostnader. Detta ramverk kommer som en lösning för att övervinna de problem man stöter pÄ med fullstÀndiga ramverk för maskininlÀrning som PyTorch som Àr stora och lÄngsamma nÀr man skapar instanser i ett kluster.

LÄt oss utforska varför Rust blir ett populÀrt val mycket mer Àn Python.

  1. Hastighet och prestanda – Rust Ă€r kĂ€nt för sin otroliga hastighet, övertrĂ€ffande Python, som traditionellt anvĂ€nds i ramverk för maskininlĂ€rning. Pythons prestanda kan ibland saktas ner pĂ„ grund av dess Global Interpreter Lock (GIL), men Rust stĂ„r inte inför detta problem, och lovar snabbare utförande av uppgifter och, dĂ€refter, förbĂ€ttrad prestanda i projekt dĂ€r det implementeras.
  2. SĂ€kerhet – Rust ger minnessĂ€kerhetsgarantier utan en sophĂ€mtare, en aspekt som Ă€r vĂ€sentlig för att sĂ€kerstĂ€lla sĂ€kerheten för samtidiga system. Detta spelar en avgörande roll inom omrĂ„den som sĂ€kerhetsanordningar dĂ€r sĂ€kerhet vid hantering av datastrukturer Ă€r en prioritet.

SÀkerhetsskÄp

SÀkerhetsskÄp dra nytta av Rusts hastighet och sÀkerhetsfunktioner. Safetensors involverar manipulering av tensorer, en komplex matematisk enhet, och att ha Rust sÀkerstÀller att operationerna inte bara Àr snabba utan ocksÄ sÀkra, och undviker vanliga buggar och sÀkerhetsproblem som kan uppstÄ frÄn minnesfelhantering.

Tokenizer

Tokenizers hantera nedbrytningen av meningar eller fraser i mindre enheter, sÄsom ord eller termer. Rust hjÀlper till i denna process genom att pÄskynda exekveringstiden, se till att tokeniseringsprocessen inte bara Àr korrekt utan ocksÄ snabb, vilket förbÀttrar effektiviteten för bearbetningsuppgifter för naturligt sprÄk.

KÀrnan i Hugging Faces tokenizer Àr konceptet med subord-tokenisering, som skapar en delikat balans mellan ord- och teckennivÄ-tokenisering för att optimera informationslagring och ordförrÄdsstorlek. Det fungerar genom att skapa subtokens, som "##ing" och "##ed", behÄller semantisk rikedom samtidigt som man undviker ett uppsvÀllt ordförrÄd.

Subord-tokenisering involverar en trÀningsfas för att identifiera den mest effektiva balansen mellan tecken- och ordnivÄ-tokenisering. Det gÄr lÀngre Àn bara regler för prefix och suffix, vilket krÀver en omfattande analys av sprÄkmönster i omfattande textkorpus för att designa en effektiv underordstokenizer. Den genererade tokenizern Àr skicklig pÄ att hantera nya ord genom att dela upp dem i kÀnda underord, vilket bibehÄller en hög nivÄ av semantisk förstÄelse.

Tokeniseringskomponenter

Tokenizers-biblioteket delar in tokeniseringsprocessen i flera steg, som var och en tar upp en distinkt aspekt av tokenisering. LÄt oss fördjupa oss i dessa komponenter:

  • normaliserare: Tar initiala transformationer pĂ„ inmatningsstrĂ€ngen och tillĂ€mpar nödvĂ€ndiga justeringar som konvertering av gemener, Unicode-normalisering och strippning.
  • PreTokenizer: Ansvarig för att fragmentera inmatningsstrĂ€ngen i försegment, bestĂ€mma splittringar baserat pĂ„ fördefinierade regler, sĂ„som mellanslagsavgrĂ€nsningar.
  • Modell: Övervakar upptĂ€ckten och skapandet av subtokens, anpassar sig till detaljerna i dina indata och erbjuder trĂ€ningsmöjligheter.
  • Efterbehandlare: FörbĂ€ttrar konstruktionsfunktioner för att underlĂ€tta kompatibilitet med mĂ„nga transformatorbaserade modeller, som BERT, genom att lĂ€gga till tokens som [CLS] och [SEP].

För att komma igÄng med Hugging Face-tokenizers, installera biblioteket med kommandot pip install tokenizers och importera den till din Python-miljö. Biblioteket kan tokenisera stora mÀngder text pÄ mycket kort tid, vilket sparar vÀrdefulla berÀkningsresurser för mer intensiva uppgifter som modelltrÀning.

Tokenizers-biblioteket anvÀnder Rust som Àrver C++s syntaktiska likhet samtidigt som det introducerar nya koncept inom programmeringssprÄksdesign. Tillsammans med Python-bindningar sÀkerstÀller det att du kan njuta av prestandan hos ett sprÄk pÄ lÀgre nivÄ medan du arbetar i en Python-miljö.

dataset

DatauppsÀttningar Àr grunden för AI-projekt. Hugging Face erbjuder ett brett utbud av datauppsÀttningar, lÀmpliga för en rad NLP-uppgifter och mer. För att kunna anvÀnda dem effektivt Àr det viktigt att förstÄ processen för att ladda och analysera dem. Nedan finns ett vÀlkommenterat Python-skript som visar hur man utforskar datauppsÀttningar tillgÀngliga pÄ Hugging Face:

from datasets import load_dataset
# Load a dataset
dataset = load_dataset('squad')
# Display the first entry
print(dataset[0])

Det hÀr skriptet anvÀnder load_dataset-funktionen för att ladda SQuAD-datauppsÀttningen, som Àr ett populÀrt val för frÄgor som svarar pÄ frÄgor.

Utnyttja förutbildade modeller och sammanföra allt

Förutbildade modeller utgör ryggraden i mÄnga projekt för djupinlÀrning, vilket gör det möjligt för forskare och utvecklare att dra igÄng sina initiativ utan att börja om frÄn början. Hugging Face underlÀttar utforskningen av en mÀngd olika förtrÀnade modeller, som visas i koden nedan:

from transformers import AutoModelForQuestionAnswering, AutoTokenizer

# Load the pre-trained model and 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')

# Display the model's architecture
print(model)

Med modellen och tokenizern laddade kan vi nu fortsÀtta att skapa en funktion som tar en bit text och en frÄga som indata och returnerar svaret extraherat frÄn texten. Vi kommer att anvÀnda tokenizern för att bearbeta inmatningstexten och frÄgan till ett format som Àr kompatibelt med modellen, och sedan kommer vi att mata in denna bearbetade indata i modellen för att fÄ svaret:

def get_answer(text, question):
    # Tokenize the input text and question
    inputs = tokenizer(question, text, return_tensors='pt', max_length=512, truncation=True)
    outputs = model(**inputs)

    # Get the start and end scores for the answer
    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 kodavsnittet importerar vi nödvÀndiga moduler frÄn transformatorpaketet, och laddar sedan en förtrÀnad modell och dess motsvarande tokenizer med metoden from_pretrained. Vi vÀljer en BERT-modell finjusterad pÄ SQuAD-datauppsÀttningen.

LÄt oss se ett exempel pÄ anvÀndningen av den hÀr funktionen dÀr vi har ett stycke text och vi vill extrahera ett specifikt svar pÄ en frÄga frÄn 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?"

# Get the answer to the question
answer = get_answer(text, question)
print(f"The answer to the question is: {answer}")
# Output: The answer to the question is: Gustave Eiffel


I det hÀr skriptet bygger vi en get_answer-funktion som tar en text och en frÄga, tokeniserar dem pÄ lÀmpligt sÀtt och utnyttjar den förutbildade BERT-modellen för att extrahera svaret frÄn texten. Den visar en praktisk tillÀmpning av Hugging Faces transformatorbibliotek för att bygga ett enkelt men kraftfullt frÄgesvarssystem. För att förstÄ begreppen vÀl, rekommenderas det att ha ett praktiskt experiment med en Google Colab Notebook.

Slutsats

Genom sitt omfattande utbud av verktyg med öppen kÀllkod, förutbildade modeller och anvÀndarvÀnliga pipelines, gör det det möjligt för bÄde erfarna proffs och nykomlingar att fördjupa sig i den expansiva vÀrlden av AI med en kÀnsla av lÀtthet och förstÄelse. Dessutom understryker initiativet att integrera Rust, pÄ grund av dess hastighet och sÀkerhetsfunktioner, Hugging Faces engagemang för att frÀmja innovation och samtidigt sÀkerstÀlla effektivitet och sÀkerhet i AI-applikationer. Det transformativa arbetet med Hugging Face demokratiserar inte bara tillgÄngen till AI-verktyg pÄ hög nivÄ utan frÀmjar ocksÄ en samarbetsmiljö för lÀrande och utveckling i AI-utrymmet, vilket underlÀttar en framtid dÀr AI Àr tillgÀnglig för

Jag har Àgnat de senaste fem Ären Ät att fördjupa mig i den fascinerande vÀrlden av Machine Learning och Deep Learning. Min passion och expertis har lett mig till att bidra till över 50 olika programvaruutvecklingsprojekt, med sÀrskilt fokus pÄ AI/ML. Min pÄgÄende nyfikenhet har ocksÄ dragit mig mot Natural Language Processing, ett omrÄde som jag Àr ivrig att utforska vidare.