Narzędzia AI 101

Kompletny przewodnik dla początkujących po narzędziach Hugging Face LLM

mm
Dodaj Unite.AI do preferowanych ÅšrÃģdeł w Google
HUGGING FACE - COMPLETE GUIDE

Hugging Face to laboratorium badawcze i centrum, ktÃģre zbudowało społeczność naukowcÃģw, badaczy i entuzjastÃģw. W krÃģtkim czasie Hugging Face zdobyło znaczącą pozycję w przestrzeni AI. Tech giganci w tym Google (GOOGL ), Amazon (AMZN ) i Nvidia (NVDA ) wesprzeły startup Hugging Face znaczącymi inwestycjami, co sprawiło, Åže jego wycena wynosi 4,5 miliarda dolarÃģw.

W tym przewodniku wprowadzimy transformery, LLM i wyjaśnimy, jak biblioteka Hugging Face odgrywa waÅžną rolę w tworzeniu społeczności open-source AI. Przeanalizujemy rÃģwnieÅž podstawowe funkcje Hugging Face, w tym potoki, zestawy danych, modele i wiele więcej, z przykładami w Pythonie.

Transformery w NLP

W 2017 roku Uniwersytet Cornell opublikował wpływowy artykuł, ktÃģry wprowadził transformery. Są to głębokie modele uczenia maszynowego stosowane w NLP. To odkrycie przyspieszyło rozwÃģj duÅžych modeli językowych, takich jak ChatGPT.

DuÅže modele językowe, czyli LLM, to systemy AI, ktÃģre wykorzystują transformery do zrozumienia i tworzenia tekstÃģw podobnych do ludzkich. Jednak tworzenie tych modeli jest drogie, często wymaga milionÃģw dolarÃģw, co ogranicza ich dostępność do duÅžych firm.

Hugging Face, załoÅžone w 2016 roku, ma na celu uczynienie modeli NLP dostępnymi dla wszystkich. Pomimo tego, Åže jest to firma komercyjna, oferuje szereg otwartych zasobÃģw, ktÃģre pomagają ludziom i organizacjom w tanim budowaniu i korzystaniu z modeli transformatorowych. Uczenie maszynowe polega na nauczaniu komputerÃģw wykonywania zadań poprzez rozpoznawanie wzorcÃģw, podczas gdy głębokie uczenie maszynowe, podzbiÃģr uczenia maszynowego, tworzy sieć, ktÃģra uczy się niezaleÅžnie. Transformery są rodzajem architektury głębokiego uczenia maszynowego, ktÃģry skutecznie i elastycznie wykorzystuje dane wejściowe, co sprawia, Åže są popularnym wyborem do budowy duÅžych modeli językowych ze względu na mniejsze wymagania czasu szkolenia.

Jak Hugging ułatwia projekty NLP i LLM

Ekosystem Hugging Face - modele, zestawy danych, metryki, transformery, przyspieszanie, tokenizatory

Hugging Face ułatwia pracę z LLM, oferując:

  1. zestaw wstępnie wytrenowanych modeli do wyboru.
  2. narzędzia i przykłady do dostosowania tych modeli do Twoich potrzeb.
  3. łatwe opcje wdroÅženia w rÃģÅžnych środowiskach.

Jednym z cennych zasobÃģw dostępnych za pośrednictwem Hugging Face jest Open LLM Leaderboard. Funkcjonuje jako kompleksowa platforma, ktÃģra systematycznie monitoruje, klasyfikuje i ocenia wydajność szeregu duÅžych modeli językowych (LLM) i chatbotÃģw, dostarczając analizę postępÃģw w dziedzinie open-source.

Składniki Hugging

Potoki

‘Potoki’ są częścią biblioteki transformatorÃģw Hugging Face, funkcją, ktÃģra ułatwia korzystanie z wstępnie wytrenowanych modeli dostępnych w repozytorium Hugging Face. Zapewnia intuicyjny interfejs API dla szeregu zadań, w tym analizy sentymentu, odpowiedzi na pytania, modelowania języka z maskowaniem, rozpoznawania nazwanych encji i podsumowywania.

