🚀 芬兰语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慷慨提供的计算资源。
团队成员
如有更多详情,欢迎联系我们🤗