QEUR23_PHI2SFT19: KeywordとReasoningを併用し、回答の品質を改善できるかを検証する
~ 祝!「Phi-3」リリース!(つづき) ~
・・・ 「Phi-3」がリリースされたのはいいが ・・・
QEU:FOUNDER : “Phi-3って、よさげだなあ。やってみたいなあ・・・。”
D先生(設定年齢65歳) : “じゃあ、finetuneしてみれば・・・?”
QEU:FOUNDER : “T4程度のGPUでは、エラーがでました(笑)。まあ、しゃあない・・・。地道にトレーニングデータセットの開発を続けましょう。今回は、データセットにKeywordという情報を追加しましょう。”
D先生(設定年齢65歳) : “そうすると、カテゴリと情報が重複しません?”
QEU:FOUNDER : “そういえばそうだわ・・・。データセットの編集には便利なので、生データには残すが、モデルの学習にはつかわないようにしましょう。”
# ------
# プロンプト変換用の関数(AIassistant)
def formatting_for_AIassistant(text_begining,text_medium,reasoning,transformed_input,response,language):
# ---
#"category": open_qa,closed_qa,classification,creative,translation,reasoning,brainstorm,q_to_q_
#"language": English,Japanese,Chinese
#"field": "technology,culture,math,other,travel,economy,language,history,nature,creative",
#"flag": AI assistant, creator, logician, translator
# ---
if language == "English":
text_all = f'''
{text_begining}<|reasoning|>{reasoning}\n{text_medium}<|response|>{response}<|endoftext|>
'''
else:
if len(transformed_input) >= 3:
text_all = f'''
{text_begining}<|reasoning|>{reasoning}\n{text_medium}<|transformed_input|>{transformed_input}\n<|response|>{response}<|endoftext|>
'''
else:
text_all = f'''
{text_begining}<|reasoning|>{reasoning}\n{text_medium}<|response|>{response}<|endoftext|>
'''
return text_all
# ------
# プロンプト変換用の関数(creator)
def format-ting_for_creator(text_begining,text_medium,reasoning,transformed_input,response,language):
# ---
if language == "English":
text_all = f'''
{text_begining}<|reasoning|>{reasoning}\n{text_medium}<|response|>{response}<|endoftext|>
'''
else:
if len(transformed_input) >= 3:
text_all = f'''
{text_begining}<|reasoning|>{reasoning}\n{text_medium}<|transformed_input|>{transformed_input}\n<|response|>{response}<|endoftext|>
'''
else:
text_all = f'''
{text_begining}<|reasoning|>{reasoning}\n{text_medium}<|response|>{response}<|endoftext|>
'''
return text_all
# ------
# プロンプト変換用の関数(translator)
def formatting_for_translator(text_begining,text_medium,reasoning,response):
# ---
text_all = f'''
{text_begining}<|reasoning|>{reasoning}\n{text_medium}<|response|>{response}<|endoftext|>
'''
return text_all
# ------
# プロンプト変換用の関数(logician)
def format-ting_for_logician(text_begining,text_medium,reasoning,transformed_input,response,language):
# ---
if language == "English":
text_all = f'''
{text_begining}<|reasoning|>{reasoning}\n{text_medium}<|response|>{response}<|endoftext|>
'''
else:
if len(transformed_input) >= 3:
text_all = f'''
{text_begining}<|reasoning|>{reasoning}\n{text_medium}<|transformed_input|>{transformed_input}\n<|response|>{response}<|endoftext|>
'''
else:
text_all = f'''
{text_begining}<|reasoning|>{reasoning}\n{text_medium}<|response|>{response}<|endoftext|>
'''
return text_all
# ------
# 基本プロンプトは以下の通り(reasoning is all you need.)
#<|system|>sys_message\n<|prompt|>prompt\n<|reasoning|>reasoning\n<|response|>response<|endoftext|>
# ------
# プロンプト変換用の関数(Batch: For Reasoning)
def formatting_prompts_func(examples):
# ---
sys_message_AIassistant = "You are an AI assistant who is good at providing answers in multiple languages. Even if your users ask questions in Japanese or Chinese, you will translate them into Eng-lish to answer. You will answer appropriately by referring information called 'Reasoning'."
# ---
sys_message_translator = "You are translator who is fluent in multiple languages.You will answer appropriately by referring information called 'Reasoning'."
# ---
sys_message_creator = "You are creator who create amazing content with your free ideas. You at-tract readers with your beautiful writing such as novel or advertisement. Even if users ask questions in Japanese or Chinese, you will translate their instructions into English to answer properly. You will answer appropriately by referring information called 'Reasoning'."
# ---
sys_message_logician = "You are an excellent logician and are instructing users on \"thinking pro-cedures for providing better quality reasoning to user-provided questions.\". "
# ---
output_text = []
# ---
for i in range(len(examples["instruction"])):
# ---
instruction = examples["instruction"][i]
input_text = examples["input"][i]
# ---
category = examples["category"][i]
language = examples["language"][i]
field = examples["field"][i]
keywords = examples["keywords"][i]
flag = examples["flag"][i]
# ---
# 推論(Reasoning)
reasoning = examples["reasoning"][i]
# keywordsを参照して、改造する
if len(keywords) >= 3:
reasoning = reasoning.replace(", referring to relevant field information, before",f", referring to relevant field information such as {keywords}, before")
# ---
transformed_input = examples["transformed_input"][i]
response = examples["output"][i]
# ---
# システムメッセージを選択する
if flag == "logician":
sys_message = sys_message_logician
elif flag == "creator":
sys_message = sys_message_creator
elif flag == "translator":
sys_message = sys_message_translator
else:
sys_message = sys_message_AIassistant
# ---
# プロンプトの初めの部分を作成する
if len(input_text) >= 3:
text_begining = f'''
<|system|>{sys_message}\n<|instruction|>{instruction}\n<|context|>{input_text}\n
'''
if len(keywords) >= 3:
text_medium = f'''
<|keywords|>{keywords}\n<|field|>{field}\n<|flag|>{flag}\n<|language|>{language}\n
'''
else:
text_medium = f'''
<|field|>{field}\n<|flag|>{flag}\n<|language|>{language}\n
'''
else:
text_begining = f'''
<|system|>{sys_message}\n<|instruction|>{instruction}\n
'''
if len(keywords) >= 3:
text_medium = f'''
<|keywords|>{keywords}\n<|field|>{field}\n<|flag|>{flag}\n<|language|>{language}\n
'''
else:
text_medium = f'''
<|field|>{field}\n<|flag|>{flag}\n<|language|>{language}\n
'''
# ---
# システムメッセージを選択する
if flag == "logician":
text = format-ting_for_logician(text_begining,text_medium,reasoning,transformed_input,response,language)
elif flag == "creator":
text = format-ting_for_creator(text_begining,text_medium,reasoning,transformed_input,response,language)
elif flag == "translator":
text = formatting_for_translator(text_begining,text_medium,reasoning,response)
else:
text = format-ting_for_AIassistant(text_begining,text_medium,reasoning,transformed_input,response,language)
# ---
output_text.append(text)
return output_text
D先生(設定年齢65歳) : “今回は、(推論の)結果だけを見ましょう。まあ、P2にはあまり期待はできませんが・・・。”
QEU:FOUNDER(設定年齢65歳) : “P2モデルのJ語の限界が見えてきますよね。これは、翻訳の局面でもしようがない。”
D先生(設定年齢65歳) : “前回よりも良くなっているのだが、もうちょっとたらないんだなあ・・・。”
QEU:FOUNDER : “「地アタマ(Pre-training)」の問題ですよ。それは、C語と比較するとわかります。P2はC語を比較的に多く学習しているから・・・。”
QEU:FOUNDER : “ほらね。J語、オワタ・・・(笑)。”
D先生(設定年齢65歳) : “まあ、いいや・・・。今回のポイントは、Reasoningでしょ?”
QEU:FOUNDER : “今回の改造で一気に良くなりました。”
D先生 : “ホントにKeywordsの追加だけの効用なのかな?”
QEU:FOUNDER : “バグフィックスもかなりしました(笑)。今回で、Finetuneそのもののフレームワークができたと思います。このまま、P2でぶっちぎるか、それとも他の上位モデルに移行するかの瀬戸際にきました。是非、カンパをお願いします。”
>寄付のお願い(click here for buy me a cup of coffee)<
D先生: “皆さま、いっぱいの温かい「Buy me a cup of coffee」をいただけませんでしょうか。”
~ まとめ ~
・・・ 前回のつづきです ・・・
C部長 : “要するに、A国を始めとした先進国では、「この技術は楽しそうだからビジネスにしたいです!」が通っちゃう社会なんだ・・・。”
QEU:FOUNDER : “うらやましいでしょ?「楽しい=ビジネス」になる社会って・・・。それだけじゃないです。ソーシャルメディアが高度に設立した現在において、人々の価値観が大きく変わってきたんです。”
(モノの価値とは)
- (生活が、仕事が)便利になる
- 自分を変えることができる
- モノがあると快適、楽しい
- 条件付け→パーソナリゼーション
自分の社会の中での位置づけ
QEU:FOUNDER : “最後の1項目は、QEUシステムの価値のしくみには敢て加えませんでした。「自分の社会の中での位置づけ」って、小難しく言うとマズローの5段階説のことです。あの悪名高い・・・。ちなみに、これは「説」ですからね。その設立前提が変わると、その存在があやしくなるんですよ。”
C部長 : “たしかに、最近の新入社員の意識って、(価値観が)変わっているからなあ・・・。”
QEU:FOUNDER : “その反面、自撮り写真(selfie)をSNSに載せるためだけに大枚はたいてJ国に来る人で、あふれかえっているでしょ?その動機はマズロー程度で説明できるの?さらにいうと、もっと「上の世界」が大きく変化してきています。”
C部長 : “これ(↑)って、ファッション・ブランドのコンセプト写真じゃないの・・・?しかし、古いオッサンがこの絵をみると卒倒するんじゃない?ワシは「白いの」しか認めん!「ほっかぶり」しているは実習生じゃ!・・・とかなんとか・・・(笑)。”
QEU:FOUNDER : “「マズローの5段階=出世競争」と考えてきた、「条件付けまみれ」で育った、昭和文化の産物(ヒト)だよね。令和(以降)じゃ、こんな考え方は通用しないよ。”
C部長 : “多様な社会が実現するための準備ができつつあるということですね。”
コメント
コメントを投稿