Potoki łączą trzy podstawowe składniki Hugging Face:

  1. Tokenizator: Przygotowuje TwÃģj tekst do modelu, konwertując go na format, ktÃģry model moÅže zrozumieć.
  2. Model: To serce potoku, gdzie dokonywane są rzeczywiste przewidywania na podstawie przetworzonych danych wejściowych.
  3. Post-procesor: Przekształca surowe przewidywania modelu w czytelny dla człowieka format.

Te potoki nie tylko redukują obszerny kod, ale takÅže oferują przyjazny interfejs do wykonywania rÃģÅžnych zadań NLP.

Zastosowania transformatorÃģw za pomocą biblioteki Hugging

Jednym z największych atutÃģw biblioteki Hugging Face jest biblioteka TransformatorÃģw, ktÃģra upraszcza zadania NLP, łącząc model z niezbędnymi etapami przetwarzania przed i po, strumieniując proces analizy. Aby zainstalować i zaimportować bibliotekę, uÅžyj następujących poleceń:

pip install -q transformers
from transformers import pipeline

Po wykonaniu tych czynności moÅžesz wykonywać zadania NLP, zaczynając od analizy sentymentu, ktÃģra klasyfikuje tekst na sentyment pozytywny lub negatywny. PotęŞna funkcja pipeline() słuÅžy jako centrum, obejmujące inne potoki i ułatwiające zastosowania zadań w dziedzinach audio, wizji i multimodalnej.

Zastosowania praktyczne

Klasyfikacja tekstu

Klasyfikacja tekstu staje się łatwa dzięki funkcji pipeline() Hugging Face. Oto, jak moÅžesz zainicjować potok klasyfikacji tekstu:

klasyfikator = pipeline("klasyfikacja-tekstu")

Dla praktycznego doświadczenia wprowadÅš ciąg lub listę ciągÃģw do potoku, aby uzyskać przewidywania, ktÃģre moÅžna wygodnie wizualizować za pomocą biblioteki Pandas w Pythonie. PoniÅžej znajduje się fragment kodu Pythona, ktÃģry to demonstruje:

zdania = ["Jestem zachwycony, Åže mogę Cię zaprosić do wspaniałego świata AI.",
"Nie powinno Cię to zawieść."]

# Pobierz wyniki klasyfikacji dla kaÅždego zdania na liście
wyniki = klasyfikator(zdania)

# Przeiteruj wyniki i wydrukuj etykietę i wynik
for i, wynik in enumerate(wyniki):
print(f"Wynik {i + 1}:")
print(f" Etykieta: {wynik['etykieta']}")
print(f" Wynik: {round(wynik['wynik'], 3)}\n")

Rozpoznawanie nazwanych encji (NER)

NER jest kluczowe w ekstrakcji obiektÃģw świata rzeczywistego, określanych jako “nazwane encje” z tekstu. Wykorzystaj potok NER, aby skutecznie identyfikować te encje:

tagger_NER = pipeline("rozpoznawanie-encji", strategia_agregacji="prosta")
tekst = "Elon Musk jest dyrektorem generalnym SpaceX."
wyniki = tagger_NER(tekst)
print(wyniki)

Wynik

 Elon Musk: OSOBA, SpaceX: ORGANIZACJA 

Odpowiadanie na pytania

Odpowiadanie na pytania obejmuje ekstrakcję precyzyjnych odpowiedzi na konkretne pytania z danego kontekstu. Zainicjuj potok odpowiedzi na pytania i wprowadÅš swoje pytanie oraz kontekst, aby uzyskać poŞądaną odpowiedÅš:

czytelnik = pipeline("odpowiadanie-na-pytania")
tekst = "Hugging Face to firma tworząca narzędzia do NLP. Ma siedzibę w Nowym Jorku i została załoÅžona w 2016 roku."
pytanie = "Gdzie ma siedzibę Hugging Face?"
wyniki = czytelnik(pytanie=pytanie, kontekst=tekst)
print(wyniki)

Wynik

 { 'wynik': 0.998, 'start': 51, 'koniec': 60, 'odpowiedÅš': 'Nowy Jork' } 

Praca Hugging Face nad potokiem oferuje szereg wstępnie zdefiniowanych potokÃģw dla rÃģÅžnych zadań, poza klasyfikacją tekstu, NER i odpowiedzią na pytania. PoniÅžej znajdują się szczegÃģły dotyczące podzbioru dostępnych zadań:

