Công cụ AI 101

Hướng Dẫn Toàn Diện Cho Người Mới Bắt Đầu Về Công Cụ LLM Của Hugging Face

mm
Thêm Unite.AI vào các nguồn ưu tiên của bạn trên Google
HUGGING FACE - COMPLETE GUIDE

Hugging Face là một phòng thí nghiệm nghiên cứu AI và trung tâm đã xây dựng một cộng đồng các học giả, nhà nghiên cứu và người đam mê. Trong một khoảng thời gian ngắn, Hugging Face đã có một sự hiện diện đáng kể trong không gian AI. Các công ty công nghệ lớn bao gồm Google (GOOGL ), Amazon (AMZN ) và Nvidia (NVDA ) đã đầu tư đáng kể vào startup Hugging Face, khiến giá trị của nó lên tới $4,5 tỷ.

Trong hướng dẫn này, chúng tôi sẽ giới thiệu các biến đổi, LLM và vai trò quan trọng của thư viện Hugging Face trong việc thúc đẩy một cộng đồng AI mã nguồn mở. Chúng tôi cũng sẽ đi qua các tính năng thiết yếu của Hugging Face, bao gồm các đường ống, tập dữ liệu, mô hình và nhiều hơn nữa, với các ví dụ Python thực tế.

Biến Đổi Trong NLP

Vào năm 2017, Đại học Cornell đã xuất bản một bài báo có ảnh hưởng khi giới thiệu biến đổi. Đây là các mô hình học sâu được sử dụng trong NLP. Phát hiện này đã thúc đẩy sự phát triển của các mô hình ngôn ngữ lớn như ChatGPT.

Các mô hình ngôn ngữ lớn hoặc LLM là các hệ thống AI sử dụng biến đổi để hiểu và tạo ra văn bản giống con người. Tuy nhiên, việc tạo ra những mô hình này rất tốn kém, thường đòi hỏi hàng triệu đô la, điều này hạn chế khả năng tiếp cận của chúng với các công ty lớn.

Hugging Face, được thành lập vào năm 2016, nhằm mục đích làm cho các mô hình NLP trở nên dễ tiếp cận với mọi người. Mặc dù là một công ty thương mại, nhưng nó cung cấp một loạt các tài nguyên mã nguồn mở giúp mọi người và tổ chức có thể xây dựng và sử dụng các mô hình biến đổi một cách tiết kiệm. Học máy là về việc dạy máy tính thực hiện các nhiệm vụ bằng cách nhận ra các mẫu, trong khi học sâu, một tập con của học máy, tạo ra một mạng lưới học tập độc lập. Biến đổi là một loại kiến trúc học sâu hiệu quả và linh hoạt sử dụng dữ liệu đầu vào, khiến nó trở thành một lựa chọn phổ biến để xây dựng các mô hình ngôn ngữ lớn do yêu cầu thời gian đào tạo ít hơn.

Làm Thế Nào Hugging Thúc Đẩy Các Dự Án NLP và LLM

Hugging face Ecosystem - Models, dataset, metrics, transformers, accelerate, tokenizers

Hugging Face đã làm cho việc làm việc với LLM trở nên đơn giản hơn bằng cách cung cấp:

  1. Một loạt các mô hình đã được đào tạo trước để lựa chọn.
  2. Các công cụ và ví dụ để tinh chỉnh những mô hình này cho nhu cầu cụ thể của bạn.
  3. Các tùy chọn triển khai dễ dàng cho các môi trường khác nhau.

