import gradio as gr from transformers import AutoTokenizer, AutoModelForCausalLM # 確実に存在する軽量日本語モデル model_name = "rinna/japanese-gpt2-small" tokenizer = AutoTokenizer.from_pretrained(model_name, use_fast=False) model = AutoModelForCausalLM.from_pretrained(model_name) # 採点用プロンプト PROMPT_TEMPLATE = """ あなたは作文採点の教師です。Q{question_number}の回答を0〜12点で採点してください。 回答: {answer} 採点ルール: 論理性、文字数、日本語の正確さ、他の比較や妄想の程度などを考慮し0〜12点で評価。 """ # 採点関数 def grade(question_number, answer): if not question_number: return "Q77またはQ78の回答ですか?" prompt = PROMPT_TEMPLATE.format(question_number=question_number, answer=answer) inputs = tokenizer(prompt, return_tensors="pt") outputs = model.generate(**inputs, max_new_tokens=20, temperature=0.5) response = tokenizer.decode(outputs[0], skip_special_tokens=True) return response # Gradio UI with gr.Blocks() as demo: gr.Markdown("# 作文採点チャットボット (0〜12点)") qnum = gr.Radio(["77", "78"], label="問題番号") text = gr.Textbox(label="回答", lines=6, placeholder="ここに回答を入力してください") output = gr.Textbox(label="採点結果") btn = gr.Button("採点する") btn.click(grade, inputs=[qnum, text], outputs=output) demo.launch()