Tabela: Zadania potoku Hugging Face

Zadanie Opis Identyfikator potoku
Generowanie tekstu Generuj tekst na podstawie danego promtu pipeline(task=”generowanie-tekstu”)
Podsumowywanie Podsumuj długi tekst lub dokument pipeline(task=”podsumowywanie”)
Klasyfikacja obrazu Etykietuj obraz wejściowy pipeline(task=”klasyfikacja-obrazu”)
Klasyfikacja audio Kategoryzuj dane audio pipeline(task=”klasyfikacja-audio”)
Odpowiadanie na pytania wizualne Odpowiedz na pytanie z uÅžyciem obrazu i pytania pipeline(task=”odpowiadanie-na-pytania-wizualne”)

 

Aby uzyskać szczegÃģłowe opisy i więcej zadań, odwiedÅš dokumentację potoku na stronie Hugging Face.

Dlaczego Hugging przenosi swoją uwagę na Rust

Hugging face Safetensors i tokenizator Rust

Hugging face Safetensors i tokenizator GitHub Page

Ekosystem Hugging Face (HF) zaczął wykorzystywać Rust w swoich bibliotekach, takich jak safetensors i tokenizatory.

Hugging Face niedawno wydał nowy framework uczenia maszynowego o nazwie Candle. W przeciwieństwie do tradycyjnych frameworkÃģw, ktÃģre wykorzystują Python, Candle jest zbudowany z Rust. Celem wykorzystania Rust jest poprawa wydajności i uproszczenie doświadczenia uÅžytkownika, jednocześnie obsługując operacje na GPU.

GłÃģwnym celem Candle jest ułatwienie bezserwerowej inferencji, co umoÅžliwia wdroÅženie lekkich binarnych plikÃģw i usuwa Python z obciÄ…Åžeń produkcyjnych, ktÃģre mogą czasem spowalniać procesy z powodu swoich nakładÃģw. Ten framework jest rozwiązaniem problemÃģw spotykanych w pełnych frameworkach uczenia maszynowego, takich jak PyTorch, ktÃģre są duÅže i wolne podczas tworzenia instancji w klastrze.

Zbadajmy, dlaczego Rust staje się bardziej popularny niÅž Python.

  1. Szybkość i wydajność – Rust jest znany ze swojej niesamowitej szybkości, przewyÅžszając Python, ktÃģry tradycyjnie jest uÅžywany w frameworkach uczenia maszynowego. Wydajność Pythona moÅže być czasem spowolniona z powodu jego Global Interpreter Lock (GIL), ale Rust nie ma tego problemu, co gwarantuje szybsze wykonanie zadań i lepszą wydajność w projektach, w ktÃģrych jest wdroÅžony.
  2. Bezpieczeństwo – Rust zapewnia gwarancje bezpieczeństwa pamięci bez kolektora śmieci, co jest istotne w zapewnieniu bezpieczeństwa systemÃģw wspÃģłbieÅžnych. Jest to kluczowy aspekt w obszarach, takich jak safetensors, gdzie bezpieczeństwo w obsłudze struktur danych jest priorytetem.

Safetensors

Safetensors korzystają z szybkości i cech bezpieczeństwa Rust. Safetensors obejmują manipulację tensorami, złoÅžoną jednostką matematyczną, a Rust zapewnia, Åže operacje te są nie tylko szybkie, ale takÅže bezpieczne, unikając typowych błędÃģw i problemÃģw z bezpieczeństwem, ktÃģre mogą wynikać z nieprawidłowej obsługi pamięci.

Tokenizator

Tokenizatory są odpowiedzialne za rozdzielanie zdań lub fraz na mniejsze jednostki, takie jak słowa lub terminy. Rust przyspiesza wykonanie tego procesu, zapewniając, Åže tokenizacja nie tylko jest dokładna, ale takÅže szybka, co zwiększa wydajność zadań przetwarzania języka naturalnego.