Một tài nguyên tuyệt vời có sẵn thông qua Hugging Face là Bảng Xếp Hạng Mở LLM. Hoạt động như một nền tảng toàn diện, nó theo dõi, xếp hạng và đo lường hiệu quả của một loạt các Mô hình Ngôn ngữ Lớn (LLM) và rô-bốt trò chuyện, cung cấp một phân tích tinh tế về những tiến bộ trong lĩnh vực mã nguồn mở
LLM Benchmarks đo lường các mô hình thông qua bốn chỉ số:

  • Thử Thách Lý Luận AI2 (25-shot) — một loạt câu hỏi về chương trình khoa học cơ bản.
  • HellaSwag (10-shot) — một thử nghiệm suy luận thông thường mà mặc dù đơn giản cho con người, nhưng lại là một thách thức đáng kể cho các mô hình tiên tiến.
  • MMLU (5-shot) — một đánh giá đa diện chạm vào khả năng của mô hình văn bản trên 57 lĩnh vực đa dạng, bao gồm toán cơ bản, luật và khoa học máy tính, v.v.
  • TruthfulQA (0-shot) — một công cụ để xác định xu hướng của một mô hình lặp lại thông tin sai thường gặp trực tuyến.

Các điểm chuẩn, được mô tả bằng các thuật ngữ như “25-shot”, “10-shot”, “5-shot” và “0-shot”, chỉ ra số lượng ví dụ về lời nhắc mà một mô hình được cung cấp trong quá trình đánh giá để đo lường hiệu suất và khả năng suy luận của nó trong các lĩnh vực khác nhau. Trong các khuôn khổ “few-shot”, các mô hình được cung cấp một số lượng nhỏ các ví dụ để giúp hướng dẫn phản hồi của chúng, trong khi trong một thiết lập “0-shot”, các mô hình nhận được không có ví dụ và phải dựa hoàn toàn vào kiến thức hiện có của chúng để trả lời phù hợp.

Thành Phần Của Hugging

Đường Ống

‘Đường ống’ là một phần của thư viện biến đổi của Hugging Face — một tính năng giúp sử dụng các mô hình đã được đào tạo trước trong kho lưu trữ Hugging Face một cách dễ dàng. Nó cung cấp một API trực quan cho một loạt các nhiệm vụ, bao gồm phân tích cảm xúc, trả lời câu hỏi, mô hình ngôn ngữ có mặt nạ, nhận dạng thực thể được đặt tên, và tóm tắt.

Đường ống tích hợp ba thành phần trung tâm của Hugging Face:

  1. Tokenizer: Chuẩn bị văn bản của bạn cho mô hình bằng cách chuyển đổi nó thành định dạng mà mô hình có thể hiểu.
  2. Mô Hình: Đây là trái tim của đường ống nơi các dự đoán thực tế được thực hiện dựa trên đầu vào đã được xử lý trước.
  3. Trình Xử Lý Hậu: Chuyển đổi dự đoán thô của mô hình thành dạng có thể đọc được bởi con người.

Những đường ống này không chỉ giảm thiểu việc viết mã rộng rãi mà còn cung cấp một giao diện thân thiện với người dùng để thực hiện nhiều nhiệm vụ NLP.

Ứng Dụng Biến Đổi Sử Dụng Thư Viện Hugging

Một điểm nổi bật của thư viện Hugging Face là Thư viện Biến Đổi, giúp đơn giản hóa các nhiệm vụ NLP bằng cách kết nối mô hình với các giai đoạn xử lý trước và sau cần thiết, giúp làm cho quá trình phân tích trở nên liền mạch. Để cài đặt và nhập thư viện, sử dụng các lệnh sau:

pip install -q transformers
from transformers import pipeline

Sau khi thực hiện việc đó, bạn có thể bắt đầu thực hiện các nhiệm vụ NLP bắt đầu từ phân tích cảm xúc, tính năng pipeline() mạnh mẽ của thư viện đóng vai trò là trung tâm cho các đường ống khác và giúp thực hiện các ứng dụng cụ thể trong các lĩnh vực âm thanh, tầm nhìn và đa phương tiện.

Ứng Dụng Thực Tiễn

Phân Loại Văn Bản

Phân loại văn bản trở nên dễ dàng với hàm pipeline() của Hugging Face. Dưới đây là cách bạn có thể khởi tạo một đường ống phân loại văn bản:

classifier = pipeline("text-classification")

