🚀 文档问答模型 - Kaleidoscope_small_v1
本模型是sberbank-ai/ruBert-base
的微调版本,专为文档问答任务而设计。它能够从给定的文档上下文中提取答案,并在包含上下文、问题和答案三元组的自定义JSON数据集上进行了微调。
✨ 主要特性
- 目标:根据用户的问题从文档中提取答案。
- 基础模型:
sberbank-ai/ruBert-base
。
- 数据集:一个自定义的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_small_v1")
model = AutoModelForQuestionAnswering.from_pretrained("LaciaStudio/Kaleidoscope_small_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
许可证。
微调者:LaciaStudio | LaciaAI
