最新機器學習工具 Transformers

🤗 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'}]

找到更多可用的模型

那我們該去哪裡找尋可以使用的模型呢?

  • huggingface: 這邊提供很多官方與第三方的模型

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

Add a Comment

發佈留言必須填寫的電子郵件地址不會公開。