Hugging Face 是一個人工智能研究實驗室和中心,建立了一個由學者、研究人員和愛好者組成的社區。 在很短的時間內,Hugging Face 就在人工智能領域占據了重要地位。 科技巨頭 包括谷歌、亞馬遜和英偉達在內的人工智能初創公司 Hugging Face 都進行了大量投資,使其估值大幅提升 的美元4.5億元.
在本指南中,我們將介紹 Transformer、LLM 以及 Hugging Face 庫如何在培育開源 AI 社區方面發揮重要作用。 我們還將通過 Python 示例來介紹 Hugging Face 的基本功能,包括管道、數據集、模型等。
2017年,康奈爾大學發表了一篇有影響力的論文,介紹了 變形金剛。 這些是 NLP 中使用的深度學習模型。 這一發現推動了大型語言模型的發展,例如 ChatGPT.
大型語言模型或 LLM 是使用 Transformer 來理解和創建類人文本的人工智能系統。 然而,創建這些模型的成本很高,通常需要數百萬美元,這限制了大公司的使用。
擁抱臉,始于 2016 年,旨在讓每個人都能接觸到 NLP 模型。 盡管是一家商業公司,但它提供了一系列開源資源,幫助人們和組織以經濟實惠的方式構建和使用變壓器模型。 機器識別 是關于教計算機通過識別模式來執行任務,而深度學習(機器學習的一個子集)創建了一個獨立學習的網絡。 Transformer 是一種深度學習架構,可以有效、靈活地使用輸入數據,由于訓練時間要求較少,使其成為構建大型語言模型的流行選擇。
Hugging Face 通過提供以下功能,讓與法學碩士的合作變得更加簡單:
通過 Hugging Face 可以獲得的一個很棒的資源是 打開 LLM 排行榜。 作為一個綜合平臺,它系統地監控、排名和衡量一系列大型語言模型 (LLM) 和聊天機器人的效率,為開源領域的進步提供敏銳的分析
LLM 基準通過四個指標來衡量模型:
基準使用“25-shot”、“10-shot”、“5-shot”和“0-shot”等術語來描述,表示模型在評估過程中給出的提示示例的數量衡量其在各個領域的表現和推理能力。 在“少樣本”范式中,為模型提供了少量示例來幫助指導他們的響應,而在“零樣本”設置中,模型沒有收到任何示例,并且必須僅依靠其預先存在的知識來做出適當的響應。
'管道' 是 Hugging Face 變壓器庫的一部分,該功能有助于輕松利用 Hugging Face 存儲庫中提供的預訓練模型。 它為一系列任務提供了直觀的 API,包括情感分析、問答、掩碼語言建模、命名實體識別和摘要。
Pipelines 集成了三個中央 Hugging Face 組件:
這些管道不僅減少了大量的編碼,還提供了一個用戶友好的界面來完成各種 NLP 任務。
Hugging Face 庫的一大亮點是 Transformers 庫,它通過將模型與必要的預處理和后處理階段連接起來,簡化了 NLP 任務,從而簡化了分析過程。 要安裝并導入該庫,請使用以下命令:
1 2 | pip install - q transformers from transformers import pipeline |
完成此操作后,您可以從情感分析開始執行 NLP 任務,將文本分類為積極或消極情緒。 該庫強大的 pipeline() 函數充當包含其他管道的中心,并促進音頻、視覺和多模態領域中特定于任務的應用程序。
使用 Hugging Face 的 pipeline() 函數,文本分類變得輕而易舉。 以下是啟動文本分類管道的方法:
1 | classifier = pipeline( 'text-classification' ) |
如需親身體驗,請將字符串或字符串列表輸入到管道中以獲得預測,可以使用 Python 的 Pandas 庫將其直觀地可視化。 下面是一個 Python 片段演示了這一點:
1 2 3 4 5 6 7 8 9 | 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' ) |
輸出
1 2 3 4 5 6 | Result 1: Label: POSITIVE Score: 1.0 Result 2: Label: POSITIVE Score: 0.996 |
NER 對于從文本中提取稱為“命名實體”的現實世界對象至關重要。 利用 NER 管道有效識別這些實體:
1 2 3 4 | ner_tagger = pipeline( 'ner' , aggregation_strategy = 'simple' ) text = 'Elon Musk is the CEO of SpaceX.' outputs = ner_tagger(text) print (outputs) |
輸出
1 | Elon Musk: PER, SpaceX: ORG |
問答涉及從給定上下文中提取特定問題的精確答案。 初始化問答管道并輸入您的問題和上下文以獲得所需的答案:
1 2 3 4 5 | 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) |
輸出
1 | { 'score' : 0.998, 'start' : 51, 'end' : 60, 'answer' : 'New York' } |
除了文本分類、NER 和問題回答之外,Hugging Face 的管道功能還為不同的任務提供了一系列預構建的管道。 以下是可用任務子集的詳細信息:
表:擁抱面部管道任務
任務 | 產品描述 | 管道標識符 |
文本生成 | 根據給定的提示生成文本 | 管道(任務=“文本生成”) |
概要 | 總結冗長的文本或文檔 | 管道(任務=“總結”) |
影像分類 | 標記輸入圖像 | 管道(任務=“圖像分類”) |
音頻分類 | 對音頻數據進行分類 | 管道(任務=“音頻分類”) |
視覺問答 | 使用圖像和問題回答查詢 | 管道(任務=“vqa”) |
有關詳細說明和更多任務,請參閱 Hugging Face 網站上的管道文檔.
Hugging Face (HF) 生態系統開始在其庫中使用 Rust,例如安全傳感器和標記器。
Hugging Face 最近還發布了一個新的機器學習框架,名為 蠟燭。 與使用 Python 的傳統框架不同,Candle 是使用 Rust 構建的。 使用 Rust 的目標是在支持 GPU 操作的同時增強性能并簡化用戶體驗。
Candle 的主要目標是促進無服務器推理,使輕量級二進制文件的部署成為可能,并將 Python 從生產工作負載中刪除,因為 Python 有時會因其開銷而減慢進程。 該框架是一種解決方案,旨在克服 PyTorch 等完整機器學習框架在集群上創建實例時體積大且速度慢的問題。
讓我們探討一下為什么 Rust 比 Python 更受歡迎。
安全張量 受益于 Rust 的速度和安全特性。 Safetensors 涉及張量(一個復雜的數學實體)的操作,Rust 確保操作不僅快速,而且安全,避免內存處理不當可能引起的常見錯誤和安全問題。
分詞器 處理將句子或短語分解成更小的單元,例如單詞或術語。 Rust 通過加快執行時間來幫助這個過程,確保標記化過程不僅準確而且快速,從而提高了效率 自然語言處理 任務。
Hugging Face 標記器的核心是子詞標記化的概念,在單詞和字符級標記化之間取得微妙的平衡,以優化信息保留和詞匯量。 它通過創建子標記(例如“##ing”和“##ed”)來發揮作用,保留語義豐富性,同時避免詞匯量臃腫。
子詞標記化涉及一個訓練階段,以確定字符和單詞級標記化之間最有效的平衡。 它超越了單純的前綴和后綴規則,需要對大量文本語料庫中的語言模式進行全面分析,以設計高效的子詞標記器。 生成的分詞器擅長通過將新詞分解為已知的子詞來處理新詞,從而保持高水平的語義理解。
標記化器庫將標記化過程分為幾個步驟,每個步驟都解決標記化的不同方面。 讓我們深入研究這些組件:
要開始使用 Hugging Face 標記器,請使用以下命令安裝庫 pip install tokenizers
并將其導入到您的 Python 環境中。 該庫可以在很短的時間內標記大量文本,從而為模型訓練等更密集的任務節省寶貴的計算資源。
分詞器庫使用 銹 它繼承了 C++ 的語法相似性,同時在編程語言設計中引入了新穎的概念。 與 Python 綁定相結合,它可確保您在 Python 環境中工作時享受較低級語言的性能。
數據集是人工智能項目的基石。 Hugging Face 提供了各種各樣的數據集,適用于各種 NLP 任務等等。 為了有效地利用它們,了解加載和分析它們的過程至關重要。 下面是一個經過充分注釋的 Python 腳本,演示了如何探索 Hugging Face 上可用的數據集:
1 2 3 4 5 | from datasets import load_dataset # Load a dataset dataset = load_dataset( 'squad' ) # Display the first entry print (dataset[ 0 ]) |
該腳本使用 load_dataset 函數加載 SQuAD 數據集,這是問答任務的常用選擇。
預訓練模型構成了許多深度學習項目的支柱,使研究人員和開發人員能夠快速啟動他們的計劃,而無需從頭開始。 Hugging Face 有助于探索各種預訓練模型,如下代碼所示:
1 2 3 4 5 6 | 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) |
加載模型和分詞器后,我們現在可以繼續創建一個函數,該函數將一段文本和一個問題作為輸入,并返回從文本中提取的答案。 我們將利用分詞器將輸入文本和問題處理為與模型兼容的格式,然后將處理后的輸入輸入到模型中以獲得答案:
1 2 3 4 5 6 7 8 9 | 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 |
在代碼片段中,我們從 Transformers 包中導入必要的模塊,然后使用 from_pretrained 方法加載預訓練的模型及其相應的分詞器。 我們選擇在 SQuAD 數據集上微調的 BERT 模型。
讓我們看一下此函數的示例用例,其中我們有一段文本,我們希望從中提取問題的具體答案:
1 2 3 4 5 6 7 8 | 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 函數,該函數接受文本和問題,對它們進行適當的標記,并利用預先訓練的 BERT 模型從文本中提取答案。 它演示了 Hugging Face 的 Transformers 庫的實際應用,以構建一個簡單但功能強大的問答系統。 為了更好地掌握這些概念,建議使用 谷歌 Colab 筆記本.
通過其廣泛的開源工具、預先訓練的模型和用戶友好的管道,它使經驗豐富的專業人士和新手能夠以輕松和理解的方式深入探索廣闊的人工智能世界。 此外,由于 Rust 的速度和安全特性,集成 Rust 的舉措突顯了 Hugging Face 致力于促進創新,同時確保人工智能應用的效率和安全性的承諾。 Hugging Face 的變革性工作不僅使高級人工智能工具的使用變得民主化,而且還為人工智能領域的學習和發展營造了一個協作環境,促進了人工智能觸手可及的未來。