File size: 1,662 Bytes
d4e1139
d6215f9
9cc19b3
d4e1139
 
d6215f9
9cc19b3
d6215f9
 
d4e1139
 
d6215f9
 
 
9cc19b3
d6215f9
 
 
 
 
 
 
 
 
 
 
 
 
f6bc926
d4e1139
 
 
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
import gradio as gr
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
from peft import PeftModel


# モデルのパス
model_folder = "./model"
base_model_name = "bigscience/mt0-large"
peft_model_path = f"{model_folder}/peft_model"


# PEFT設定とベースモデル読み込み(meta tensor回避)
base_model = AutoModelForSeq2SeqLM.from_pretrained(base_model_name)
tokenizer = AutoTokenizer.from_pretrained(base_model_name)
model = PeftModel.from_pretrained(base_model, peft_model_path)


def predict_sentiment(text: str) -> str:
    model.eval()
    inputs = tokenizer(text, return_tensors="pt")

    # 本来はtorch.no_grad()を使うべきだが、バグを避けるために、torch.no_grad()を使わない
    # with torch.no_grad():
    outputs = model.generate(input_ids=inputs["input_ids"], max_new_tokens=10)
    sentiment = tokenizer.batch_decode(outputs.detach().cpu().numpy(), skip_special_tokens=True)
    return sentiment


demo = gr.Interface(fn=predict_sentiment, inputs="textbox", outputs="textbox", description="入力された金融ニュースがネガティブかポジティブかを判定するLLMを作成しました。 金融ニュース以外(例えば映画の感想など)のネガポジ判定も出来ますが、あくまでも金融ニュースに特化したLLMです。 試しに、以下の金融ニュースの本文を入力してみてください。 https://news.livedoor.com/article/detail/28762328/ 使用技術: LoRA(peft) ベースモデル: bigscience/mt0-large データセット: 金融ニュースデータセット(financial_phrasebank)")

if __name__ == "__main__":
    demo.launch()