AI-työkalut 101

Hugging Face LLM-työkalujen täydellinen aloittajan opas

mm
Lisää Unite.AI suosikkilähteisiisi Google-palvelussa
HUGGING FACE - COMPLETE GUIDE

Hugging Face on AI-tutkimuslaboratorio ja -keskus, joka on luonut tutkijoiden, akateemikkojen ja harrastajien yhteisön. Lyhyessä ajassa Hugging Face on saavuttanut merkittävän aseman AI-tilassa. Teknologiajättien joukossa Google (GOOGL ), Amazon (AMZN ) ja Nvidia (NVDA ) ovat tukenneet AI-startup Hugging Facea merkittävillä sijoituksilla, mikä on nostanut sen arvon 4,5 miljardiin dollariin.

Tässä opasohjelmassa esittelemme transformer-malleja, LLM:itä ja kuinka Hugging Face -kirjasto toimii tärkeässä roolissa avoimen lähdekoodin AI-yhteisön edistämisessä. Selitämme myös Hugging Facen olennaiset ominaisuudet, kuten putkistot, tietokannat, mallit ja muut, käyttäen käytännön Python-esimerkkejä.

Transformaattorit NLP:ssä

Vuonna 2017 Cornellin yliopisto julkaisi vaikuttavan artikkelin, jossa esiteltiin transformaattorit. Nämä ovat syvän oppimisen mallit, joita käytetään NLP:ssä. Tämä löytö sytytti suurten kielimallien kehittämisen, kuten ChatGPT.

Suuret kielimallit eli LLM:t ovat tekoälyjärjestelmiä, jotka käyttävät transformaattoreita ymmärtääkseen ja luodakseen ihmisen kaltaista tekstiä. Luoda nämä mallit on kuitenkin kallista, usein vaaditaan miljoonia dollareita, mikä rajoittaa niiden saatavuutta suurille yrityksille.

Hugging Face, joka perustettiin vuonna 2016, pyrkii tekemään NLP-malleja saataviksi kaikille. Vaikka se on kaupallinen yritys, se tarjoaa laajan valikoiman avoimia resursseja, jotka auttavat ihmisiä ja organisaatioita rakentamaan ja käyttämään transformaattorimalleja edullisesti. Koneoppiminen on tietokoneiden opettamista suorittamaan tehtäviä tunnistamalla kuvioita, kun taas syvä oppiminen, joka on koneoppimisen alaluokka, luo verkoston, joka oppii itsenäisesti. Transformaattorit ovat syvän oppimisen arkkitehtuuri, joka käyttää syötetietoja tehokkaasti ja joustavasti, mikä tekee niistä suositun valinnan suurten kielimallien rakentamiseen lyhyemmän koulutusajan vuoksi.

Miten Hugging helpottaa NLP- ja LLM-projekteja

Hugging Face -ekosysteemi - Mallit, tietokannat, mittarit, transformaattorit, kiihdytys, tokenisaattorit

Hugging Face on tehnyt työstä LLM:ien kanssa helpompaa tarjoamalla:

  1. Valikoiman esikoulutettuja malleja valitsemista varten.
  2. Työkaluja ja esimerkkejä näiden mallien hienosäätöön erityistarpeisiin.
  3. Helppokäyttöisiä käyttöönottovaihtoehtoja eri ympäristöihin.

Yksi Hugging Facen erinomaisista resursseista on Open LLM Leaderboard. Toimien kattavana alustana, se seuraa, arvioi ja vertaa systemaattisesti laajan valikoiman suuria kielimalleja ja chatbottien tehokkuutta, tarjoten tarkan analyysin edistymisestä avoimen lähdekoodin alueella.

LLM-benchmarkit mitataan neljällä mittarilla:

  • AI2 Reasoning Challenge (25-shot) — sarja kysymyksiä perusluonnontieteiden opetussuunnitelman ympärillä.
  • HellaSwag (10-shot) — yleistietäminen, joka on yksinkertainen ihmisille, mutta merkittävä haaste kehittyneille malleille.
  • MMLU (5-shot) — monipuolinen arviointi, joka koskee tekstin mallin taitoa 57 eri alueella, kuten perusmatematiikka, laki ja tietokoneet.
  • TruthfulQA (0-shot) — työkalu, joka arvioi mallin taipumusta toistaa verkossa usein esiintyvää väärää tietoa.

