🚀 文档问答模型 - Kaleidoscope_large_v1
该模型是sberbank-ai/ruBert-large
的微调版本,专为文档问答任务而设计。它能够从给定的文档上下文中提取答案,并且在包含上下文、问题和答案三元组的自定义JSON数据集上进行了微调。
🚀 快速开始
示例代码
import torch
from transformers import AutoTokenizer, AutoModelForQuestionAnswering
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
tokenizer = AutoTokenizer.from_pretrained("LaciaStudio/Kaleidoscope_large_v1")
model = AutoModelForQuestionAnswering.from_pretrained("LaciaStudio/Kaleidoscope_large_v1")
model.to(device)
file_path = input("Enter document path: ")
with open(file_path, "r", encoding="utf-8") as f:
context = f.read()
while True:
question = input("Enter question (or 'exit' to quit): ")
if question.lower() == "exit":
break
inputs = tokenizer(question, context, return_tensors="pt", truncation=True, max_length=384)
inputs = {k: v.to(device) for k, v in inputs.items()}
outputs = model(**inputs)
start_logits = outputs.start_logits
end_logits = outputs.end_logits
start_index = torch.argmax(start_logits)
end_index = torch.argmax(end_logits)
answer_tokens = inputs["input_ids"][0][start_index:end_index + 1]
answer = tokenizer.decode(answer_tokens, skip_special_tokens=True)
print("Answer:", answer)
✨ 主要特性
- 目标:根据用户问题从文档中提取答案。
- 基础模型:
sberbank-ai/ruBert-large
。
- 数据集:一个自定义的JSON文件,包含上下文、问题和答案字段。
- 预处理:通过将问题和文档上下文连接起来形成输入,引导模型关注相关段落。
📦 安装指南
文档中未提及安装步骤,故跳过此章节。
💻 使用示例
基础用法
以下是使用该模型进行文档问答的示例代码:
import torch
from transformers import AutoTokenizer, AutoModelForQuestionAnswering
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
tokenizer = AutoTokenizer.from_pretrained("LaciaStudio/Kaleidoscope_large_v1")
model = AutoModelForQuestionAnswering.from_pretrained("LaciaStudio/Kaleidoscope_large_v1")
model.to(device)
file_path = input("Enter document path: ")
with open(file_path, "r", encoding="utf-8") as f:
context = f.read()
while True:
question = input("Enter question (or 'exit' to quit): ")
if question.lower() == "exit":
break
inputs = tokenizer(question, context, return_tensors="pt", truncation=True, max_length=384)
inputs = {k: v.to(device) for k, v in inputs.items()}
outputs = model(**inputs)
start_logits = outputs.start_logits
end_logits = outputs.end_logits
start_index = torch.argmax(start_logits)
end_index = torch.argmax(end_logits)
answer_tokens = inputs["input_ids"][0][start_index:end_index + 1]
answer = tokenizer.decode(answer_tokens, skip_special_tokens=True)
print("Answer:", answer)
问答示例
俄语示例
Альберт Эйнштейн разработал теорию относительности.
Кто разработал теорию относительности?
альберт эинштеин
英语示例
I had a red car.
What kind of car did I have?
a red car
📚 详细文档
该模型使用Transformers库和自定义训练管道进行微调。训练过程的关键方面包括:
- 自定义数据集:加载器读取包含上下文、问题和答案三元组的JSON文件。
- 特征准备:脚本使用滑动窗口方法对文档和问题进行分词,以处理长文本。
- 训练过程:利用混合精度训练和AdamW优化器来改进优化效果。
- 评估和检查点:训练脚本在验证集上评估模型性能,保存检查点,并根据验证损失采用提前停止策略。
该模型非常适合交互式文档问答任务,是客户支持、文档搜索和自动问答系统等应用的强大工具。虽然该模型主要针对俄语文本,但也支持英语输入。不过,其对英语的支持尚未经过测试。
🔧 技术细节
训练设置
- 训练轮数:20。
- 批次大小:每个设备4。
- 热身步骤:总步骤的0.1。
- FP16训练:如果CUDA可用,则启用。
- 硬件:在1xRTX 3070上进行训练。
📄 许可证
该模型采用CC BY-NC 4.0许可证。
属性 |
详情 |
模型类型 |
文档问答模型 |
基础模型 |
ai-forever/ruBert-large |
库名称 |
transformers |
评估指标 |
准确率、F1值、召回率、精确匹配、精确率 |
许可证 |
CC BY-NC 4.0 |
⚠️ 重要提示
该模型对英语的支持尚未经过测试。

由LaciaStudio | LaciaAI微调