Kontakt z nami

Kompletny przewodnik dla początkujących dotyczący narzędzi LLM do przytulania twarzy

Narzędzia sztucznej inteligencji 101

Kompletny przewodnik dla początkujących dotyczący narzędzi LLM do przytulania twarzy

mm
PRZYTULANIE TWARZY - KOMPLETNY PRZEWODNIK

Hugging Face to laboratorium badawcze i centrum badawcze AI, które zbudowało społeczność naukowców, badaczy i entuzjastów. W krótkim czasie Hugging Face zyskał znaczną obecność w przestrzeni AI. Giganci techniki w tym Google, Amazon i Nvidia wsparły startup AI Hugging Face znaczącymi inwestycjami, dokonując jego wyceny $ 4.5 mld.

W tym przewodniku przedstawimy transformery, modele LLM i ważną rolę biblioteki Hugging Face w rozwoju społeczności open source zajmującej się sztuczną inteligencją. Omówimy również podstawowe funkcje Hugging Face, w tym potoki, zbiory danych, modele i inne, z praktycznymi przykładami w Pythonie.

Transformatory w NLP

W 2017 roku Uniwersytet Cornell opublikował wpływowy artykuł wprowadzający Transformatory. Są to modele głębokiego uczenia się stosowane w NLP. Odkrycie to przyczyniło się do rozwoju dużych modeli językowych, takich jak ChatGPT.

Duże modele językowe lub LLM to systemy sztucznej inteligencji, które wykorzystują transformatory do rozumienia i tworzenia tekstu podobnego do ludzkiego. Tworzenie tych modeli jest jednak kosztowne, często wymaga wielu milionów dolarów, co ogranicza ich dostępność dla dużych firm.

Przytulanie Twarzy, rozpoczęte w 2016 r., ma na celu udostępnienie wszystkim modeli NLP. Pomimo tego, że jest firmą komercyjną, oferuje szereg zasobów typu open source, pomagających ludziom i organizacjom w niedrogim budowaniu i użytkowaniu modeli transformatorów. Uczenie maszynowe polega na uczeniu komputerów wykonywania zadań poprzez rozpoznawanie wzorców, natomiast uczenie głębokie, stanowiące podzbiór uczenia maszynowego, tworzy sieć, która uczy się niezależnie. Transformatory to rodzaj architektury głębokiego uczenia się, która skutecznie i elastycznie wykorzystuje dane wejściowe, co czyni ją popularnym wyborem do budowania dużych modeli językowych ze względu na mniejsze wymagania czasowe szkolenia.

Jak przytulanie twarzy ułatwia projekty NLP i LLM

Przytulająca twarz Ekosystem - modele, zbiór danych, metryki, transformatory, przyspieszenie, tokenizatory

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

  1. Do wyboru szereg wstępnie przeszkolonych modeli.
  2. Narzędzia i przykłady pozwalające dostosować te modele do konkretnych potrzeb.
  3. Łatwe opcje wdrażania dla różnych środowisk.

Świetnym zasobem dostępnym za pośrednictwem Hugging Face jest Otwórz tabelę liderów LLM. Funkcjonując jako kompleksowa platforma, systematycznie monitoruje, ocenia i ocenia efektywność spektrum dużych modeli językowych (LLM) i chatbotów, zapewniając wnikliwą analizę postępów w domenie open source

LLM Benchmarks mierzy modele za pomocą czterech wskaźników:

  • Wyzwanie rozumowania AI2 (25 pytań) — seria pytań dotyczących programu nauczania przedmiotów ścisłych.
  • HellaSwag (10 strzałów) — test wnioskowania opartego na zdrowym rozsądku, który, choć prosty dla ludzi, stanowi poważne wyzwanie dla nowoczesnych modeli.
  • MMLU (5-strzał) — wieloaspektowa ocena obejmująca kompetencje modelu tekstowego w 57 różnych dziedzinach, obejmujących m.in. podstawy matematyki, prawa i informatyki.
  • TruthfulQA (0-shot) — narzędzie służące do określania tendencji modelu do powtarzania często spotykanych w Internecie dezinformacji.

Benchmarki, które są opisane przy użyciu terminów takich jak „25 strzałów”, „10 strzałów”, „5 strzałów” i „0 strzałów”, wskazują liczbę szybkich przykładów, jakie model otrzymuje w procesie oceny aby ocenić jego wydajność i zdolności rozumowania w różnych dziedzinach. W paradygmatach „kilku strzałów” modele otrzymują niewielką liczbę przykładów pomagających w udzieleniu odpowiedzi, podczas gdy w ustawieniu „0 strzałów” modele nie otrzymują żadnych przykładów i muszą polegać wyłącznie na swojej wcześniejszej wiedzy, aby odpowiednio zareagować .

