语言:
- 日语
许可证: cc-by-sa-4.0
标签:
- 零样本分类
- 文本分类
- 自然语言推理
- PyTorch
评估指标:
- 准确率
数据集:
- JSNLI
管道标签: 文本分类
小部件示例:
- 文本: "あなた が 好きです 。 あなた を 愛して い ます 。"
模型索引:
- 名称: roberta-base-japanese-jsnli
结果:
- 任务:
类型: 文本分类
名称: 自然语言推理
数据集:
类型: snli
名称: JSNLI
分割: 开发集
评估指标:
- 类型: 准确率
值: 0.9328
已验证: false
roberta-base-japanese-jsnli
该模型是基于nlp-waseda/roberta-base-japanese在JSNLI数据集上微调的版本。
在评估集上取得了以下结果:
使用方法
输入文本需预先使用Juman++进行分词处理。
简易零样本分类流程
from transformers import pipeline
from pyknp import Juman
juman = Juman()
classifier = pipeline("zero-shot-classification", model="Formzu/roberta-base-japanese-jsnli")
sequence_to_classify = " ".join([tok.midasi for tok in juman.analysis("いつか世界を見る。").mrph_list()])
candidate_labels = ['旅行', '料理', '踊り']
out = classifier(sequence_to_classify, candidate_labels, hypothesis_template="この 例 は {} です 。")
print(out)
自然语言推理应用
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
from pyknp import Juman
juman = Juman()
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
model_name = "Formzu/roberta-base-japanese-jsnli"
model = AutoModelForSequenceClassification.from_pretrained(model_name).to(device)
tokenizer = AutoTokenizer.from_pretrained(model_name)
premise = " ".join([tok.midasi for tok in juman.analysis("いつか世界を見る。").mrph_list()])
label = '旅行'
hypothesis = f'この 例 は {label} です 。'
input = tokenizer.encode(premise, hypothesis, return_tensors='pt').to(device)
with torch.no_grad():
logits = model(input)["logits"][0]
probs = logits.softmax(dim=-1)
print(probs.cpu().numpy(), logits.cpu().numpy())
训练过程
训练超参数
训练过程中使用以下超参数:
- 学习率: 2e-05
- 训练批次大小: 32
- 评估批次大小: 32
- 随机种子: 42
- 优化器: 带betas=(0.9,0.999)和epsilon=1e-08的Adam
- 学习率调度器类型: 线性
- 训练轮数: 3.0
训练结果
训练损失 |
轮次 |
步数 |
验证损失 |
准确率 |
0.4067 |
1.0 |
16657 |
0.2224 |
0.9201 |
0.3397 |
2.0 |
33314 |
0.2152 |
0.9208 |
0.2775 |
3.0 |
49971 |
0.2039 |
0.9328 |
框架版本
- Transformers 4.21.2
- Pytorch 1.12.1+cu116
- Datasets 2.4.0
- Tokenizers 0.12.1