Persian Xlm Roberta Large
基于XLM-RoBERTA多语言预训练模型,在波斯语问答数据集PQuAD上微调的问答模型
下载量 77
发布时间 : 9/18/2022
模型简介
该模型是针对波斯语问答任务优化的XLM-RoBERTA大型模型,在PQuAD数据集上微调,支持波斯语问答任务。
模型特点
多语言预训练基础
基于支持100种语言的XLM-RoBERTA大型模型
波斯语优化
在最大的波斯语问答数据集PQuAD上专门微调
高效训练
采用梯度累积等技术在有限GPU资源下完成训练
模型能力
波斯语问答
跨语言迁移学习
文本理解
使用案例
教育
波斯语学习辅助
帮助学习者通过问答方式理解波斯语文本
精确匹配率66.56%,F1分数87.31%
信息检索
波斯语文档问答系统
从波斯语文档中提取答案
🚀 用于问答任务的波斯语XLM - RoBERTA大模型
本模型基于XLM - RoBERTA,这是一个在2.5TB经过筛选的CommonCrawl数据(涵盖100种语言)上预训练的多语言语言模型。该模型由Conneau等人在论文大规模无监督跨语言表征学习中提出。
多语言的适用于多种语言问答的XLM - RoBERTa大模型在多个问答数据集上进行了微调,但不包括PQuAD,PQuAD是目前最大的波斯语问答数据集。本模型就是基于该多语言模型进一步微调得到的。
介绍PQuAD数据集的论文:arXiv:2202.06219
🚀 快速开始
本模型在PQuAD训练集上进行了微调,可直接使用。由于训练时间很长,为了方便有需要的人,我将这个模型发布了出来。
✨ 主要特性
- 基于强大的XLM - RoBERTA多语言预训练模型。
- 在PQuAD波斯语问答数据集上进行了微调,适用于波斯语问答任务。
- 在PQuAD测试集上的表现优于ParsBert模型。
📦 安装指南
此部分文档未提及具体安装步骤,跳过。
💻 使用示例
基础用法
from transformers import AutoTokenizer, AutoModelForQuestionAnswering
path = 'pedramyazdipoor/persian_xlm_roberta_large'
tokenizer = AutoTokenizer.from_pretrained(path)
model = AutoModelForQuestionAnswering.from_pretrained(path)
高级用法
def generate_indexes(start_logits, end_logits, N, min_index):
output_start = start_logits
output_end = end_logits
start_indexes = np.arange(len(start_logits))
start_probs = output_start
list_start = dict(zip(start_indexes, start_probs.tolist()))
end_indexes = np.arange(len(end_logits))
end_probs = output_end
list_end = dict(zip(end_indexes, end_probs.tolist()))
sorted_start_list = sorted(list_start.items(), key=lambda x: x[1], reverse=True) #Descending sort by probability
sorted_end_list = sorted(list_end.items(), key=lambda x: x[1], reverse=True)
final_start_idx, final_end_idx = [[] for l in range(2)]
start_idx, end_idx, prob = 0, 0, (start_probs.tolist()[0] + end_probs.tolist()[0])
for a in range(0,N):
for b in range(0,N):
if (sorted_start_list[a][1] + sorted_end_list[b][1]) > prob :
if (sorted_start_list[a][0] <= sorted_end_list[b][0]) and (sorted_start_list[a][0] > min_index) :
prob = sorted_start_list[a][1] + sorted_end_list[b][1]
start_idx = sorted_start_list[a][0]
end_idx = sorted_end_list[b][0]
final_start_idx.append(start_idx)
final_end_idx.append(end_idx)
return final_start_idx[0], final_end_idx[0]
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model.eval().to(device)
text = 'سلام من پدرامم 26 سالمه'
question = 'چند سالمه؟'
encoding = tokenizer(question,text,add_special_tokens = True,
return_token_type_ids = True,
return_tensors = 'pt',
padding = True,
return_offsets_mapping = True,
truncation = 'only_first',
max_length = 32)
out = model(encoding['input_ids'].to(device),encoding['attention_mask'].to(device), encoding['token_type_ids'].to(device))
#we had to change some pieces of code to make it compatible with one answer generation at a time
#If you have unanswerable questions, use out['start_logits'][0][0:] and out['end_logits'][0][0:] because <s> (the 1st token) is for this situation and must be compared with other tokens.
#you can initialize min_index in generate_indexes() to put force on tokens being chosen to be within the context(startindex must be greater than seperator token).
answer_start_index, answer_end_index = generate_indexes(out['start_logits'][0][1:], out['end_logits'][0][1:], 5, 0)
print(tokenizer.tokenize(text + question))
print(tokenizer.tokenize(text + question)[answer_start_index : (answer_end_index + 1)])
>>> ['▁سلام', '▁من', '▁پدر', 'ام', 'م', '▁26', '▁سالم', 'ه', 'چند', '▁سالم', 'ه', '؟']
>>> ['▁26']
📚 详细文档
训练超参数
由于Google Colab中GPU内存的限制,我将批量大小设置为4。
batch_size = 4
n_epochs = 1
base_LM_model = "deepset/xlm-roberta-large-squad2"
max_seq_len = 256
learning_rate = 3e-5
evaluation_strategy = "epoch",
save_strategy = "epoch",
learning_rate = 3e-5,
warmup_ratio = 0.1,
gradient_accumulation_steps = 8,
weight_decay = 0.01,
性能评估
在PQuAD波斯语测试集上进行评估,使用官方PQuAD链接。 我也进行了超过1个epoch的训练,但结果更差。 我们的XLM - Roberta模型在PQuAD数据集上的表现优于我们的ParsBert模型,但前者的规模是后者的3倍多,因此比较这两个模型并不公平。
PQuAD数据集测试集上的问答性能
指标 | 我们的XLM - Roberta大模型 | 我们的ParsBert模型 |
---|---|---|
精确匹配 | 66.56* | 47.44 |
F1值 | 87.31* | 81.96 |
推理注意事项
- 答案的起始索引必须小于结束索引。
- 答案的范围必须在上下文中。
- 所选的范围必须是N对候选答案中最可能的选择。
🔧 技术细节
本模型基于XLM - RoBERTA大模型,在PQuAD训练集上进行微调。训练过程中,由于GPU内存限制,设置了合适的批量大小和其他超参数。在推理阶段,通过generate_indexes
函数来确定答案的起始和结束索引。
📄 致谢
我们在此对Newsha Shahbodaghkhan在数据集收集方面提供的便利表示感谢。
👥 贡献者
- Pedram Yazdipoor : 领英
📢 版本发布
版本v0.2 (2022年9月18日)
这是我们的波斯语XLM - Roberta大模型的第二个版本。之前的版本在使用中存在一些问题。
Distilbert Base Cased Distilled Squad
Apache-2.0
DistilBERT是BERT的轻量级蒸馏版本,参数量减少40%,速度提升60%,保留95%以上性能。本模型是在SQuAD v1.1数据集上微调的问答专用版本。
问答系统 英语
D
distilbert
220.76k
244
Distilbert Base Uncased Distilled Squad
Apache-2.0
DistilBERT是BERT的轻量级蒸馏版本,参数量减少40%,速度提升60%,在GLUE基准测试中保持BERT 95%以上的性能。本模型专为问答任务微调。
问答系统
Transformers 英语