Để có trải nghiệm thực tế, hãy cho một chuỗi hoặc danh sách chuỗi vào đường ống của bạn để nhận được dự đoán, những dự đoán này có thể được trực quan hóa một cách gọn gàng bằng thư viện Pandas của Python. Dưới đây là một đoạn mã Python minh họa điều này:

sentences = ["Tôi rất hân hạnh được giới thiệu bạn đến thế giới tuyệt vời của AI.",
"Hy vọng nó sẽ không làm bạn thất vọng."]

<p># Nhận kết quả phân loại cho mỗi câu trong danh sách
results = classifier(sentences)</p>

<p># Lặp qua từng kết quả và in nhãn và điểm
for i, result in enumerate(results):
print(f"Kết quả {i + 1}:")
print(f" Nhãn: {result['label']}")
print(f" Điểm: {round(result['score'], 3)}\n")

Kết Quả

Kết quả 1:
Nhãn: TÍCH CỰC
Điểm: 1.0

Kết quả 2:
Nhãn: TÍCH CỰC
Điểm: 0.996

Nhận Dạng Thực Thể Được Đặt Tên (NER)

NER là rất quan trọng trong việc trích xuất các đối tượng thực tế được gọi là “thực thể được đặt tên” từ văn bản. Hãy sử dụng đường ống NER để xác định những thực thể này một cách hiệu quả:

ner_tagger = pipeline("ner", aggregation_strategy="simple")
text = "Elon Musk là CEO của SpaceX."
outputs = ner_tagger(text)
print(outputs)

Kết Quả

 Elon Musk: PER, SpaceX: ORG 

Trả Lời Câu Hỏi

Trả lời câu hỏi liên quan đến việc trích xuất câu trả lời chính xác cho các câu hỏi cụ thể từ một đoạn văn bản cho trước. Hãy khởi tạo một đường ống trả lời câu hỏi và nhập câu hỏi và đoạn văn bản của bạn để nhận được câu trả lời mong muốn:

reader = pipeline("question-answering")
text = "Hugging Face là một công ty tạo ra các công cụ cho NLP. Nó được đặt tại New York và được thành lập vào năm 2016."
question = "Hugging Face được đặt tại đâu?"
outputs = reader(question=question, context=text)
print(outputs)

Kết Quả

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

Thư viện đường ống của Hugging Face cung cấp một loạt các đường ống đã được xây dựng trước cho các nhiệm vụ khác nhau, ngoài phân loại văn bản, NER và trả lời câu hỏi. Dưới đây là chi tiết về một tập hợp con các nhiệm vụ có sẵn:

Bảng: Nhiệm Vụ Đường Ống Hugging Face

Nhiệm Vụ Mô Tả Mã Định Danh Đường Ống
Tạo Văn Bản Tạo văn bản dựa trên một lời nhắc cho trước pipeline(task=”text-generation”)
Tóm Tắt Tóm tắt một văn bản hoặc tài liệu dài pipeline(task=”summarization”)
Phân Loại Hình Ảnh Gán nhãn cho một hình ảnh đầu vào pipeline(task=”image-classification”)
Phân Loại Âm Thanh Phân loại dữ liệu âm thanh pipeline(task=”audio-classification”)
Trả Lời Câu Hỏi Hình Ảnh Trả lời một câu hỏi sử dụng cả hình ảnh và câu hỏi pipeline(task=”vqa”)

 

Để có mô tả chi tiết và nhiều nhiệm vụ hơn, vui lòng tham khảo tài liệu đường ống trên trang web của Hugging Face.

Tại Sao Hugging Chuyển Tập Trung Sang Rust

Hugging face Safetensors và tokenizer Rust

Trang GitHub của Hugging face Safetensors và tokenizer

Không gian Hugging Face (HF) đã bắt đầu sử dụng Rust trong các thư viện của nó như safesensors và tokenizers.

