QEUR23_PHI2SFT30: よりAGIらしく改造する(Step2、類似度の計測)
~ おっと!類似度計測のポリシーがかなり変わります。 ~
QEU:FOUNDER(設定年齢65歳) : “前回はStep2の質問の回答を生成して、それをもとにStep3の質問群を生成しました。そして、今回は(Step3の質問候補群の)類似度評価をおこないましょう。”
# -----
# [Step2用,改造版]大量に生成された質問を類似度で評価する
# -----
import os
import re
import math
# ---
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import spacy # spaCyをimport
# -----
# Excelファイルからデータフレームを作成する
# Question to Question
df = pd.read_excel('qq_for_UR_step2_output.xlsx')
# Step1の質問数
num_df = len(df)
df
# ------
# QQ類似度分析: Question Step2とStep3を比較する
# ------
nlp_md = spacy.load("en_core_web_md")
# ---
mx_similar_question_max = np.zeros([num_df, 5])
mx_similar_question_min = np.zeros([num_df, 5])
#print(mx_similar_question)
# ---
# (ちょっと複雑な)マトリックス計算
# ---
for i in range(num_df):
for j in range(5):
str_question2 = mx_QStep3[i,j]
#print(f"i:{i}, j:{j}, string:{str_question2}")
token2 = nlp_md(str_question2)
# -----
arr_similarity = []
for k in range(num_df):
str_question1 = arr_QStep2[k]
token1 = nlp_md(str_question1)
# -----
# 類似度の計算
similarity = token1.similarity(token2)
arr_similarity.append(round(similarity,5))
# -----
val_max = np.max(arr_similarity)
val_min = np.min(arr_similarity)
mx_similar_question_max[i,j] = val_max
mx_similar_question_min[i,j] = val_min
print(f"i:{i}, j:{j}, val_max:{val_max}, val_min:{val_min}")
# -----
print("--- mx_similar_question_max ---")
print(mx_similar_question_max[0:5,0:5])
print("--- mx_similar_question_min ---")
print(mx_similar_question_min[0:5,0:5])
# ----
# QQ類似度(Question to Question Similarigy)のデータフレームを生成する
# MAXの場合
arr_columns = ['QQS_MAX1','QQS_MAX2','QQS_MAX3','QQS_MAX4','QQS_MAX5']
df_similar_max = pd.DataFrame(mx_similar_question_max, columns=arr_columns)
df_similar_max
# ----
# MINの場合
arr_columns = ['QQS_MIN1','QQS_MIN2','QQS_MIN3','QQS_MIN4','QQS_MIN5']
df_similar_min = pd.DataFrame(mx_similar_question_min, columns=arr_columns)
df_similar_min
D先生(設定年齢65歳) : “う~ん・・・、前回とずいぶんと評価法が変わったなあ・・・。そもそも、プログラミング用語でいう「ネスティング」が複雑になった。Step3の質問候補(22x5)と、Step2の質問(22)を類似度の比較をしていますね。前回は、Step2の質問候補(5)に対して、Step1(1)の質問を合わせていますよね。この差は、なぜ?”
QEU:FOUNDER : “今回は「総当たり法」で比較しないといけなくなったんです。前回の場合には、Step1の質問は明らかに「互いに独立」なので、自明として総当たり評価は不要なのです。一方、今回は、それから深堀された質問なので、質問間に相関が出てくる可能性がでてきました。だから、相関量はスカラーではなくベクトルになります。結果として、評価指標は「MIN-MAX」になるんです。”
D先生(設定年齢65歳) : “いやあ・・・、今回は前回と全然違いますね。”
QEU:FOUNDER : “一旦、ここまでの(質問候補にたいする)OK-NG選択をしましょう。”
##########################################
# Step3の質問候補群に対して、どの程度のOKが得られるのか?(OK-NG)
##########################################
# ----
# PUSH要否のデータフレームを生成する
mx_push = np.array([["NG"] * 5 for i in range(num_df)])
#print(mx_push)
# Step2の質問との相関がないほうが良い
for i in range(num_df):
for j in range(5):
if mx_similar_question_max[i,j] < 0.96 and mx_similar_question_min[i,j] < 0.85:
mx_push[i,j] = "OK"
# -----
print("--- mx_push ---")
print(mx_push)
############################
# Step2の回答のパーセンタイル類似度分析の結果
############################
# ------
# NLPエンジン(SM)を載せる
nlp_sm = spacy.load("en_core_web_sm")
# ----
# 今回のプロジェクトの進め方(コンセプト): 4文以上(文を細かく切ること)
#ロシア国とウクライナ国について知りたい。ロシア民族とウクライナ民族の差異について歴史の観点などから分析したい。2022年に始まったロシアとウクライナ間の戦争について論じたい。この戦争に欧米諸国とユダヤ民族がどのようにかかわっているかを知りたい。この戦争が世界政治と経済に与える影響を分析したい。
str_concept = "I want to know about Russia and Ukraine. I would like to analyze the differences be-tween the Russian and Ukrainian ethnic groups from a historical perspective. I would like to discuss the war between Russia and Ukraine that began in 2022. I would like to know how Western countries and the Jewish people are involved in this war. I would like to analyze the impact of this war on world politics and the economy."
# ---
# 今回のプロジェクトのゴール: 6文以上(文を細かく切ること)
#ロシアとウクライナの二国は歴史と文化、経済を大きく共有しており、もともとは戦争する積極的な理由がない。さらには、両国には天然資源、GDPと軍事力の差が圧倒的であり、ウクライナには勝ち目はありません。NATOや西側諸国がウクライナに支援をしているために戦争は続いているが、今後も支援が継続されるかは疑わしい。この戦争は、世界経済に大きな悪影響を及ぼしています。中東諸国やBRICS諸国の中には、この戦争を契機に欧米に対する不信感が増加しているかもしれません。ウクライナは停戦を推進するべきです。ウクライナのゼレンスキー大統領の「抵抗する」という発言に対して、抗戦すればするほど自国民の犠牲が増えると警告します。愛国心は自国民を守る賢明な戦略であるべきです。ウクライナの未来の発展が戦争によって奪われ、犠牲と損害、心の痛みを背負うのはウクライナ国民です。
str_goal = "Russia and Ukraine share much in common in history, culture, and economy, and origi-nally there was no positive reason for war. Furthermore, the two countries have overwhelming dif-ferences in natural resources, GDP, and military power, and Ukraine has no chance of winning. The war continues because NATO and Western countries are providing support to Ukraine, but it is doubtful that this will continue. This war has had a huge negative impact on the world economy. Some Middle Eastern and BRICS countries may be experiencing increased distrust of the West as a result of this war. Ukraine should push for a ceasefire. In response to President Zelenskiy's statement that he will 'resist,' he warns that the more he resists, the more his own people will suffer. Patriotism should be a wise strategy to protect one's own people. Ukraine's future development was taken away by the war, and it is the Ukrainian people who bear the burden of sacrifice, damage, and heartache."
# ---
# 分割したいパラグラフ
# パラグラフを文書オブジェクトに変換
goal_doc = nlp_sm(str_goal)
# 文の単位に分割する
str_goal_sentences = [sent.text for sent in goal_doc.sents]
print("--- str_goal_sentences ---")
print(str_goal_sentences)
# ---
# 文の数(GOAL)
num_sentences = len(str_goal_sentences)
#print(num_sentences)
# ------
# パーセンタイル達成度分析: Answer Step1とGOALを比較する
# ------
# パーセンタイルマトリックスの生成
mx_percentile = np.zeros([num_df,5])
# ------
for k in range(num_df):
answer_paragraph = arr_AStep2[k]
print(answer_paragraph)
# パラグラフを文書オブジェクトに変換
answer_doc = nlp_sm(answer_paragraph)
# 文の単位に分割する
arr_answer_sentences = [sent.text for sent in answer_doc.sents]
print("--- arr_answer_sentences ---")
print(arr_answer_sentences)
# ---
# 文の数(ANSWER)
num_answer = len(arr_answer_sentences)
print(num_answer)
# ---
# 類似度マトリックス
mx_similar_goal = np.zeros([num_sentences, num_answer])
#print(mx_similar_goal)
# ---
# マトリックス計算
for i in range(num_sentences):
str_goal_sentence = str_goal_sentences[i]
print(f"i:{i}, string:{str_goal_sentence}")
token1 = nlp_md(str_goal_sentence)
# ---
for j in range(num_answer):
str_answer = arr_answer_sentences[j]
print(f"i:{i}, j:{j}, string:{str_answer}")
token2 = nlp_md(str_answer)
# -----
# 類似度の出力
similarity = token1.similarity(token2)
mx_similar_goal[i,j] = round(similarity,5)
print(f"i:{i}, j:{j}, similarity:{similarity}")
# ---
#print(f"--- k:{k} ---")
#print(mx_similar_goal)
# ---
arr_similar_goal = mx_similar_goal.flatten()
if len(arr_similar_goal) > 10:
val_p100 = np.percentile(arr_similar_goal, 100)
val_p90 = np.percentile(arr_similar_goal, 90)
val_p80 = np.percentile(arr_similar_goal, 80)
val_p70 = np.percentile(arr_similar_goal, 70)
val_p60 = np.percentile(arr_similar_goal, 60)
else:
val_p100 = np.max(arr_similar_goal)
val_p90 = 0
val_p80 = 0
val_p70 = 0
val_p60 = 0
# ---
# パーセンタイルマトリックスの生成
mx_percentile[k,:] = [val_p100, val_p90, val_p80, val_p70, val_p60]
print(k, val_p100, val_p90, val_p80, val_p70, val_p60)
# -----
#print("--- mx_percentile ---")
#print(mx_percentile)
# ----
# パーセンタイル達成度のデータフレームを生成する
arr_columns = ['PCT1','PCT2','PCT3','PCT4','PCT5']
df_percentile = pd.DataFrame(mx_percentile, columns=arr_columns)
df_percentile
###########################
# [パーセンタイル]有用と思われる質問を選択する(OK-NG)
###########################
# ----
for i in range(num_df):
for j in range(5):
if mx_percentile[i,3] > 0.8 and mx_push[i,j] == "OK":
mx_push[i,j] = "OK"
else:
mx_push[i,j] = "NG"
# ----
arr_columns = ['PSH1','PSH2','PSH3','PSH4','PSH5']
df_push = pd.DataFrame(np.array(mx_push), columns=arr_columns)
df_push
QEU:FOUNDER : “そして、OK-NG評価の結果は以下の通りです。24件のOKが出てきました。前回よりも、少しだけ増えました。”
D先生: “今回は、質問間のバランスを考えないんですね。上の表のある行がNGだらけになっています。つまり、Step3として全然採用されない質問群がでてきました。”
QEU:FOUNDER : “まあ、せっかくですから、各ステップ毎の個性を付けたいですからね。最後に、SUMMARYのパーセンタイル分析をしましょう。やり方(プログラム)は前回と同じなので、結果だけを出します。ちなみに、評価のベースはGOALコメントです。”
D先生: “(今回は、)少しだけ前回よりパフォーマンスが良くなっているようですが、これは気のせいでしょうか・・・(笑)。”
QEU:FOUNDER : “さあ・・・。若干だが、PCTの値と幅が改善されており、全体としてSUMMARYの構成がGOALの文脈に近づいてきているのかもしれません。ただし、このSUMMARYは我々の本当に必要なアウトプットではないので、この結果は参考程度にしてください。さて、お次はStep3の質問と回答に進みましょう。カンパをお願いします。よろしくお願いします。”
>寄付のお願い(click here for buy me a cup of coffee)<
D先生: “次は、簡易AGIの最後のステップです。”
~ まとめ ~
・・・ 前回のつづきです ・・・
QEU:FOUNDER : “スーパーマン(ユーザー)がふだん使うAIシステムは、GPTなんかよりも「もっと小さなもの」であり、つねに自分の手元においてあります。そして、そのAIは適切にファイン・チューニングされており、自分のAIには個性に応じた出力が出てきます。そのためのチューニング用の学習データを手軽に、大量に手に入れたい・・・。それには、どうすればよいのか?”
C部長 : “ホント、学習データを作るのは大変です。LLMの学習データセットを形成したときには、手作業が多かったので時間がかかりました。”
QEU:FOUNDER : “だから、「簡易AGI」を使いながら、ファイン・チューニングのためのデータを手に入れようという考え方です。”
C部長 : “なるほど・・・。だから、あれだけ多くのアウトプットがでてくるわけですね。そして、「Question to Question」は、その1つですね。”
QEU:FOUNDER : “ディベートにおいて、Question(質問)は回答よりも重要です。議論の質は質問で決まるんですよ。ここで、前回の質問と回答をレビューしましょう。”
(質問群)
- Q1:ロシアとウクライナの間で進行中の紛争が世界の政治と経済に長期的にどのような影響を与える可能性があるのか、そして国際協力はこれらの影響をどのように軽減できるのでしょうか?
- Q2:NATOの拡大はロシアとウクライナの間の緊張の高まりにどのような役割を果たしたと思いますか?また、この問題にはどのように対処できるでしょうか?
- Q3:ロシアとウクライナの民族の歴史的および文化的な違いは、現在進行中の紛争にどのように寄与しているのでしょうか?また、共通の歴史から何が学べるのでしょうか?
- Q4:西側諸国がウクライナに提供した具体的な経済・軍事援助パッケージは何ですか?また、それらは紛争にどのような影響を与えましたか?
- Q5:ウクライナのユダヤ人コミュニティの安全と安心を確保するためにはどのような措置が取れるのか、また、平和と和解の取り組みへのユダヤ人コミュニティの関与をどのように支援できるのか。
(集約された回答)
--- NO:0(Q1~Q5への回答の集約) ---
ロシアとウクライナの間で進行中の紛争は、世界の政治と経済に広範囲にわたる影響を及ぼしています。潜在的な長期的な影響は多面的で相互に関連しており、国際関係、貿易、安全保障のさまざまな側面に影響を及ぼします。この紛争は、ロシアと西側諸国間の不信感と敵意の高まりにつながり、新たな冷戦時代の引き金となる可能性があります。また、東ヨーロッパを不安定にし、NATO の信頼性を脅かし、特にエネルギー部門で世界貿易を混乱させる可能性があります。これらの影響を軽減するには、国際協力が不可欠です。外交努力、経済協力、多国間機関の強化は、緊張を緩和し、平和的解決を促進し、経済の安定を促進するのに役立ちます。欧州安全保障協力機構 (OSCE) などの国際機関の支援を受けて、ロシアとウクライナの外交対話を奨励することは、緊張を緩和し、平和的解決を見つけるのに役立ちます。NATO の拡大は、ロシアとウクライナの緊張を高める上で重要な役割を果たしてきました。この問題に対処するには、対話、外交、信頼醸成措置の組み合わせが必要です。ウクライナは、オーストリアやスウェーデンのように中立を宣言し、NATOの拡大に対するロシアの懸念を和らげることができる。NATOは、拡大がロシアの安全を脅かすことを目的としたものではないことをロシアに保証することができる。ロシアとウクライナの民族間の歴史的、文化的違いが、進行中の紛争の一因となっている。この紛争の複雑さを理解するには、両方の民族の歴史的、文化的ニュアンスを掘り下げることが不可欠である。お互いの文化的、歴史的違いを認め、尊重することで、両国はより平和で協力的な関係に向けて取り組むことができる。西側諸国は、2014年にロシアの支援を受けた分離主義者との紛争が勃発して以来、ウクライナに多額の経済援助と軍事援助を提供してきた。この援助の主な目的は、ウクライナの主権、領土保全、経済的安定を支援することであった。軍事援助の提供により、ウクライナの軍事力が強化され、ロシアの侵略に対する自衛力が向上した。ウクライナのユダヤ人コミュニティの安全と安心を確保するため、彼らの特定のニーズや懸念に対処するための専門部署またはタスクフォースを設立する措置を講じることができます。コミュニティの関与、セキュリティインフラ、教育、および意識向上キャンペーンは、反ユダヤ主義と闘い、寛容と理解を促進するのに役立ちます。国際協力と能力構築も、ウクライナのユダヤ人コミュニティを支援することができます。結論として、ロシアとウクライナの間で進行中の紛争は、世界の政治と経済に重大な影響を及ぼします。国際協力、外交努力、および経済協力は、これらの影響を軽減するのに役立ちます。ロシアとウクライナの民族グループ間の歴史的および文化的違いに対処し、ウクライナのユダヤ人コミュニティの安全と安心を確保することは、より平和で協力的な関係に向けた重要なステップです。
QEU:FOUNDER : “この質問を見ればわかるでしょ?質問に全然「キレ」がありません。・・・たしか、先日のMITの研究によると、LLMモデルの出力は現実の人の回答の平均値に近いらしいです。Jeremy Howardによると、LLMの出力とは言語データの「補間」ですからね。納得がいきます。”
C部長 : “つまり、LLMでは出力された文脈が「一般論」になりがち・・・。”
QEU:FOUNDER : “つまり、逆に言うと、「よりシャープな出力にするには工夫がいる」んです。C先生はPrompt Engineering(PE)で工夫をしたいですか?“
C部長 : “PEを工夫するんだったら、素直に質問に工夫しますよ(笑)!”
QEU:FOUNDER : “我々は、Reasoningを使ったファイン・チューニングで対応したいとおもっているんです。そして、もしもBONSAI-AIの質問能力にキレがあるのならば・・・?”
C部長 : “GPT-Xにインプットすれば、スゴイ回答が期待できますね!!個人の能力と社会がスパイラルアップできます。”
QEU:FOUNDER : “つまり、現代のボトルネックは「Question」なんです。”
コメント
コメントを投稿