D
distilbert
154.39k
115
Tapas Large Finetuned Wtq
Apache-2.0
TAPAS是基于BERT架构的表格问答模型,通过自监督方式在维基百科表格数据上预训练,支持对表格内容进行自然语言问答
问答系统
Transformers 英语

T
google
124.85k
141
T5 Base Question Generator
基于t5-base的问答生成模型,输入答案和上下文,输出相应问题
问答系统
Transformers

T
iarfmoose
122.74k
57
Bert Base Cased Qa Evaluator
基于BERT-base-cased的问答对评估模型,用于判断问题和答案是否语义相关
问答系统
B
iarfmoose
122.54k
9
Tiny Doc Qa Vision Encoder Decoder
MIT
一个基于MIT许可证的文档问答模型,主要用于测试目的。
问答系统
Transformers

T
fxmarty
41.08k
16
Dpr Question Encoder Single Nq Base
DPR(密集段落检索)是用于开放领域问答研究的工具和模型。该模型是基于BERT的问题编码器,使用自然问题(NQ)数据集训练。
问答系统
Transformers 英语

D
facebook
32.90k
30
Mobilebert Uncased Squad V2
MIT
MobileBERT是BERT_LARGE的轻量化版本,在SQuAD2.0数据集上微调而成的问答系统模型。
问答系统
Transformers 英语

M
csarron
29.11k
7
Tapas Base Finetuned Wtq
Apache-2.0
TAPAS是一个基于Transformer的表格问答模型,通过自监督学习在维基百科表格数据上预训练,并在WTQ等数据集上微调。
问答系统
Transformers 英语

T
google
23.03k
217
Dpr Question Encoder Multiset Base
基于BERT的密集段落检索(DPR)问题编码器,用于开放领域问答研究,在多个QA数据集上训练
问答系统
Transformers 英语

D
facebook
17.51k
4
精选推荐AI模型
Llama 3 Typhoon V1.5x 8b Instruct
专为泰语设计的80亿参数指令模型,性能媲美GPT-3.5-turbo,优化了应用场景、检索增强生成、受限生成和推理任务
大型语言模型
Transformers 支持多种语言

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一个基于SODA数据集训练的超小型对话模型,专为边缘设备推理设计,体积仅为Cosmo-3B模型的2%左右。
对话系统
Transformers 英语

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基于RoBERTa架构的中文抽取式问答模型,适用于从给定文本中提取答案的任务。
问答系统 中文
R
uer
2,694
98