Hugging Face cũng vừa mới phát hành một khuôn khổ học máy mới gọi là Candle. Không giống như các khuôn khổ truyền thống sử dụng Python, Candle được xây dựng bằng Rust. Mục tiêu đằng sau việc sử dụng Rust là để tăng cường hiệu suất và đơn giản hóa trải nghiệm người dùng trong khi hỗ trợ các hoạt động trên GPU.

Mục tiêu chính của Candle là cho phép suy luận không cần máy chủ, làm cho việc triển khai các tệp nhị phân nhẹ trở nên khả thi và loại bỏ Python khỏi các công việc sản xuất, điều này có thể làm chậm quá trình do sự chồng chéo của nó. Khuôn khổ này xuất hiện như một giải pháp để vượt qua các vấn đề gặp phải với các khuôn khổ học máy đầy đủ như PyTorch, vốn lớn và chậm khi tạo các thể hiện trên một cụm.

Hãy khám phá lý do tại sao Rust đang trở thành một lựa chọn được ưa chuộng hơn Python.

  1. Tốc Độ và Hiệu Suất – Rust nổi tiếng với tốc độ tuyệt vời của nó, vượt qua Python, vốn được sử dụng truyền thống trong các khuôn khổ học máy. Hiệu suất của Python có thể bị chậm lại đôi khi do Khóa Giải Thuật Toàn Cầu (GIL) của nó, nhưng Rust không gặp phải vấn đề này, hứa hẹn thực hiện nhanh hơn và hiệu suất tốt hơn trong các dự án triển khai.
  2. An Toàn – Rust cung cấp các đảm bảo an toàn bộ nhớ mà không cần thu gom rác, một khía cạnh quan trọng trong việc đảm bảo an toàn của các hệ thống đồng thời. Điều này đóng vai trò quan trọng trong các lĩnh vực như safetensors, nơi an toàn khi xử lý cấu trúc dữ liệu là ưu tiên hàng đầu.

Safetensors

Safetensors được hưởng lợi từ tốc độ và tính năng an toàn của Rust. Safetensors liên quan đến việc xử lý tensor, một thực thể toán học phức tạp, và việc có Rust đảm bảo rằng các hoạt động này không chỉ nhanh mà còn an toàn, tránh các lỗi và vấn đề bảo mật có thể phát sinh từ việc xử lý bộ nhớ sai.

Tokenizer

Tokenizers xử lý việc chia nhỏ các câu hoặc cụm từ thành các đơn vị nhỏ hơn, như từ hoặc thuật ngữ. Rust giúp quá trình này bằng cách tăng tốc thời gian thực hiện, đảm bảo rằng quá trình tạo token không chỉ chính xác mà còn nhanh chóng, nâng cao hiệu quả của các nhiệm vụ xử lý ngôn ngữ tự nhiên.

Ở trung tâm của tokenizer Hugging Face là khái niệm về tạo token con từ, đạt được sự cân bằng tinh tế giữa tạo token ở mức từ và mức ký tự để tối ưu hóa việc giữ lại thông tin và kích thước từ vựng. Nó hoạt động thông qua việc tạo ra các subtoken, như “##ing” và “##ed”, giữ lại sự phong phú về mặt ngữ nghĩa trong khi tránh một từ vựng bị phồng lên.

Tạo token con từ liên quan đến một giai đoạn đào tạo để xác định sự cân bằng hiệu quả nhất giữa tạo token ở mức ký tự và mức từ để tối ưu hóa việc giữ lại thông tin và kích thước từ vựng. Nó vượt ra ngoài các quy tắc tiền tố và hậu tố đơn giản, đòi hỏi phải phân tích toàn diện các mẫu ngôn ngữ trong các tập dữ liệu văn bản rộng lớn để thiết kế một tokenizer con từ hiệu quả. Tokenizer tạo ra có khả năng xử lý các từ mới bằng cách chia chúng thành các subtoken đã biết, duy trì mức độ hiểu biết ngữ nghĩa cao.

Thành Phần Tạo Token