Składniki przytulającej twarzy

Rurociągi

„rurociągi„są częścią biblioteki Transformers Hugging Face – funkcji, która ułatwia korzystanie z wstępnie wytrenowanych modeli dostępnych w repozytorium Hugging Face. Zapewnia ona intuicyjny interfejs API do szeregu zadań, w tym analizy sentymentu, odpowiadania na pytania, modelowania języka maskowanego, rozpoznawania jednostek nazwanych i podsumowywania.

Rurociągi integrują trzy główne komponenty Przytulającej Twarzy:

  1. Tokenizator: Przygotowuje tekst dla modelu, konwertując go do formatu zrozumiałego dla modelu.
  2. Model: Jest to serce potoku, w którym dokonywane są rzeczywiste przewidywania na podstawie wstępnie przetworzonych danych wejściowych.
  3. Postprocesor: przekształca surowe przewidywania modelu w formę czytelną dla człowieka.

Potoki te nie tylko ograniczają rozległe kodowanie, ale także oferują przyjazny dla użytkownika interfejs do realizacji różnych zadań NLP.

Aplikacje Transformer korzystające z biblioteki Hugging Face

Najważniejszym elementem biblioteki Hugging Face jest biblioteka Transformers, która upraszcza zadania NLP, łącząc model z niezbędnymi etapami przetwarzania przed i po, usprawniając proces analizy. Aby zainstalować i zaimportować bibliotekę, użyj następujących poleceń:

pip install -q transformers
from transformers import pipeline

Po wykonaniu tej czynności można wykonywać zadania NLP, zaczynając od analizy sentymentu, która kategoryzuje tekst na pozytywny lub negatywny. Zaawansowana funkcja biblioteki pipeline() pełni funkcję centrum, które łączy inne potoki i ułatwia realizację specyficznych zadań w dziedzinie audio, obrazu i multimodalnej.

Praktyczne zastosowania

Klasyfikacja tekstu

Klasyfikacja tekstu staje się dziecinnie prosta dzięki funkcji pipeline() w Hugging Face. Oto jak zainicjować potok klasyfikacji tekstu:

classifier = pipeline("text-classification")

Aby uzyskać praktyczne doświadczenie, wprowadź ciąg lub listę ciągów do potoku, aby uzyskać przewidywania, które można starannie zwizualizować za pomocą biblioteki Pandas w języku Python. Poniżej znajduje się fragment kodu Pythona demonstrujący to:

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

Wydajność

Result 1: 
Label: POSITIVE 
Score: 1.0 

Result 2: 
Label: POSITIVE 
Score: 0.996 

Rozpoznawanie nazwanych jednostek (NER)

NER odgrywa kluczową rolę w wyodrębnianiu z tekstu obiektów ze świata rzeczywistego, zwanych „nazwanymi encjami”. Wykorzystaj potok NER, aby skutecznie identyfikować te encje:

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

Wydajność

 Elon Musk: PER, SpaceX: ORG 

Odpowiadanie na pytania

Odpowiadanie na pytania polega na wydobywaniu precyzyjnych odpowiedzi na konkretne pytania z danego kontekstu. Zainicjuj potok odpowiedzi na pytania i wprowadź swoje pytanie oraz kontekst, aby uzyskać pożądaną odpowiedź:

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)

Wydajność

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

Funkcja potoku w Hugging Face oferuje szereg gotowych potoków dla różnych zadań, poza klasyfikacją tekstu, NER i odpowiadaniem na pytania. Poniżej znajdują się szczegółowe informacje na temat podzbioru dostępnych zadań:

Tabela: Zadania dotyczące rurociągu obejmującego twarz

Zadanie OPIS Identyfikator rurociągu
Generowanie tekstu Generuj tekst na podstawie danego podpowiedzi potok(zadanie=”generowanie tekstu”)
Podsumowanie Streść długi tekst lub dokument potok(zadanie=”podsumowanie”)
Klasyfikacja obrazu Oznacz obraz wejściowy potok(zadanie=”klasyfikacja-obrazu”)
Klasyfikacja dźwięku Kategoryzuj dane audio potok(zadanie=”klasyfikacja audio”)
Wizualne odpowiadanie na pytania Odpowiedz na zapytanie, używając zarówno obrazu, jak i pytania potok(zadanie=”vqa”)

 

Szczegółowe opisy i więcej zadań znajdziesz na stronie dokumentacja rurociągu na stronie internetowej Hugging Face.

Dlaczego Hugging Face skupia się na Rust

Przytulająca twarz Safetensors i tokenizer Rust

Przytulająca twarz Safetensors i tokenizer Strona GitHub

