最新機器學習工具 Transformers
2022 年 5 月 15 日
🤗 Transformers
Transformers 是 Hugging Face 團隊為 PyTorch、TensorFlow 和 JAX 提供最先進的機器學習工具。
Transformers 提供 API 來輕鬆下載和訓練最先進的預訓練模型。 使用預訓練模型可以降低您的計算成本、碳足跡,並節省您從頭開始訓練模型的時間。 這些模型可用於不同的模式,例如:
- 📝 文本:超過 100 種語言的文本分類、信息提取、問答、摘要、翻譯和文本生成。
- 🖼️ 圖像:圖像分類、對象檢測和分割。
- 🗣️ 音頻:語音識別和音頻分類。
- 🐙 多模式:表格問答、光學字符識別、從掃描文檔中提取信息、視頻分類和視覺問答。
Transformers支持多種深度學習庫之間的無縫合作,例如:PyTorch、TensorFlow 和 JAX。 我們可以在一個框架中用三行代碼訓練您的模型,然後加載它以與另一個框架進行推理。
每個Transformers 的架構都在獨立的 Python 模塊中定義,因此可以輕鬆定制它們以進行研究和實驗。
下面簡單來說一下如何快速體驗這個工具。
Predict
三步驟實現文字生成
- 選擇Tokenizer和模型
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("distilgpt2")
model = AutoModelForCausalLM.from_pretrained("distilgpt2")
- 創建接口
from transformers import pipeline
generator = pipeline(task="text-generation", model=model, tokenizer=tokenizer)
- 實現功能
generator(
"Three Rings for the Elven-kings under the sky, Seven for the Dwarf-lords in their halls of stone"
)
>>> [{'generated_text': 'Three Rings for the Elven-kings under the sky, Seven for the Dwarf-lords in their halls of stone, Seven for the Dragon-lords (for them to rule in a world ruled by their rulers, and all who live within the realm'}]
![](https://i0.wp.com/lazyinwork.com/wp-content/uploads/2022/05/image-21.png?resize=678%2C420&ssl=1)
找到更多可用的模型
那我們該去哪裡找尋可以使用的模型呢?
- Transformers: 模型範例,這邊提供很多教學
![](https://i0.wp.com/lazyinwork.com/wp-content/uploads/2022/05/image-19.png?resize=678%2C426&ssl=1)
- huggingface: 這邊提供很多官方與第三方的模型
![](https://i0.wp.com/lazyinwork.com/wp-content/uploads/2022/05/image-20.png?resize=678%2C454&ssl=1)
Train
上面已經提到Transformers如何使用模型進行預測,那我們自己想要進行finetune呢?我們可以使用trainer。
Trainer提供了一個 API,用於在 PyTorch 中針對大多數標準用例進行功能完整的訓練。它用於大多數示例腳本中。API 支持在多個 GPU/TPU 上進行分佈式訓練,通過NVIDIA Apex和 Native AMP for PyTorch 實現混合精度。
Trainer包含支持上述功能的基本訓練循環。
三步驟Finetune客製化Model
- 準備資料
imdb是一個資料集,在這邊看到整體資料
from datasets import load_dataset
imdb = load_dataset("imdb")
- 準備Tokenizer和前處理
from transformers import AutoTokenizer
def preprocess_function(examples):
return tokenizer(examples["text"], truncation=True)
tokenizer = AutoTokenizer.from_pretrained("distilbert-base-uncased")
tokenized_imdb = imdb.map(preprocess_function, batched=True)
- 訓練模型
from transformers import AutoModelForSequenceClassification, TrainingArguments, Trainer
model = AutoModelForSequenceClassification.from_pretrained("distilbert-base-uncased", num_labels=2)
trainer = Trainer(
model=model,
train_dataset=tokenized_imdb["train"],
eval_dataset=tokenized_imdb["test"],
tokenizer=tokenizer,
args=TrainingArguments(
output_dir="./results",
learning_rate=2e-5,
per_device_train_batch_size=16,
per_device_eval_batch_size=16,
num_train_epochs=5,
weight_decay=0.01,
)
)
trainer.train()