Näiden benchmarkien “25-shot”, “10-shot”, “5-shot” ja “0-shot” termeillä tarkoitetaan esimerkkien määrää, jonka malli saa arviointiprosessin aikana sen suorituskyvyn ja päättelykyvyn arvioimiseksi eri alueilla. “Vähän esimerkki”-paradigmoissa malleille annetaan pieni määrä esimerkkejä, jotka ohjaavat niiden vastauksia, kun taas “0-shot”-tilanteessa malleille ei anneta esimerkkejä, ja ne joutuvat turvautumaan aikaisempiin tietoihinsa.

Hugging Facen komponentit

Putkistot

‘Putkistot‘ ovat osa Hugging Facen transformaattorikirjastoa, ominaisuus, joka helpottaa esikoulutettujen mallien käyttöä Hugging Facen tietokannassa. Se tarjoaa intuitiivisen API:n useille tehtäville, kuten sentimenttianalyysille, kysymyksiin vastaamiselle, peitetyn kielen mallinnukselle, nimettyjen entiteettien tunnistamiselle ja tiivistämiselle.
Putkistot yhdistävät kolme keskeistä Hugging Facen komponenttia:

  1. Tokenisaattori: Valmistelee tekstin mallille ymmärrettävään muotoon.
  2. Malli: Tämä on putkiston sydän, jossa tehdään todelliset ennusteet esikäsitellyn syötteen perusteella.
  3. Jälkikäsittelijä: Muuttaa mallin raakennusteet luettavaan muotoon.

Nämä putkistot vähentävät laajaa koodaamista ja tarjoavat käyttäjäystävällisen käyttöliittymän useiden NLP-tehtävien suorittamiseen.

Transformers-kirjaston sovellukset Hugging Facessa

Hugging Facen Transformers-kirjasto yksinkertaistaa luonnollisen kielen käsittelyä yhdistämällä mallin tarvittaviin esi- ja jälkikäsittelyvaiheisiin. Asenna kirjasto ja tuo tarvittava toiminto seuraavasti:

pip install -q transformers
from transformers import pipeline

Tämän jälkeen voit suorittaa esimerkiksi sentimenttianalyysin, jossa teksti luokitellaan myönteiseksi tai kielteiseksi. Kirjaston pipeline()-funktio kokoaa yhteen erilaisia käsittelyketjuja. Se tukee myös äänen, kuvien ja useiden tietomuotojen käsittelyä.

Käytännön sovellukset

Tekstin luokittelu

Hugging Facen pipeline()-funktiolla tekstin luokitteluketju luodaan seuraavasti:

classifier = pipeline("text-classification")

Voit antaa käsittelyketjulle merkkijonon tai merkkijonojen luettelon ja saada ennusteet. Tuloksia voi havainnollistaa Pythonin Pandas-kirjastolla. Seuraava esimerkki näyttää, miten luokittelun tulokset tulostetaan:

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")

Tuloste

Result 1: 
Label: POSITIVE 
Score: 1.0 

Result 2: 
Label: POSITIVE 
Score: 0.996 

Nimettyjen entiteettien tunnistus (NER)

NER tunnistaa tekstistä todellisen maailman kohteita eli nimettyjä entiteettejä. Voit käyttää sitä seuraavasti:

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

Tuloste

 Elon Musk: PER, SpaceX: ORG 

Kysymyksiin vastaaminen

Kysymysvastaamisessa poimitaan annetusta tekstistä täsmällinen vastaus kysymykseen. Luo käsittelyketju ja anna sille kysymys sekä asiayhteyden sisältävä teksti:

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)

Tuloste

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

Tekstin luokittelun, NER:n ja kysymysvastaamisen lisäksi Hugging Face tarjoaa monia valmiita käsittelyketjuja. Seuraavassa on muutamia esimerkkejä.

Hugging Facen käsittelyketjujen tehtäviä
Tehtävä Kuvaus Tunniste
Tekstin tuottaminen Tuottaa tekstiä annetun kehotteen perusteella pipeline(task="text-generation")
Tiivistäminen Tiivistää pitkän tekstin tai asiakirjan pipeline(task="summarization")
Kuvien luokittelu Luokittelee syötekuvan pipeline(task="image-classification")
Äänen luokittelu Luokittelee äänidataa pipeline(task="audio-classification")
Kuvaan liittyviin kysymyksiin vastaaminen Vastaa kysymykseen kuvan ja kysymyksen perusteella pipeline(task="vqa")