Ekosystem Hugging Face (HF) zaczął wykorzystywać Rusta w swoich bibliotekach, takich jak czujniki bezpieczeństwa i tokenizatory.

Hugging Face niedawno wypuściło także nową platformę uczenia maszynowego o nazwie Świeca. W przeciwieństwie do tradycyjnych frameworków korzystających z Pythona, Candle jest zbudowany w Rust. Celem używania Rusta jest zwiększenie wydajności i uproszczenie doświadczenia użytkownika przy jednoczesnej obsłudze operacji GPU.

Kluczowym celem Candle jest ułatwienie wnioskowania bezserwerowego, umożliwienie wdrażania lekkich plików binarnych i usunięcie Pythona z obciążeń produkcyjnych, które czasami mogą spowalniać procesy ze względu na koszty ogólne. Ta platforma stanowi rozwiązanie problemów napotykanych w przypadku pełnych platform uczenia maszynowego, takich jak PyTorch, które są duże i powolne podczas tworzenia instancji w klastrze.

Przyjrzyjmy się bliżej, dlaczego Rust staje się znacznie chętniej wybieranym językiem niż Python.

  1. Szybkość i wydajność – Rust znany jest z niesamowitej szybkości, przewyższającej Pythona, tradycyjnie używanego w frameworkach uczenia maszynowego. Wydajność Pythona może czasami spadać ze względu na blokadę interpretera globalnego (GIL), ale Rust nie ma z tym problemu, obiecując szybsze wykonywanie zadań, a co za tym idzie, lepszą wydajność w projektach, w których jest wdrażany.
  2. Bezpieczeństwo – Rust zapewnia gwarancje bezpieczeństwa pamięci bez modułu zbierającego elementy bezużyteczne, co jest niezbędne w zapewnieniu bezpieczeństwa systemów współbieżnych. Odgrywa to kluczową rolę w obszarach takich jak zabezpieczenia, w których bezpieczeństwo obsługi struktur danych jest priorytetem.

Bezpieczniki

Bezpieczniki Skorzystaj z funkcji szybkości i bezpieczeństwa Rusta. Safetensors to narzędzie do manipulacji tensorami, złożonym elementem matematycznym, a Rust gwarantuje nie tylko szybkość, ale i bezpieczeństwo operacji, unikając typowych błędów i problemów z bezpieczeństwem, które mogą wynikać z nieprawidłowego zarządzania pamięcią.

Tokenizator

Tokenizatory obsługiwać dzielenie zdań lub fraz na mniejsze jednostki, takie jak słowa lub terminy. Rust pomaga w tym procesie, przyspieszając czas wykonania, zapewniając, że proces tokenizacji jest nie tylko dokładny, ale także szybki, zwiększając efektywność zadań przetwarzania języka naturalnego.

Podstawą tokenizatora Hugging Face jest koncepcja tokenizacji podsłownej, która zapewnia delikatną równowagę między tokenizacją na poziomie słowa i znaku, optymalizując retencję informacji i rozmiar słownictwa. Działa ona poprzez tworzenie podtokenów, takich jak „##ing” i „##ed”, zachowując bogactwo semantyczne i unikając rozdętego słownictwa.

Tokenizacja podsłów obejmuje fazę uczenia mającą na celu określenie najbardziej skutecznej równowagi pomiędzy tokenizacją na poziomie znaku i słowa. Wykracza to poza zwykłe reguły przedrostków i sufiksów i wymaga kompleksowej analizy wzorców językowych w obszernych korpusach tekstowych w celu zaprojektowania wydajnego tokenizatora podsłów. Wygenerowany tokenizator jest biegły w obsłudze nowych słów, dzieląc je na znane słowa podrzędne, zachowując wysoki poziom zrozumienia semantycznego.

Komponenty tokenizacji

Biblioteka tokenizers dzieli proces tokenizacji na kilka etapów, z których każdy dotyczy innego aspektu tokenizacji. Przyjrzyjmy się bliżej tym komponentom:

  • Normalizer: Wykonuje początkowe transformacje ciągu wejściowego, stosując niezbędne korekty, takie jak konwersja małych liter, normalizacja Unicode i usuwanie.
  • PreTokenizer: Odpowiedzialny za fragmentację ciągu wejściowego na wstępne segmenty, określenie podziału na podstawie predefiniowanych reguł, takich jak rozgraniczenia spacji.
  • Model: Nadzoruje odkrywanie i tworzenie subtokenów, dostosowując się do specyfiki Twoich danych wejściowych i oferując możliwości szkoleniowe.
  • Postprocesor: Poprawia funkcje konstrukcyjne, aby ułatwić kompatybilność z wieloma modelami opartymi na transformatorach, takimi jak BERT, poprzez dodanie tokenów, takich jak [CLS] i [SEP].

