🚀 芬蘭語RoBERTa大模型
本項目是一個基於掩碼語言建模(MLM)目標,在芬蘭語語料上預訓練的RoBERTa模型。它能夠學習芬蘭語的雙向表示,為下游任務提取有用特徵。
🚀 快速開始
本模型可直接用於掩碼語言建模任務,也可在下游任務中進行微調。
✨ 主要特性
- 雙向表示學習:通過掩碼語言建模(MLM)目標,學習句子的雙向表示,與傳統RNN和自迴歸模型不同。
- 多數據集訓練:結合多個芬蘭語數據集進行預訓練,數據量大且經過清洗。
- 適用於多種下游任務:可用於序列分類、標記分類、問答等任務。
📦 安裝指南
文檔未提及具體安裝步驟,故跳過此章節。
💻 使用示例
基礎用法
你可以使用管道直接進行掩碼語言建模:
>>> from transformers import pipeline
>>> unmasker = pipeline('fill-mask', model='Finnish-NLP/roberta-large-finnish')
>>> unmasker("Moikka olen <mask> kielimalli.")
[{'sequence': 'Moikka olen hyvä kielimalli.',
'score': 0.1535797119140625,
'token': 767,
'token_str': ' hyvä'},
{'sequence': 'Moikka olen paras kielimalli.',
'score': 0.04795042425394058,
'token': 2888,
'token_str': ' paras'},
{'sequence': 'Moikka olen huono kielimalli.',
'score': 0.04251479730010033,
'token': 3217,
'token_str': ' huono'},
{'sequence': 'Moikka olen myös kielimalli.',
'score': 0.027469098567962646,
'token': 520,
'token_str': ' myös'},
{'sequence': 'Moikka olen se kielimalli.',
'score': 0.013878575526177883,
'token': 358,
'token_str': ' se'}]
高級用法
在PyTorch中獲取文本特徵
from transformers import RobertaTokenizer, RobertaModel
tokenizer = RobertaTokenizer.from_pretrained('Finnish-NLP/roberta-large-finnish')
model = RobertaModel.from_pretrained('Finnish-NLP/roberta-large-finnish')
text = "Replace me by any text you'd like."
encoded_input = tokenizer(text, return_tensors='pt')
output = model(**encoded_input)
在TensorFlow中獲取文本特徵
from transformers import RobertaTokenizer, TFRobertaModel
tokenizer = RobertaTokenizer.from_pretrained('Finnish-NLP/roberta-large-finnish')
model = TFRobertaModel.from_pretrained('Finnish-NLP/roberta-large-finnish', from_pt=True)
text = "Replace me by any text you'd like."
encoded_input = tokenizer(text, return_tensors='tf')
output = model(encoded_input)
📚 詳細文檔
模型描述
芬蘭語RoBERTa是一個基於Transformer架構的模型,以自監督的方式在大量芬蘭語語料上進行預訓練。它通過掩碼語言建模(MLM)目標學習語言的內部表示,即隨機掩碼輸入句子中的15%的單詞,然後預測這些掩碼單詞。這種方式使模型能夠學習句子的雙向表示,可用於下游任務的特徵提取。
預期用途和限制
該模型可用於掩碼語言建模,但主要用於下游任務的微調。適用於需要使用整個句子(可能是掩碼後的)進行決策的任務,如序列分類、標記分類或問答。對於文本生成任務,建議使用GPT2等模型。
訓練數據
該模型在五個數據集的組合上進行預訓練:
原始數據集經過清洗,過濾掉低質量和非芬蘭語的示例,最終清洗後的數據集約為78GB文本。
訓練過程
預處理
文本使用字節版本的字節對編碼(BPE)進行分詞,詞彙表大小為50265。模型輸入為512個連續的標記片段,可能跨越多個文檔。新文檔的開頭用<s>
標記,結尾用</s>
標記。
掩碼過程的詳細信息如下:
- 15%的標記被掩碼。
- 80%的情況下,被掩碼的標記被
<mask>
替換。
- 10%的情況下,被掩碼的標記被隨機標記替換。
- 10%的情況下,被掩碼的標記保持不變。
與BERT不同,掩碼在預訓練期間是動態進行的(例如,每個epoch都會改變,而不是固定的)。
預訓練
模型在由Google TPU Research Cloud贊助的TPUv3 - 8 VM上進行訓練,先以序列長度128訓練2個epoch,再以序列長度512訓練1個epoch。使用的優化器是Adafactor,學習率為2e - 4,\(\beta_{1} = 0.9\),\(\beta_{2} = 0.98\),\(\epsilon = 1e - 6\),學習率在1500步內預熱,之後線性衰減。
評估結果
通過在兩個不同的標記數據集Yle News和Eduskunta上進行下游文本分類任務的微調來評估模型。Yle News分類微調使用了兩種不同的序列長度:128和512,而Eduskunta僅使用序列長度128。
與FinBERT (Finnish BERT)和之前在Hugging Face JAX/Flax社區周訓練的Finnish RoBERTa - large相比,該模型(表格第一行)取得了以下準確率結果:
模型 |
平均準確率 |
Yle News 128長度 |
Yle News 512長度 |
Eduskunta 128長度 |
Finnish - NLP/roberta - large - finnish |
88.02 |
94.53 |
95.23 |
74.30 |
TurkuNLP/bert - base - finnish - cased - v1 |
88.82 |
94.90 |
95.49 |
76.07 |
flax - community/RoBERTa - large - finnish |
87.72 |
94.42 |
95.06 |
73.67 |
綜上所述,該模型在之前的Finnish RoBERTa - large模型基礎上有所改進,但仍略遜於FinBERT (Finnish BERT)模型(約1%)。
🔧 技術細節
文檔中關於技術細節的內容已在詳細文檔的訓練過程部分體現,故不再單獨列出。
📄 許可證
本項目採用Apache 2.0許可證。
致謝
本項目得益於Google通過TPU Research Cloud慷慨提供的計算資源。
團隊成員
如有更多詳情,歡迎聯繫我們🤗