模型概述
模型特點
模型能力
使用案例
🚀 BERTIN
BERTIN是一系列基於BERT的西班牙語模型。當前的模型中心指向了所有在西班牙語部分的mC4數據集上使用Flax從頭開始訓練的RoBERTa-base模型中表現最優的那個。所有代碼和腳本都包含在內。
本項目是由HuggingFace組織的Flax/Jax社區周的一部分,TPU使用由谷歌雲贊助。該項目的目標是在Flax/JAX社區活動期間從頭開始預訓練一個RoBERTa-base模型,在此期間谷歌雲提供了免費的TPUv3 - 8,用於使用Huggingface的Flax庫實現進行訓練。
🚀 快速開始
本項目旨在發佈西班牙語的RoBERTa模型,並探索使大型模型訓練更簡單、快速的技術,推動大語言模型的民主化。你可以通過以下鏈接查看不同版本的模型:
- 版本v2 (默認):2022年4月28日
- 版本v1:2021年7月26日
- 版本v1 - 512:2021年7月26日
- 版本beta:2021年7月15日
✨ 主要特性
- 專注西班牙語:專門為西班牙語設計,在西班牙語相關任務上表現出色。
- 創新採樣技術:使用“困惑度採樣”技術,減少訓練數據量和訓練時間,同時保持模型性能。
- 推動模型民主化:探索使大型模型訓練更易實現的技術,讓小團隊也能在有限預算下訓練模型。
📦 安裝指南
暫未提供安裝步驟相關內容。
💻 使用示例
基礎用法
from datasets import load_dataset
for config in ("random", "stepwise", "gaussian"):
mc4es = load_dataset(
"bertin-project/mc4-es-sampled",
config,
split="train",
streaming=True
).shuffle(buffer_size=1000)
for sample in mc4es:
print(config, sample)
break
高級用法
暫未提供高級用法相關內容。
📚 詳細文檔
團隊成員
- Javier de la Rosa (versae)
- Eduardo González (edugp)
- Paulo Villegas (paulo)
- Pablo González de Prado (Pablogps)
- Manu Romero (mrm8488)
- María Grandury (mariagrandury)
引用與相關信息
若要引用此模型,請使用以下BibTeX格式:
@article{BERTIN,
author = {Javier De la Rosa y Eduardo G. Ponferrada y Manu Romero y Paulo Villegas y Pablo González de Prado Salas y María Grandury},
title = {BERTIN: Efficient Pre-Training of a Spanish Language Model using Perplexity Sampling},
journal = {Procesamiento del Lenguaje Natural},
volume = {68},
number = {0},
year = {2022},
keywords = {},
abstract = {The pre-training of large language models usually requires massive amounts of resources, both in terms of computation and data. Frequently used web sources such as Common Crawl might contain enough noise to make this pretraining sub-optimal. In this work, we experiment with different sampling methods from the Spanish version of mC4, and present a novel data-centric technique which we name perplexity sampling that enables the pre-training of language models in roughly half the amount of steps and using one fifth of the data. The resulting models are comparable to the current state-of-the-art, and even achieve better results for certain tasks. Our work is proof of the versatility of Transformers, and paves the way for small teams to train their models on a limited budget.},
issn = {1989-7553},
url = {http://journal.sepln.org/sepln/ojs/ojs/index.php/pln/article/view/6403},
pages = {13--23}
}
另見https://arxiv.org/abs/2207.06814。
致謝
如果沒有Huggingface和谷歌通過TPU研究雲慷慨提供的計算資源,以及Cloud TPU團隊提前提供的Cloud TPU VM訪問權限,本項目將無法實現。
免責聲明
本倉庫中發佈的模型旨在用於通用目的,並可供第三方使用。這些模型可能存在偏差和/或其他不良失真。當第三方使用這些模型(或基於這些模型的系統)向其他方部署或提供系統和/或服務,或成為這些模型的用戶時,他們應注意,減輕使用這些模型所帶來的風險並在任何情況下遵守適用法規(包括有關人工智能使用的法規)是他們的責任。在任何情況下,模型所有者均不對第三方使用這些模型所產生的任何結果負責。
完整報告
動機
根據維基百科的數據,按母語使用者數量計算,西班牙語是世界上第二大語言(超過4.7億使用者),僅次於中文;若包括將其作為第二語言的使用者,則為第四大語言。然而,大多數自然語言處理(NLP)研究仍然主要以英語形式存在。像BERT、XLNet或GPT2等重要成果,有時需要數年時間才能有西班牙語版本,而且即便有,通常也是通過多語言版本實現的,其性能不如英語版本。
在活動開展時,市面上尚無西班牙語的RoBERTa模型。因此,發佈這樣一個模型是我們項目的主要目標。在Flax/JAX社區活動期間,我們發佈了模型的beta版本,這是首個西班牙語的該類模型。此後,在活動的最後一天,巴塞羅那超級計算中心發佈了他們自己的RoBERTa模型。時間上的巧合表明我們的工作促使了他們的發佈,而競爭的增加正是我們項目所期望的結果。我們感謝他們在論文中提及BERTIN,並認可他們的貢獻,我們在實驗中也對其進行了引用。
單語西班牙語模型非常稀缺,而且即便有,通常也是在專有數據集上使用大量資源進行訓練的。實際上,這意味著許多相關算法和技術仍然只為大型科技公司和組織所獨有。這也促使我們項目的第二個目標的產生,即讓像RoBERTa這樣的大型模型的訓練更接近小型團隊。我們希望探索使這些架構的訓練更簡單、快速的技術,從而推動大語言模型的民主化。
西班牙語mC4數據集
mC4數據集是C4(Common Crawl網絡爬蟲語料庫的龐大、清潔版本)的多語言變體。C4用於訓練T5文本到文本的Transformer模型,而mC4包含從公共Common Crawl網絡爬取的101種語言的自然文本,用於訓練mT5(T5的多語言版本)。
西班牙語部分的mC4(mC4 - es)包含約4.16億個樣本和2350億個單詞,未壓縮數據約為1TB。
$ zcat c4/multilingual/c4-es*.tfrecord*.json.gz | wc -l
416057992
$ zcat c4/multilingual/c4-es*.tfrecord-*.json.gz | jq -r '.text | split(" ") | length' | paste -s -d+ - | bc
235303687795
困惑度採樣
mC4 - es中的大量文本使得在Flax/JAX社區活動的時間限制內訓練語言模型變得困難。這促使我們探索採樣方法,目標是創建一個數據集子集,使得在大約八分之一的數據(約5000萬個樣本)和大約一半的訓練步驟下訓練出性能良好的模型成為可能。
為了有效地構建這個數據子集,我們決定採用一種我們稱之為“困惑度採樣”的技術,其起源可以追溯到CCNet(Wenzek等人,2020)的構建以及他們從網絡爬取數據中創建高質量單語數據集的方法。在他們的工作中,他們提出可以應用在高質量數據(如維基百科)上訓練的快速語言模型來過濾掉與語言正確表達偏差過大的文本(見圖1)。他們還發布了KenLM庫(Heafield,2011)中實現的100種語言(包括西班牙語)的Kneser - Ney模型,並在各自的維基百科上進行了訓練。
在本工作中,我們測試了困惑度採樣可能有助於減少訓練數據大小和訓練時間,同時保持最終模型性能的假設。
方法
為了驗證我們的假設,我們首先計算了mC4 - es隨機子集(約四分之一的數據)中每個文檔的困惑度,並提取了其分佈和四分位數(見圖2)。
利用提取的困惑度百分位數,我們創建了兩個函數來對中間四分位數進行過採樣,目的是避免對過小(短而重複的文本)或過長(可能質量較差)的樣本進行採樣(見圖3)。
第一個函數是Stepwise
,它使用四分位數邊界和每個四分位數所需的採樣頻率factor
對中間四分位數進行過採樣,顯然中間四分位數的採樣頻率更高(對Q2、Q3進行過採樣,對Q1、Q4進行欠採樣)。
第二個函數通過一個類似高斯的函數對困惑度分佈進行加權,以平滑Stepwise
函數的尖銳邊界,並更好地逼近所需的潛在分佈(見圖4)。
我們調整了Stepwise
函數的factor
參數,以及Gaussian
函數的factor
和width
參數,以便能夠從mC4 - es的4.16億個樣本中採樣約5000萬個樣本(見圖4)。為了進行比較,我們還隨機採樣了mC4 - es,直至達到5000萬個樣本。在數據大小方面,我們從1TB的數據減少到了約200GB。我們發佈了在流式傳輸時從mC4中為任何語言進行採樣的代碼,數據集為bertin-project/mc4-sampling
。
圖5展示了每個執行的子採樣程序生成的5000萬個樣本子集的實際困惑度分佈。為了可重複性,可以使用bertin-project/mc4-es-sampled
數據集輕鬆訪問所有子集。我們調整了子採樣參數,以便從mC4的原始訓練分割中採樣約5000萬個示例。然而,當這些參數應用於驗證分割時,得到的示例太少(約40萬個樣本)。因此,為了驗證目的,我們在每個評估步驟從我們自己的訓練數據集中動態提取5萬個樣本。關鍵是,這些元素隨後會從訓練中排除,以免在之前見過的數據上進行驗證。在mc4-es-sampled
數據集中,訓練分割包含完整的5000萬個樣本,而驗證數據則直接從原始mC4中獲取。
from datasets import load_dataset
for config in ("random", "stepwise", "gaussian"):
mc4es = load_dataset(
"bertin-project/mc4-es-sampled",
config,
split="train",
streaming=True
).shuffle(buffer_size=1000)
for sample in mc4es:
print(config, sample)
break
如圖6所示,“隨機”採樣顯示出與潛在真實分佈相同的困惑度分佈。
雖然這不是一個全面的分析,但我們研究了訓練語料庫的困惑度分佈。一個快速的t - SNE圖似乎表明,不同主題和文檔簇的分佈是均勻的。交互式繪圖是使用多語言USE的蒸餾版本對20000個隨機示例的子集進行嵌入生成的,每個示例根據其困惑度進行著色。這很重要,因為原則上,如果困惑度恰好與我們數據的其他某些質量相關,引入基於困惑度的採樣方法可能會引入不期望的偏差。複製此繪圖所需的代碼可在tsne_plot.py
腳本中找到,HTML文件位於images/perplexity_colored_embeddings.html
。
訓練細節
然後,我們使用與Liu等人(2019)相同的設置和超參數,但在序列長度為128的情況下只訓練了一半的步驟(250000步)。具體來說,Gaussian
和Stepwise
訓練了250000步,而Random
在230000步時停止。Stepwise
最初需要在180000步時停止,以便進行下游測試(序列長度128),但後來恢復並完成了250000步。在進行序列長度為512的測試時,它已經達到了204000步,性能大幅提升。
然後,我們從之前序列長度為128、步數為230000步的檢查點開始,在序列長度為512的情況下對最有前景的模型繼續訓練了幾步(約50000步)。我們嘗試了兩種策略,因為在文獻中很難找到關於如何進行的明確細節。事實證明,這個決定對最終性能有很大影響。
對於Random
採樣,我們在250000步訓練的最後25000步中使用序列長度512進行訓練,保持優化器狀態不變。如圖7所示,結果並不理想。
對於Gaussian
採樣,我們在序列長度為128、步數為230000步後啟動了一個新的優化器,並使用了一個短的預熱間隔。使用此過程的結果要好得多。由於訓練需要多次重新啟動,我們沒有圖表,但最終準確率為0.6873,而Random
(512)為0.5907,這一差異遠大於它們各自序列長度為128的模型(Random
為0.6520,Gaussian
為0.6608)。按照相同的過程,Stepwise
在序列長度為512的情況下繼續訓練,在31000步時的掩碼語言模型(MLM)準確率為0.6744。
序列長度為128時的訓練批次大小為2048(8個TPU核心×256批次大小),序列長度為512時為384(8×48),學習率不變。序列長度為512時的預熱步數為500。
結果
請參考評估文件夾中的下游任務訓練腳本。
我們的第一次測試,在本倉庫中標記為beta
,指的是使用Stepwise
在序列長度為128的情況下進行的初始實驗,訓練了210000步,factor
設置為10。倉庫flax-community/bertin-roberta-large-spanish
包含一個幾乎相同的版本,但現在已停止使用。在社區活動期間,巴塞羅那超級計算中心(BSC)與西班牙國家圖書館合作,發佈了在2億個文檔(570GB)高質量數據上訓練的RoBERTa基礎和大型模型,使用MareNostrum 4的100個節點(每個節點48個CPU核心)進行了96小時的訓練。最終,他們得到了2TB的文檔級清潔數據,進一步清理後得到了最終的570GB。這與我們自己的資源(3個TPUv3 - 8,用於10天的清理、採樣、訓練和評估)形成了有趣的對比,是一個有價值的參考。BSC團隊評估了我們早期發佈的模型beta
,結果見表1。
我們的最終模型在不同的步數和序列長度下進行訓練,在掩碼詞預測任務中實現了不同(更高)的準確率。儘管存在這些限制,但看到他們使用我們模型早期版本獲得的結果仍然很有趣。請注意,BSC用於評估的一些數據集並非免費提供,因此無法驗證這些數字。
所有模型在掩碼語言模型任務的訓練過程中都達到了良好的準確率值(在0.65左右),見表2:
🔧 技術細節
西班牙語mC4數據集
mC4數據集是C4的多語言變體,西班牙語部分mC4 - es包含約4.16億個樣本和2350億個單詞,未壓縮數據約1TB。
困惑度採樣
提出“困惑度採樣”技術,利用該技術構建數據子集,減少訓練數據量和訓練時間。通過計算文檔困惑度,創建函數對中間四分位數進行過採樣,避免對過小或過長樣本採樣。
訓練策略
使用與Liu等人(2019)相同的設置和超參數,在序列長度128時訓練一半步驟(250000步)。對於不同採樣方法(Random
、Gaussian
、Stepwise
)採用不同訓練策略,在序列長度512時繼續訓練部分模型。
📄 許可證
本項目採用CC - BY - 4.0許可證。