Tarkemmat kuvaukset ja lisää tehtäviä löydät Hugging Facen pipeline-dokumentaatiosta.

Miksi Hugging suuntaa huomionsa Rustiin?

Hugging face Safetensors and tokenizer Rust
Hugging Facen Safetensors- ja Tokenizers-kirjastojen GitHub-sivut

Hugging Facen ekosysteemi on alkanut käyttää Rustia esimerkiksi Safetensors- ja Tokenizers-kirjastoissa. Se on myös julkaissut uuden Candle-koneoppimiskehyksen. Perinteisistä Python-kehyksistä poiketen Candle on rakennettu Rustilla. Tavoitteena on parantaa suorituskykyä ja yksinkertaistaa käyttökokemusta samalla, kun tuetaan grafiikkasuorittimia.

Candlen keskeinen tavoite on mahdollistaa palvelimeton päättely, kevyiden binäärien käyttöönotto ja Pythonin poistaminen tuotannon työkuormista, joissa sen lisäkuorma voi hidastaa toimintaa. Kehys pyrkii ratkaisemaan ongelmia, joita suurten koneoppimiskehysten, kuten PyTorchin, koko ja hidas käynnistyminen klusterissa aiheuttavat.

Rustista on tulossa suosittu vaihtoehto Pythonille erityisesti seuraavista syistä:

  • Nopeus ja suorituskyky: Rust tunnetaan nopeudestaan. Koneoppimisessa yleisesti käytetyn Pythonin suorituskykyä voi rajoittaa Global Interpreter Lock (GIL), mutta Rustilla ei ole tätä rajoitetta. Se voi suorittaa tehtäviä nopeammin ja parantaa sitä käyttävien projektien suorituskykyä.
  • Turvallisuus: Rust takaa muistiturvallisuuden ilman roskienkerääjää. Tämä on tärkeää rinnakkaisissa järjestelmissä ja Safetensorsin kaltaisissa työkaluissa, joissa tietorakenteiden turvallinen käsittely on ensisijaista.

Safetensors

Safetensors hyötyy Rustin nopeudesta ja turvallisuudesta. Kirjasto käsittelee tensoreita eli moniulotteisia matemaattisia rakenteita. Rust auttaa suorittamaan operaatiot nopeasti ja turvallisesti sekä välttämään muistinkäsittelyyn liittyviä tavallisia ohjelmointivirheitä ja tietoturvaongelmia.

Tokenisaattori

Tokenisaattorit pilkkovat lauseet ja ilmaukset pienemmiksi yksiköiksi, kuten sanoiksi tai termeiksi. Rust nopeuttaa tätä prosessia, mikä parantaa luonnollisen kielen käsittelyn tehokkuutta.

Hugging Facen tokenisaattorin ytimessä on osasanatokenisointi. Se tasapainottaa sana- ja merkkitason tokenisoinnin, jotta tieto säilyy ja sanaston koko pysyy hallittavana. Esimerkiksi ##ing– ja ##ed-alitokenit säilyttävät merkitystietoa ilman tarpeettoman suurta sanastoa.

Osasanatokenisointi edellyttää koulutusvaihetta, jossa etsitään toimiva tasapaino merkki- ja sanatason tokenisoinnin välillä. Pelkät etu- ja loppuliitteitä koskevat säännöt eivät riitä: tehokas tokenisaattori tarvitsee laajojen tekstiaineistojen kielirakenteiden analyysiä. Näin se pystyy käsittelemään uusia sanoja jakamalla ne tunnettuihin osasanoihin ja säilyttämään merkityksen.

Tokenisoinnin osat

Normalization and pre-tokenization Hugging face
Hugging Facen NLP-kurssi