Thư viện tokenizers chia quá trình tạo token thành nhiều bước, mỗi bước giải quyết một khía cạnh khác nhau của tạo token. Hãy cùng khám phá những thành phần này:

  • Bình Thường Hóa: Thực hiện các biến đổi ban đầu trên chuỗi đầu vào, áp dụng các điều chỉnh cần thiết như chuyển đổi sang chữ thường, chuẩn hóa Unicode và loại bỏ.
  • Tạo Token Trước: Chịu trách nhiệm phân chia chuỗi đầu vào thành các đoạn trước, xác định các phân chia dựa trên các quy tắc được xác định trước, như phân chia theo khoảng cách.
  • Mô Hình: Quản lý việc khám phá và tạo ra các subtoken, thích nghi với đặc điểm của dữ liệu đầu vào của bạn và cung cấp khả năng đào tạo.
  • Trình Xử Lý Hậu: Cải thiện các tính năng xây dựng để đảm bảo tính tương thích với nhiều mô hình dựa trên biến đổi, như BERT, bằng cách thêm các token như [CLS] và [SEP].

Để bắt đầu với tokenizers Hugging Face, hãy cài đặt thư viện bằng lệnh pip install tokenizers và nhập nó vào môi trường Python của bạn. Thư viện này có thể tạo token một lượng lớn văn bản trong thời gian rất ngắn, giúp tiết kiệm tài nguyên tính toán quý giá cho các nhiệm vụ đòi hỏi hơn như đào tạo mô hình.

Thư viện tokenizers sử dụng Rust, thừa hưởng sự tương đồng về cú pháp từ C++ trong khi giới thiệu các khái niệm mới trong thiết kế ngôn ngữ lập trình. Kết hợp với các ràng buộc Python, nó đảm bảo bạn tận hưởng hiệu suất của một ngôn ngữ cấp thấp trong khi làm việc trong một môi trường Python.

Tập Dữ Liệu

Tập dữ liệu là nền tảng của các dự án AI. Hugging Face cung cấp một loạt các tập dữ liệu phù hợp với nhiều nhiệm vụ NLP và hơn thế nữa. Để sử dụng chúng một cách hiệu quả, việc hiểu quá trình tải và phân tích chúng là điều cần thiết. Dưới đây là một đoạn mã Python được chú thích rõ ràng, minh họa cách khám phá các tập dữ liệu có sẵn trên Hugging Face:

from datasets import load_dataset
# Tải một tập dữ liệu
dataset = load_dataset('squad')
# Hiển thị mục nhập đầu tiên
print(dataset[0])

Đoạn mã này sử dụng hàm load_dataset để tải tập dữ liệu SQuAD, một lựa chọn phổ biến cho các nhiệm vụ trả lời câu hỏi.

Khai Thác Mô Hình Đã Được Đào Tạo Trước và Kết Hợp Tất Cả

Các mô hình đã được đào tạo trước tạo thành xương sống của nhiều dự án học sâu, cho phép các nhà nghiên cứu và nhà phát triển bắt đầu dự án của mình mà không cần phải bắt đầu từ đầu. Hugging Face tạo điều kiện cho việc khám phá một loạt các mô hình đã được đào tạo trước, như được minh họa trong đoạn mã dưới đây:

from transformers import AutoModelForQuestionAnswering, AutoTokenizer

<p># Tải mô hình và tokenizer đã được đào tạo trước
model = AutoModelForQuestionAnswering.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')
tokenizer = AutoTokenizer.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')</p>

<p># Hiển thị kiến trúc của mô hình
print(model)</p>

Với mô hình và tokenizer đã được tải, chúng ta có thể tiếp tục tạo một hàm lấy một đoạn văn bản và một câu hỏi làm đầu vào và trả về câu trả lời được trích xuất từ văn bản. Chúng ta sẽ sử dụng tokenizer để xử lý văn bản và câu hỏi đầu vào thành định dạng tương thích với mô hình, sau đó cho đầu vào đã xử lý này vào mô hình để nhận được câu trả lời:


