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ć.