Podstawą tokenizatora Hugging Face jest pojęcie subword tokenizacji, ktÃģre osiąga delikatny balans między tokenizacją na poziomie słÃģw a tokenizacją na poziomie znakÃģw, aby zoptymalizować zachowanie informacji i rozmiar słownictwa. Funkcjonuje poprzez tworzenie subtokenÃģw, takich jak “##ing” i “##ed”, zachowując bogactwo semantyczne, jednocześnie unikając rozdętego słownictwa.

Subword tokenizacja obejmuje fazę szkolenia w celu identyfikacji najbardziej skutecznego balansu między tokenizacją na poziomie słÃģw a tokenizacją na poziomie znakÃģw. Przekracza proste reguły prefiksÃģw i sufiksÃģw, wymagając dogłębnej analizy wzorcÃģw językowych w obszernych korpusach tekstowych w celu opracowania wydajnego tokenizatora subword. Wygenerowany tokenizator jest zdolny do radzenia sobie z nowymi słowami, dzieląc je na znane subwords, utrzymując wysoki poziom zrozumienia semantycznego.

Składniki tokenizacji

Biblioteka tokenizatorÃģw dzieli proces tokenizacji na kilka krokÃģw, z ktÃģrych kaÅždy dotyczy innego aspektu tokenizacji. Zbadajmy te składniki:

  • Normalizator: Wykonuje początkowe transformacje na ciągu wejściowym, stosując niezbędne dostosowania, takie jak konwersja na małe litery, normalizacja Unicode i usuwanie.
  • Pre-tokenizator: Odpowiedzialny za fragmentację ciągu wejściowego na pre-segmenty, określając podziały na podstawie predefiniowanych reguł, takich jak rozdzielenie spacjami.
  • Model: Nadzoruje odkrywanie i tworzenie subtokenÃģw, dostosowując się do specyfiki Twoich danych wejściowych i oferując moÅžliwości szkolenia.
  • Post-procesor: Ulepsza konstrukcję, aby zapewnić zgodność z wieloma modelami opartymi na transformatorach, takimi jak BERT, dodając tokeny takie jak [CLS] i [SEP].

Aby rozpocząć pracę z tokenizatorami Hugging Face, zainstaluj bibliotekę za pomocą polecenia pip install tokenizers i zaimportuj ją do środowiska Python. Biblioteka moÅže tokenizować duÅže ilości tekstu w bardzo krÃģtkim czasie, oszczędzając cenne zasoby obliczeniowe na zadania takie jak szkolenie modeli.

Biblioteka tokenizatorÃģw wykorzystuje Rust, ktÃģry dziedziczy podobieństwo składniowe do C++, wprowadzając nowe pojęcia w projektowaniu języka programowania. Połączony z powiązaniami Pythona, zapewnia wydajność języka niskiego poziomu, pracując w środowisku Python.

Zestawy danych

Zestawy danych są podstawą projektÃģw AI. Hugging Face oferuje szeroki wybÃģr zestawÃģw danych, odpowiednich dla rÃģÅžnych zadań NLP i innych. Aby wykorzystać je efektywnie, waÅžne jest zrozumienie procesu ładowania i analizy. PoniÅžej znajduje się dobrze skomentowany skrypt Pythona, ktÃģry pokazuje, jak eksplorować zestawy danych dostępne w Hugging Face:

from datasets import load_dataset
# Załaduj zestaw danych
zestaw_danych = load_dataset('squad')
# Wyświetl pierwszy wpis
print(zestaw_danych[0])

Ten skrypt uÅžywa funkcji load_dataset do załadowania zestawu danych SQuAD, ktÃģry jest popularnym wyborem do zadań odpowiedzi na pytania.

Wykorzystanie wstępnie wytrenowanych modeli i łączenie wszystkiego

Wstępnie wytrenowane modele tworzą podstawę wielu projektÃģw głębokiego uczenia maszynowego, umoÅžliwiając badaczom i deweloperom rozpoczęcie pracy bez konieczności rozpoczynania od zera. Hugging Face ułatwia eksplorację szerokiej gamy wstępnie wytrenowanych modeli, jak pokazano w poniÅžszym kodzie:

from transformers import AutoModelForQuestionAnswering, AutoTokenizer

# Załaduj wstępnie wytrenowany model i tokenizator
model = AutoModelForQuestionAnswering.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')
tokenizator = AutoTokenizer.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')

