QEUR23_LLMDSS6: (オリエンテーション)ユーザーがfinetuneしたモデルを使用することの重要性
~ これは、とても重要なオリエンテーションです ~
D先生 : “別のブログでLangChain(Vector Store)の応用のプロジェクトが終わり、やっと、この「fine tuning」のブログに戻ってきました。・・・、いや、いままで長かった・・・(笑)。”
QEU:FOUNDER : “それにしても、LangChainを使うことによって、LLMの応用の広さと深さをより理解できましたね。今回は、ちょっと「深い」オリエンテーションです。。”
C部長 : “これ(↑)って、大きな問題になっていますが、偉い人によると問題ないんでしょ?「meti」とかいう、「健康に責任を持つ省」が安全といっているんだし・・・。”
C部長 : “処理した後の水には「トリチウム」しかないんでしょ?”
D先生 : “どうなんでしょうね。とある、有名なジャーナリストのツイッターを参考にしましょう。”
QEU:FOUNDER : “とても残念ながら、あの水にはストロンチウムとセシウムが少量ながら残留しているようです。”
(ストロンチウム)
(セシウム)
C部長 : “でも少量なんでしょ?健康に影響はないんでしょ?”
QEU:FOUNDER : “それでは、この2つの物質について調べてみましょう。まずは、我々が今まで使ってきたLlama2からしらべましょう。”
# llama2-13B-chat-GPTQによる単発LLM回答プログラム
import pandas as pd
import numpy as np
from langchain import HuggingFacePipeline
from langchain import PromptTemplate, LLMChain
from transformers import AutoTokenizer, pipeline, logging
from auto_gptq import AutoGPTQForCausalLM, BaseQuantizeConfig
# モデル名
model_name_or_path = "TheBloke/Llama-2-13B-chat-GPTQ"
use_triton = False
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, use_fast=True)
model = AutoGPTQForCausalLM.from_quantized(model_name_or_path,
use_safetensors=True,
trust_remote_code=False,
device="cuda:0",
use_triton=use_triton,
quantize_config=None)
# -----
# Inference can also be done using transformers' pipeline
# Prevent printing spurious transformers error when using pipeline with AutoGPTQ
logging.set_verbosity(logging.CRITICAL)
#print("*** Pipeline:")
pipe = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
max_new_tokens=1024,
temperature=0.2,
top_p=0.95,
repetition_penalty=1.15
)
llm = HuggingFacePipeline(
pipeline = pipe,
model_kwargs = {"temperature": 0.2}
)
#################
##################################
# -----
template = """
あなたは良心的な科学者です。以下の質問(question)に答えてください。
Question: {question}
Answer:"""
# Promptを完成する
prompt = PromptTemplate(template=template, input_variables=["question"])
#print(f"prompt: {prompt}")
# Chains: 作成したモデルを利用可能な状態にする
llm_chain = LLMChain(prompt=prompt, llm=llm)
#################
###################
# ------
question = "一年以上、放射性セシウムを経口摂取した場合の人体への影響と許容量を教えてください。"
# 質問に回答する
print(f"Question: {question}")
answer = llm_chain.predict(question=question)
# 答えを表示する
print(f"Answer: {answer}")
# ------
# 以下、質問を変更する
question = "放射性セシウムの健康影響は何ですか?"
question = "一年以上、放射性ストロンチウムを経口摂取した場合の人体への影響と許容量を教えてく
question = "放射性ストロンチウムの健康影響は何ですか?"
question = "10年以上の長期間にわたり放射性セシウム及び放射性ストロンチウムを海に放出した際の
QEU:FOUNDER : “推論の結果は以下のとおりです。質問を変えて、その回答を見ています。”
(セシウム)
(ストロンチウム)
(生態系への被害)
D先生 : “Llama2-13b-GPTQでも思ったよりも、回答内容に日本語が出てきますね。でも、すこし文字化けもあり、わかりにくいですね。次は、もっと「大きなモデル」で検証できませんか?”
QEU:FOUNDER : “じゃあ、あの天下の「bing」をつかってみましょう。なにしろ、あのGPT-4様を使っているんですから・・・。”
(セシウム)
(ストロンチウム)
C部長 : “あれ??賢くなりすぎているのか、流暢に答えてはいるのですが、何を言っているのかわかりません。”
D先生 : “う~ん・・・、Llama2の出力とは全く違います。(wikipediaなど)ほとんど同じ情報を学習しているのに、これはなんでかな?FOUNDER、すいません・・・。別のGPTを使ってみてくれませんか?”
QEU:FOUNDER : “じゃあ、「Monica」を使いましょう、中身は「GPT-3.5」です。つまり、学習データはbing(GPT-4)とほとんど同じになるはずだが・・・。その結果をドン!!”
(セシウム)
(ストロンチウム)
C部長 : “あれ?GPT-3.5の結果は、むしろLlama2に似ている!?”
D先生 : “ついでに、「汚水を海に放出した場合の生態系への影響」をbing(GPT-4)とMonica(GPT-3.5)で比較しました。”
C部長 : “やはり結果は、GPT-3.5の回答の内容がLlama2に近いです。”
QEU:FOUNDER : “なんか、今のtwitterで「〇〇のLLMはすごい!!」っていっているけど、あれって何なのかな?もちろん、(LLMの)技術的な進歩は歓迎するけど、肝心の問題は「コンテンツの質」でしょ?娯楽でチラッと見るのならともかく、自分の仕事で使う場合、安定していないLLMってどう思う?”
C部長 : “やはり、コンテンツの質は高く、(他人に影響されず)安定し、自分に合っていないと・・・。”
QEU:FOUNDER : “確かに、GPT-3.5も自分用にfinetuneできるほうがいいですね。・・・でもね、それでも安定性ってどうなのかな?たぶんGPTのfinetuningって、LoRA(Low Rank Adoption)のパッチを当てるんでしょ?この場合の安定性って、自主性・独立性ともいえます。そういう観点では、Llama系のLLMってすごく魅力があるんですよね。”
C部長 : “Llamaでは、それなりのリソース(GPU,RAM)が必要ですが・・・。”
D先生 : “なるほどね・・・。FOUNDERは、このようなロジックで、我々には「(OpenAI系ではない)本当の意味で自分が所有しているLLMが必要だ」と言っているんですね。そういえば、さっきの処理水の計測単位で「ベクレル」があったのですが、あれと健康との関係は何ですか?”
QEU:FOUNDER : “放射能関連の計測単位には「ベクレル」と「シーベルト」があります。この2つの単位は全く別物です。ここで、(人体の)健康に関係する単位はシーベルトなのですが、ベクレルから直接に変換できません。だから、ここでは「あの水」が健康に良いのか悪いのかは全くいうつもりはありません。”
C部長 : “あくまで、我々がやりたいのはLLMの開発だから・・・。”
>寄付のお願い(click here)<
QEU:FOUNDER : “寄付をください。Finetuningはお金がかかりますからね。”
コメント
コメントを投稿