Tokenizers-kirjasto jakaa prosessin useisiin vaiheisiin:

  • Normalizer: Tekee syötemerkkijonolle alustavat muunnokset, kuten pienaakkostamisen, Unicode-normalisoinnin ja ylimääräisten merkkien poistamisen.
  • PreTokenizer: Pilkkoo merkkijonon alustaviin osiin ennalta määritettyjen sääntöjen, esimerkiksi välilyöntien, perusteella.
  • Model: Tunnistaa ja muodostaa alitokenit. Se mukautuu syötedatan ominaisuuksiin ja tarjoaa koulutusmahdollisuuksia.
  • Post-Processor: Lisää esimerkiksi [CLS]– ja [SEP]-tokenit, jotta tulos sopii BERTin kaltaisille transformer-malleille.

Aloita asentamalla kirjasto komennolla pip install tokenizers ja tuomalla se Python-ympäristöösi. Kirjasto tokenisoi suuria tekstimääriä nopeasti, jolloin laskentaresursseja säästyy esimerkiksi mallin koulutukseen.

Tokenizers käyttää Rustia, jonka syntaksi muistuttaa C++:aa mutta joka tuo ohjelmointikielten suunnitteluun uusia käsitteitä. Python-sidosten ansiosta voit hyödyntää matalamman tason kielen suorituskykyä Python-ympäristössä.

Tietoaineistot

Hugging face dataset
Hugging Facen tietoaineistot

Tietoaineistot ovat tekoälyprojektien perusta. Hugging Face tarjoaa monipuolisia aineistoja luonnollisen kielen käsittelyyn ja muihin tehtäviin. Niiden tehokas hyödyntäminen edellyttää lataamisen ja analysoinnin ymmärtämistä. Seuraava Python-esimerkki näyttää, miten aineisto ladataan:

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

Skripti käyttää load_dataset-funktiota SQuAD-aineiston lataamiseen. SQuAD on suosittu kysymysvastaamisen aineisto.

Esikoulutettujen mallien hyödyntäminen ja kokonaisuuden yhdistäminen

Hugging Face Models
Hugging Facen mallit

Esikoulutetut mallit ovat monien syväoppimisprojektien perusta. Ne auttavat tutkijoita ja kehittäjiä aloittamaan ilman kaiken rakentamista alusta. Hugging Face tarjoaa laajan valikoiman malleja, joita voidaan käyttää seuraavasti:

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)

Kun malli ja tokenisaattori on ladattu, voimme luoda funktion, joka vastaanottaa tekstin ja kysymyksen sekä palauttaa tekstistä poimitun vastauksen. Tokenisaattori muuntaa syötteet mallille sopivaan muotoon, minkä jälkeen malli tuottaa vastauksen:

import torch

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

Esimerkissä tuodaan tarvittavat moduulit Transformers-paketista ja ladataan malli sekä sen tokenisaattori from_pretrained-metodilla. Valittu BERT-malli on hienosäädetty SQuAD-aineistolla.

Seuraavassa esimerkissä tekstikappaleesta poimitaan vastaus tiettyyn kysymykseen:


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


get_answer-funktio vastaanottaa tekstin ja kysymyksen, tokenisoi ne ja käyttää esikoulutettua BERT-mallia vastauksen poimimiseen. Se näyttää, miten Transformers-kirjastolla voidaan rakentaa yksinkertainen mutta tehokas kysymysvastaamisjärjestelmä. Käsitteisiin kannattaa tutustua kokeilemalla niitä Google Colab -muistikirjassa.

Johtopäätös

Hugging Facen avoimen lähdekoodin työkalut, esikoulutetut mallit ja helppokäyttöiset käsittelyketjut auttavat sekä kokeneita ammattilaisia että aloittelijoita tutustumaan tekoälyyn. Rustin nopeuden ja turvallisuuden hyödyntäminen korostaa pyrkimystä yhdistää innovaatiot, tehokkuus ja tietoturva. Hugging Face laajentaa pääsyä edistyneisiin tekoälytyökaluihin ja tukee yhteisöllistä oppimista ja kehittämistä.

Olen viettänyt viimeiset viisi vuotta uppoutuen koneoppimisen ja syväoppimisen kiehtovaan maailmaan. Intohimoni ja asiantuntemukseni ovat saaneet minut osallistumaan yli 50 erilaiseen ohjelmistotekniikan hankkeeseen, joissa olen keskittynyt erityisesti tekoälyyn ja koneoppimiseen. Jatkuva uteliaisuuteni on johdattanut minut myös luonnollisen kielen käsittelyn pariin, ja haluan tutkia tätä alaa syvemmin.