Spaces:
Sleeping
Sleeping
File size: 3,372 Bytes
0c5ea15 06204cb 0c5ea15 06204cb 0c5ea15 06204cb 0c5ea15 06204cb 0c5ea15 06204cb 0c5ea15 06204cb 0c5ea15 06204cb 0c5ea15 06204cb 0c5ea15 06204cb 0c5ea15 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
import streamlit as st
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
# 🔃 モデル・トークナイザーの読み込み(slow tokenizer指定)
@st.cache_resource
def load_model():
tokenizer = AutoTokenizer.from_pretrained(
"rinna/japanese-gpt-neox-3.6b", use_fast=False
)
model = AutoModelForCausalLM.from_pretrained("rinna/japanese-gpt-neox-3.6b")
return tokenizer, model
tokenizer, model = load_model()
# 📋 サンプルデータ(4頭分)
cases = [
{
"user_input": """1歳時馬体重:430kg
体高:155.0cm
胸囲:180.0cm
管囲:20.8cm
生年月日:2023-03-15
測尺日:2024-06-10""",
"result_summary": """予測馬体重:480kg、ベストな馬体重
標準管囲との乖離:太い
過去の名馬:トーホウジャッカル 菊花賞G1芝3000m、オーソリティ アルゼンチン共和国杯G2芝2500m"""
},
{
"user_input": """1歳時馬体重:500kg
体高:152.0cm
胸囲:175.0cm
管囲:18.0cm
生年月日:2023-02-20
測尺日:2024-06-20""",
"result_summary": """予測馬体重:540kg、やや重め
標準管囲との乖離:細い
過去の名馬:サクセスブロッケン フェブラリーS G1ダ1600m、スマートファルコン 東京大賞典G1ダ2000m"""
},
{
"user_input": """1歳時馬体重:380kg
体高:158.0cm
胸囲:172.0cm
管囲:20.2cm
生年月日:2023-04-10
測尺日:2024-06-01""",
"result_summary": """予測馬体重:455kg、成長余地あり
標準管囲との乖離:標準
過去の名馬:ダノンザキッド ホープフルS G1芝2000m、ジャスタウェイ 安田記念G1芝1600m"""
},
{
"user_input": """1歳時馬体重:470kg
体高:164.5cm
胸囲:179.0cm
管囲:21.5cm
生年月日:2023-03-05
測尺日:2024-07-01""",
"result_summary": """予測馬体重:510kg、完成度高め
標準管囲との乖離:非常に太い
過去の名馬:キズナ 東京優駿G1芝2400m、ハーツクライ 有馬記念G1芝2500m"""
}
]
# ✨ コメント生成関数
def generate_comment(case):
prompt = f"""以下は、一口馬主の募集馬についてのAI総括コメントです。
ユーザーが入力した項目:
{case["user_input"]}
予測した結果:
{case["result_summary"]}
この馬について得られた結果を総括したうえで、ポジティブな言葉で締めくくってください。
コメント:"""
input_ids = tokenizer.encode(prompt, return_tensors="pt")
output = model.generate(input_ids, max_new_tokens=120, do_sample=True, temperature=0.7)
decoded = tokenizer.decode(output[0], skip_special_tokens=True)
return decoded.split("コメント:")[-1].strip()
# 🖼️ UI部分
st.title("🐴 AIによる募集馬コメント生成デモ")
if st.button("🎯 コメントを一括生成"):
for i, case in enumerate(cases, 1):
with st.spinner(f"Case {i} を生成中..."):
comment = generate_comment(case)
st.markdown(f"### 🐎 Case {i}")
st.markdown(f"**📥 入力**\n```\n{case['user_input']}\n```\n")
st.markdown(f"**📊 予測結果**\n```\n{case['result_summary']}\n```\n")
st.markdown(f"**📝 コメント**\n> {comment}")
st.markdown("---")
|