Aby rozpocząć korzystanie z tokenizatorów Hugging Face, zainstaluj bibliotekę za pomocą polecenia pip install tokenizers i zaimportuj go do swojego środowiska Python. Biblioteka może tokenizować duże ilości tekstu w bardzo krótkim czasie, oszczędzając w ten sposób cenne zasoby obliczeniowe na bardziej intensywne zadania, takie jak uczenie modeli.

Używana jest biblioteka tokenizerów Rdza który dziedziczy podobieństwo składniowe C++, wprowadzając jednocześnie nowatorskie koncepcje w projektowaniu języków programowania. W połączeniu z powiązaniami z Pythonem, zapewnia on wydajność języka niższego poziomu podczas pracy w środowisku Python.

Zbiory danych

Zbiory danych stanowią podstawę projektów AI. Hugging Face oferuje szeroką gamę zestawów danych, odpowiednich do szeregu zadań NLP i nie tylko. Aby efektywnie z nich korzystać, niezbędne jest zrozumienie procesu ich ładowania i analizowania. Poniżej znajduje się dobrze skomentowany skrypt w języku Python pokazujący, jak eksplorować zbiory danych dostępne w Hugging Face:

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

Ten skrypt używa funkcji loading_dataset do ładowania zestawu danych SQuAD, co jest popularnym wyborem w przypadku zadań polegających na odpowiadaniu na pytania.

Wykorzystanie wstępnie wyszkolonych modeli i połączenie ich wszystkich w jedną całość

Wstępnie wyszkolone modele stanowią podstawę wielu projektów głębokiego uczenia się, umożliwiając badaczom i programistom szybkie rozpoczynanie inicjatyw bez zaczynania od zera. Hugging Face ułatwia eksplorację różnorodnej gamy wstępnie wyszkolonych modeli, jak pokazano w poniższym kodzie:

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)

Po załadowaniu modelu i tokenizera możemy teraz przystąpić do tworzenia funkcji, która pobiera fragment tekstu i pytanie jako dane wejściowe i zwraca odpowiedź wyodrębnioną z tekstu. Wykorzystamy tokenizer do przetworzenia tekstu wejściowego i pytania do formatu zgodnego z modelem, a następnie wprowadzimy przetworzone dane wejściowe do modelu, aby uzyskać odpowiedź:

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

We fragmencie kodu importujemy niezbędne moduły z pakietu transformatorów, następnie ładujemy wstępnie wytrenowany model i odpowiadający mu tokenizer metodą from_pretrained. Wybieramy model BERT dostosowany do zbioru danych SQuAD.

Zobaczmy przykładowy przypadek użycia tej funkcji, w którym mamy akapit tekstu i chcemy wyodrębnić z niego konkretną odpowiedź na pytanie:

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


W tym skrypcie budujemy funkcję get_answer, która przyjmuje tekst i pytanie, odpowiednio je tokenizuje i wykorzystuje wstępnie wytrenowany model BERT do wyodrębnienia odpowiedzi z tekstu. Demonstruje ona praktyczne zastosowanie biblioteki transformers Hugging Face do zbudowania prostego, a zarazem wydajnego systemu pytań i odpowiedzi. Aby dobrze zrozumieć te koncepcje, zaleca się przeprowadzenie eksperymentów z użyciem… Notatnik Google Colab.

Podsumowanie

Dzięki bogatemu wachlarzowi narzędzi open source, wstępnie wytrenowanym modelom i przyjaznym dla użytkownika procesom, platforma umożliwia zarówno doświadczonym profesjonalistom, jak i nowicjuszom zagłębianie się w rozległy świat sztucznej inteligencji z łatwością i zrozumieniem. Co więcej, inicjatywa integracji języka Rust, ze względu na jego szybkość i bezpieczeństwo, podkreśla zaangażowanie Hugging Face w promowanie innowacji przy jednoczesnym zapewnieniu wydajności i bezpieczeństwa w aplikacjach AI. Przełomowa praca Hugging Face nie tylko demokratyzuje dostęp do zaawansowanych narzędzi AI, ale także tworzy środowisko współpracy dla nauki i rozwoju w obszarze AI, ułatwiając przyszłość, w której AI będzie powszechnie dostępna.

Ostatnie pięć lat spędziłem zanurzając się w fascynującym świecie uczenia maszynowego i głębokiego uczenia się. Moja pasja i wiedza sprawiły, że uczestniczyłem w ponad 50 różnorodnych projektach z zakresu inżynierii oprogramowania, ze szczególnym uwzględnieniem AI/ML. Moja ciągła ciekawość przyciągnęła mnie również w stronę przetwarzania języka naturalnego – dziedziny, którą chcę dalej zgłębiać.