<p>def get_answer(text, question):
# Tạo token cho văn bản và câu hỏi đầu vào
inputs = tokenizer(question, text, return_tensors='pt', max_length=512, truncation=True)
outputs = model(**inputs)</p>

<p># Lấy điểm bắt đầu và kết thúc cho câu trả lời
answer_start = torch.argmax(outputs.start_logits)
answer_end = torch.argmax(outputs.end_logits) + 1</p>

<p>câu trả lời = tokenizer.convert_tokens_to_string(tokenizer.convert_ids_to_tokens(inputs['input_ids'][0][answer_start:answer_end]))
return câu trả lời</p>

Trong đoạn mã này, chúng tôi nhập các mô đun cần thiết từ gói transformers, sau đó tải một mô hình và tokenizer đã được đào tạo trước bằng phương thức from_pretrained. Chúng tôi chọn một mô hình BERT được tinh chỉnh trên tập dữ liệu SQuAD.

Hãy xem một ví dụ về trường hợp sử dụng hàm này nơi chúng ta có một đoạn văn bản và muốn trích xuất một câu trả lời cụ thể cho một câu hỏi từ đoạn văn bản đó:


<p>văn bản = """
Tháp Eiffel, nằm ở Paris, Pháp, là một trong những điểm đến nổi tiếng nhất trên thế giới. Nó được thiết kế bởi Gustave Eiffel và hoàn thành vào năm 1889. Tháp đứng ở độ cao 324 mét và là cấu trúc nhân tạo cao nhất thế giới vào thời điểm hoàn thành.
"""</p>

<p>câu hỏi = "Ai thiết kế Tháp Eiffel?"</p>

<p># Lấy câu trả lời cho câu hỏi
câu trả lời = get_answer(văn bản, câu hỏi)
print(f"Câu trả lời cho câu hỏi là: {câu trả lời}")
# Đầu ra: Câu trả lời cho câu hỏi là: Gustave Eiffel</p>

Trong kịch bản này, chúng ta xây dựng một hàm get_answer lấy văn bản và câu hỏi, token hóa chúng phù hợp, và sau đó sử dụng mô hình đã được đào tạo trước để trích xuất câu trả lời từ văn bản. Điều này minh họa một ứng dụng thực tế của thư viện biến đổi Hugging Face để xây dựng một hệ thống trả lời câu hỏi đơn giản nhưng mạnh mẽ. Để nắm bắt các khái niệm này một cách tốt hơn, việc thực hành với một Notebook Google Colab được khuyến nghị.

Kết Luận

Thông qua phạm vi công cụ mã nguồn mở rộng rãi, mô hình đã được đào tạo trước và các đường ống thân thiện với người dùng, Hugging Face cho phép cả chuyên gia có kinh nghiệm và người mới bắt đầu khám phá thế giới AI một cách dễ dàng. Hơn nữa, nỗ lực tích hợp Rust, nhờ vào các tính năng tốc độ và an toàn của nó, nhấn mạnh cam kết của Hugging Face trong việc thúc đẩy sự đổi mới đồng thời đảm bảo hiệu quả và an toàn trong các ứng dụng AI. Công việc chuyển đổi của Hugging Face không chỉ dân chủ hóa việc tiếp cận các công cụ AI cấp cao mà còn nuôi dưỡng một môi trường cộng tác cho việc học tập và phát triển trong không gian AI, tạo điều kiện cho một tương lai nơi AI trở nên dễ tiếp cận hơn.

Tôi đã dành 5 năm qua để đắm mình trong thế giới hấp dẫn của Máy học và Học sâu. Đam mê và chuyên môn của tôi đã dẫn tôi đến việc đóng góp vào hơn 50 dự án kỹ thuật phần mềm đa dạng, với sự tập trung đặc biệt vào AI/ML. Sự tò mò liên tục của tôi cũng đã thu hút tôi đến với Xử lý Ngôn ngữ Tự nhiên, một lĩnh vực tôi渴望 khám phá thêm.