# Wyświetl architekturę modelu
print(model)

Z modelem i tokenizatorem załadowanymi moÅžemy teraz utworzyć funkcję, ktÃģra przyjmuje tekst i pytanie jako dane wejściowe i zwraca odpowiedÅš wyciągniętą z tekstu. Będziemy wykorzystywać tokenizator do przetworzenia danych wejściowych w format zgodny z modelem, a następnie wprowadzimy ten przetworzony wejście do modelu, aby uzyskać odpowiedÅš:


def get_answer(tekst, pytanie):
# Tokenizuj dane wejściowe
dane_wejściowe = tokenizator(pytanie, tekst, return_tensors='pt', max_length=512, truncation=True)
dane_wyjściowe = model(**dane_wejściowe)

# Pobierz wyniki startu i końca dla odpowiedzi
start_odpowiedzi = torch.argmax(dane_wyjściowe.start_logits)
end_odpowiedzi = torch.argmax(dane_wyjściowe.end_logits) + 1

odpowiedÅš = tokenizator.convert_tokens_to_string(tokenizator.convert_ids_to_tokens(dane_wejściowe['input_ids'][0][start_odpowiedzi:end_odpowiedzi]))
return odpowiedÅš

W fragmencie kodu importujemy niezbędne moduły z pakietu transformers, a następnie ładujemy wstępnie wytrenowany model i odpowiadający mu tokenizator za pomocą metody from_pretrained. Wybieramy model BERT, ktÃģry został wytrenowany na zestawie danych SQuAD.

Zobaczmy przykład uÅžycia tej funkcji, w ktÃģrym mamy paragraf tekstu i chcemy wydobyć konkretną odpowiedÅš na pytanie z tego tekstu:


tekst = """
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.
"""

pytanie = "Kto zaprojektował wieŞę Eiffela?"

# Pobierz odpowiedÅš na pytanie
odpowiedÅš = get_answer(tekst, pytanie)
print(f"OdpowiedÅš na pytanie to: {odpowiedÅš}")
# Wynik: OdpowiedÅš na pytanie to: Gustave Eiffel

W tym skrypcie tworzymy funkcję get_answer, ktÃģra przyjmuje tekst i pytanie, tokenizuje je odpowiednio, a następnie wykorzystuje wstępnie wytrenowany model BERT do wyciągnięcia odpowiedzi z tekstu. Demonstruje praktyczne zastosowanie biblioteki transformatorÃģw Hugging Face do budowy prostego, ale potęŞnego systemu odpowiedzi na pytania. Aby dobrze zrozumieć te pojęcia, zalecane jest przeprowadzenie ręcznych eksperymentÃģw przy uÅžyciu notesu Google Colab.

Podsumowanie

Poprzez swoje szerokie otwarte narzędzia, wstępnie wytrenowane modele i przyjazne potoki, Hugging Face umoÅžliwia zarÃģwno doświadczonym profesjonalistom, jak i nowicjuszom wkraczanie w ogromny świat AI z poczuciem łatwości i zrozumienia. Co więcej, inicjatywa integracji Rust, ze względu na jego szybkość i cechy bezpieczeństwa, podkreśla zaangaÅžowanie Hugging Face w promowanie innowacji, jednocześnie zapewniając wydajność i bezpieczeństwo w aplikacjach AI. Przełomowa praca Hugging Face nie tylko demokratyzuje dostęp do wysokozaawansowanych narzędzi AI, ale takÅže pielęgnuje wspÃģłpracujące środowisko dla uczenia się i rozwoju w przestrzeni AI, ułatwiając przyszłość, w ktÃģrej AI jest dostępna dla wszystkich.

Przez ostatnie pięć lat zanurzałem się w fascynującym świecie Machine Learning i Deep Learning. Moja pasja i ekspertyza doprowadziły mnie do udziału w ponad 50 rÃģÅžnorodnych projektach inÅžynierii oprogramowania, ze szczegÃģlnym uwzględnieniem AI/ML. Moja nieustanna ciekawość rÃģwnieÅž skierowała mnie w stronę Natural Language Processing, dziedziny, ktÃģrą chcę dalej eksplorować.