模型概述
模型特點
模型能力
使用案例
🚀 GPorTuguese-2:用於葡萄牙語文本生成(及更多NLP任務……)的語言模型
GPorTuguese-2(葡萄牙語版GPT - 2小型模型)是基於GPT - 2小型模型的最先進的葡萄牙語語言模型。它藉助“遷移學習和微調技術”,在一塊NVIDIA V100 32GB的GPU上,僅用一天多的時間,使用略超1GB的訓練數據,在葡萄牙語維基百科上完成了訓練。這一成果證明,利用有限的資源也能為任何語言打造出最先進的語言模型。
該模型是在英文預訓練的GPT - 2小型模型基礎上,通過Hugging Face庫(Transformers和Tokenizers)並結合fastai v2深度學習框架進行微調得到的,運用了fastai v2的所有微調技術。目前,該模型已在Hugging Face上發佈。如需瞭解更多信息或提出相關請求,請訪問“比從頭開始訓練更快 — 使用Hugging Face和fastai v2對英文GPT - 2進行任意語言的微調(以葡萄牙語為例)”。
✨ 主要特性
- 資源高效:僅用一塊NVIDIA V100 32GB的GPU和略超1GB的訓練數據,在一天多時間內完成訓練,證明了低資源條件下訓練先進語言模型的可行性。
- 技術先進:基於GPT - 2小型模型,運用遷移學習和微調技術,結合Hugging Face庫和fastai v2深度學習框架進行訓練。
- 應用廣泛:可用於葡萄牙語文本生成及其他自然語言處理任務。
📦 安裝指南
文檔未提及具體安裝步驟,暫不提供相關內容。
📚 詳細文檔
模型
屬性 | 詳情 |
---|---|
模型類型 | gpt2-small-portuguese |
參數數量 | 1.24億 |
模型文件(pt/tf) | 487M / 475M |
架構 | GPT - 2小型 |
訓練/驗證數據(文本) | 葡萄牙語維基百科(1.28 GB / 0.32 GB) |
評估結果
在略超一天的時間裡(僅使用了一塊NVIDIA V100 32GB的GPU;若採用分佈式數據並行(DDP)訓練模式,使用2塊GPU,訓練時間可縮短至10小時),模型的損失值為3.17,準確率達到37.99%,困惑度為23.76(具體驗證結果見下表)。
訓練輪數 | 損失值 | 準確率(%) | 困惑度 | 每輪訓練時間 | 累計訓練時間 |
---|---|---|---|---|---|
0 | 9.95 | 9.90 | 20950.94 | 00:00:00 | 00:00:00 |
1 | 3.64 | 32.52 | 38.12 | 5:48:31 | 5:48:31 |
2 | 3.30 | 36.29 | 27.16 | 5:38:18 | 11:26:49 |
3 | 3.21 | 37.46 | 24.71 | 6:20:51 | 17:47:40 |
4 | 3.19 | 37.74 | 24.21 | 6:06:29 | 23:54:09 |
5 | 3.17 | 37.99 | 23.76 | 6:16:22 | 30:10:31 |
GPT - 2
注意:此信息複製自[模型:gpt2 >> GPT - 2](https://huggingface.co/gpt2#gpt - 2)。
GPT - 2是使用因果語言建模(CLM)目標在英語語料上進行預訓練的模型。該模型在[這篇論文](https://d4mucfpksywv.cloudfront.net/better - language - models/language_models_are_unsupervised_multitask_learners.pdf)中被提出,並於2019年2月14日在[此頁面](https://openai.com/blog/better - language - models/)首次發佈。
聲明:發佈GPT - 2的團隊也為其模型撰寫了[模型卡片](https://github.com/openai/gpt - 2/blob/master/model_card.md)。Hugging Face團隊對該模型卡片的內容進行了補充,以完善信息並給出具體的偏差示例。
模型描述
注意:此信息複製自[模型:gpt2 >> 模型描述](https://huggingface.co/gpt2#model - description)。
GPT - 2是一個以自監督方式在大量英語數據語料上進行預訓練的Transformer模型。這意味著它僅在原始文本上進行預訓練,無需人工進行任何標註(因此可以使用大量公開可用的數據),並通過自動流程從這些文本中生成輸入和標籤。更確切地說,它的訓練目標是預測句子中的下一個單詞。
具體而言,輸入是一定長度的連續文本序列,目標是相同的序列,但向右移動一個標記(單詞或單詞片段)。模型內部使用掩碼機制,確保對標記i
的預測僅使用從1
到i
的輸入,而不使用未來的標記。
通過這種方式,模型學習到英語語言的內部表示,可用於提取對下游任務有用的特徵。不過,該模型在其預訓練任務上表現最佳,即根據提示生成文本。
侷限性和偏差
該模型的訓練數據來自葡萄牙語維基百科。我們知道其中包含大量來自互聯網的未經過濾的內容,遠非中立。正如OpenAI團隊在其模型卡片中所指出的:
由於像GPT - 2這樣的大規模語言模型無法區分事實與虛構,因此我們不支持要求生成文本必須為真實內容的用例。此外,像GPT - 2這樣的語言模型反映了其訓練數據中固有的偏差,因此我們不建議將它們部署到與人類交互的系統中,除非部署者首先對與預期用例相關的偏差進行研究。我們發現7.74億參數和15億參數版本的GPT - 2在性別、種族和宗教偏差探測方面沒有統計學上的顯著差異,這意味著在處理對人類屬性偏差敏感的用例時,所有版本的GPT - 2都應謹慎使用。
作者
葡萄牙語版GPT - 2小型模型由Pierre GUILLOU訓練和評估。這得益於[AI Lab](https://www.linkedin.com/company/ailab - unb/)(巴西利亞大學)提供的GPU(NVIDIA V100 32GB)計算能力。作者作為該實驗室的NLP副研究員參與其中,並且該實驗室的主任Fabricio Ataides Braz教授和Nilton Correia da Silva教授參與了NLP策略的制定。
引用
如果您使用了我們的工作,請引用:
@inproceedings{pierre2020gpt2smallportuguese,
title={GPorTuguese - 2 (Portuguese GPT - 2 small): a Language Model for Portuguese text generation (and more NLP tasks...)},
author={Pierre Guillou},
year={2020}
}
💻 使用示例
基礎用法
使用HuggingFace(PyTorch)
# 加載GPorTuguese - 2及其子詞分詞器(字節級BPE)
from transformers import AutoTokenizer, AutoModelWithLMHead
import torch
tokenizer = AutoTokenizer.from_pretrained("pierreguillou/gpt2-small-portuguese")
model = AutoModelWithLMHead.from_pretrained("pierreguillou/gpt2-small-portuguese")
# 獲取最大序列長度為1024
tokenizer.model_max_length=1024
model.eval() # 禁用dropout(或保留在訓練模式以進行微調)
# 生成一個單詞
# 輸入序列
text = "Quem era Jim Henson? Jim Henson era um"
inputs = tokenizer(text, return_tensors="pt")
# 模型輸出
outputs = model(**inputs, labels=inputs["input_ids"])
loss, logits = outputs[:2]
predicted_index = torch.argmax(logits[0, -1, :]).item()
predicted_text = tokenizer.decode([predicted_index])
# 結果
print('input text:', text)
print('predicted text:', predicted_text)
# input text: Quem era Jim Henson? Jim Henson era um
# predicted text: homem
# 生成一個完整序列
# 輸入序列
text = "Quem era Jim Henson? Jim Henson era um"
inputs = tokenizer(text, return_tensors="pt")
# 使用Top - k採樣文本生成方法進行模型輸出
sample_outputs = model.generate(inputs.input_ids,
pad_token_id=50256,
do_sample=True,
max_length=50, # 設置所需的標記數量
top_k=40,
num_return_sequences=1)
# 生成的序列
for i, sample_output in enumerate(sample_outputs):
print(">> Generated text {}\n\n{}".format(i+1, tokenizer.decode(sample_output.tolist())))
# >> Generated text
# Quem era Jim Henson? Jim Henson era um executivo de televisão e diretor de um grande estúdio de cinema mudo chamado Selig,
# depois que o diretor de cinema mudo Georges Seuray dirigiu vários filmes para a Columbia e o estúdio.
使用HuggingFace(TensorFlow)
# 加載GPorTuguese - 2及其子詞分詞器(字節級BPE)
from transformers import AutoTokenizer, TFAutoModelWithLMHead
import tensorflow as tf
tokenizer = AutoTokenizer.from_pretrained("pierreguillou/gpt2-small-portuguese")
model = TFAutoModelWithLMHead.from_pretrained("pierreguillou/gpt2-small-portuguese")
# 獲取最大序列長度為1024
tokenizer.model_max_length=1024
model.eval() # 禁用dropout(或保留在訓練模式以進行微調)
# 生成一個完整序列
# 輸入序列
text = "Quem era Jim Henson? Jim Henson era um"
inputs = tokenizer.encode(text, return_tensors="tf")
# 使用Top - k採樣文本生成方法進行模型輸出
outputs = model.generate(inputs, eos_token_id=50256, pad_token_id=50256,
do_sample=True,
max_length=40,
top_k=40)
print(tokenizer.decode(outputs[0]))
# >> Generated text
# Quem era Jim Henson? Jim Henson era um amigo familiar da família. Ele foi contratado pelo seu pai
# para trabalhar como aprendiz no escritório de um escritório de impressão, e então começou a ganhar dinheiro
📄 許可證
本項目採用MIT許可證。



