怠惰な研究者が現代社会を生き抜くためのChatGPT活用術
by Balshark

怠惰な研究者代表の筆者です。
11月はOpenAI Dev Dayから始まり、サム・アルトマンCEOの退任劇から社員、Microsoftまで登場する大騒ぎ、結果サム・アルトマン氏がCEOに復帰するという、さながら西海岸のリンゴ会社の劇場版を見せられたような気分でした。
まるで宗教戦争や聖戦のようにAI推進派と反AI派が昼夜問わずSNS・リアルで論争を繰り広げる中、怠惰な私は少しずつ自分の仕事をAIに献上している毎日です。というのも、怠惰な割にやりたいことはたくさんあるという業突く張りな性格なので、AIにやってもらえる作業があるならば恥も外聞もなく頭を下げているという次第です。そんな折、編集長の松尾氏から”どのようにGPT(ないしその周辺サービス)を活用しているのか”を聞かれたので、このことについて少し紹介したいと思います。
GPTにお祈りすること
あらかじめ経歴を申し上げておきますと、筆者は某企業の研究員、テック系スタートアップの開発担当兼チーフエンジニアをしています。これらの業務の中で筆者が最も苦手とするのは報告書などの文書作成と煮詰まった会議です。これは大学で研究員をしていた頃から一定以上発生する儀式のため避けて通れないようです。
報告書などの文書作成
もともと論文を書くこと自体を渋っていた筆者の性格のため、会社内では報告書の海で溺れています。ですが最近はChatGPTにお願いしています。ここで報告書作成のプロセスを整理すると
- 課題の定義
- 課題解決のための目的と数値目標の設定
- 数値目標達成のための方法の検討
- 方法の実施結果とこれに関する考察
- 必要であれば直前の2つの項目を再度繰り返す
- 数値目標の達成確認
- 課題に対して目的と目標が達成できたかを明記
のようにざっくり分けることができます。本当ならこの箇条書きをそのまま提出したいところですが、上様より愛ある叱咤激励が飛んできそうなので「これらの箇条書きを文章として意味が通るように繋げ、可能な限り言葉の重複がなく、〇〇字程度で報告書として書く」必要があります。
ここで、直前に書いた箇条書きと括弧の文の構造をプロンプトとしてそのまま利用します。以下に一例を示します。
#プロンプト
サム・アルトマン氏をOpenAIのCEOに復帰させるための戦略とその実行結果に関する報告書を作成します。以下の箇条書きの内容をもとに報告書を作成してください。ただし、報告書は全て文章で書き、箇条書きは使用しないでください。なおですます口調を避け、であるなどで言い切ってください。また、曖昧さを含む文章については「〜の可能性がある」、「〜と考えられる」などで濁してください。加えて、語彙の重複は避けてください。報告書は1000文字でお願いします。
– 課題:サム・アルトマン氏のOpenAIのCEOへの復帰
– 課題解決に向けた目的:サム・アルトマン氏のOpenAIのCEOへの復帰を促すために世論を味方につける
– 課題解決に向けた目標:X(旧Twitter)でサム・アルトマン氏のOpenAIのCEOへの復帰という内容に関する投稿について一定数以上のインプレッション数を獲得する
– 課題達成の過程1:Xでサム・アルトマン氏のOpenAIのCEOへの復帰という内容に関する投稿を実施したが、インプレッション数は目標数値に到達せず
– 課題達成の過程2:過程1の結果を受け個人だけでなく集団での投稿によりインプレッション数を得ることに変更。そのため社内で本件に関する有志を100人以上集める。
– 課題達成の過程3:過程2の集団での発信を明示するため、発信内容は短文で内容も統一。社員が団結している内容をアピール
– 課題達成の過程4:インプレッション数が目標に到達するとともにMicrosoftなどもサム・アルトマン氏のCEO復帰について言及、最終的にCEO復帰となる。
#生成結果
本報告書では、サム・アルトマン氏のOpenAIのCEOへの復帰を目的とした戦略の実行過程とその結果について詳細に分析し、考察する。 課題の設定として、サム・アルトマン氏がOpenAIのCEOに復帰することが挙げられる。この目標達成のためには、世論を味方につけることが不可欠であると認識された。目標としては、X(旧Twitter)でのサム・アルトマン氏に関する投稿が一定のインプレッション数を獲得することが設定された。
初期の取り組みでは、Xにおいてサム・アルトマン氏のCEO復帰に関する投稿を行ったが、期待されたインプレッション数には届かなかった。この初期の結果は、単独の投稿では限られた影響力しか持たないことを示し、より効果的な戦略の必要性を浮き彫りにした。この点から、集団でのアプローチが必要であるとの結論に至った。 そこで、社内で本件に関する有志を募集し、100人以上の社員が集まった。集団での取り組みに切り替えたことで、発信内容は短文で統一され、社員が団結していることを強調する方針が採用された。この統一されたメッセージ戦略は、社内の協力と組織力の重要性を強調するとともに、外部への影響力を高める効果をもたらした。 この集団による発信戦略の結果、インプレッション数は目標値に到達した。さらに、この動きは外部の大手企業にも影響を及ぼし、Microsoftなどがサム・アルトマン氏のCEO復帰に言及するに至った。これらの他社からの反応は、適切なメディア戦略が広範な影響を持つことを示し、戦略の有効性を裏付けるものである。 最終的に、これらの戦略が功を奏し、サム・アルトマン氏のCEO復帰が実現した。
この成功は、社内の協力と組織的な取り組み、外部の関係者を巻き込むメディア戦略の重要性を示すものである。特に、インプレッション数の増加と外部からの言及は、プロジェクトの成功において重要な要素であることが明らかになった。今後、同様の目的を持つプロジェクトにおいても、この事例は重要な参考となる。組織内の団結力と戦略的な外部コミュニケーションが、目標達成における鍵であることが、この事例を通じて明らかになったのである。
今回の場合プロンプトを丁寧に記載しました。これによりプロンプトの最終文で報告書の字数を変えた場合でも文章が大きく崩れることなく、考察まで生成させることができました。上記プロンプトに加え私がよく使う表現としては「厳格な言葉使いをしてください」です。これはみなさんの会社の風土に合わせてください。
履歴書を書く
話は変わってとあるエージェントを経由して海外企業から声がかかった際「とりあえずResume(履歴書)を送ってくれ」と言われたので、こちらもChatGPTで対応しました。送るだけならタダですから。以前某アメリカ企業のエンジニアの知り合いに英語でのResumeをレビューしてもらった際に教えてもらった書き方を参考に細かく条件定義しながら以下のように生成を進めました。以下は履歴書に関する一部の内容です。
#プロンプト
履歴書を作成したいと思います。今回履歴書を提出するのは英語を第一言語とする企業です。箇条書きではなく文章で、会社名や場所、いつからなどの情報は省いてください。また`I`から始まる文章は極力避けてください。Resumeに書くように動詞スタートの文章が良いと思います。
…
Research fellow時代のサマリーを英語で書きます。
Research fellow時代はスーパーコンピューター富岳を用いた圧縮機の流体ダイナミクスの数値シミュレーションやデータ同化技術を使った高精度予測技術の開発とこれらのコード作成をしていました。
#生成結果
…
Here’s a summary of your experience as a Research Fellow, suitable for an English-language resume:
As a Research Fellow, led groundbreaking work in fluid dynamics simulations of compressors using the supercomputer Fugaku. Developed high-precision forecasting techniques employing data assimilation technologies. This role involved extensive coding and development of complex simulation models, positioning these projects at the forefront of computational research in fluid dynamics.
This summary encapsulates your key responsibilities and achievements during your tenure as a Research Fellow, highlighting your expertise in computational fluid dynamics and high-performance computing.
実際に生成結果として利用したのは生成結果の中段部分です。ただし書き出しは「Led groundbreaking…」と修正しました。具体的にResumeと指定するとどうやらポジティブな言葉を採用してくれるようです。内容についても虚偽がなく、消極的に書いている内容をしっかりとアピールできていると思います。
煮詰まった会議のアシスト
最近最も役に立っていると感じるのは、煮詰まった会議における解決策や議論の起点となる情報の提示です。特に研究や開発の方向性を決める会議では議論内容が何某かの情報を基に進むのが常ですが、必ずしも情報が可視化された状態で会議の場に揃っているわけでもなく、「誰もわからない」状態に陥れば議論自体が発散します。そこで会議の裏で細かい研究内容に関する定義や手法、データの形式等をプロンプトとして起こし、時には生成されたアルゴリズム自体を会議の場に提示します。以下はとある会議にて、分析結果そのものを機械学習的に得ることができるのかについての議論の過程で生成したものを簡易的に書いたものです。
#プロンプト
〇〇という実験データに対して、##分析を行った結果がPythonのnumpy.ndarray(n,m)(n種類のm長のデータ)として得られているとします。この時〇〇と同時に△△というデータが得られているとして、△△を入力、〇〇を出力とするようなモデルを機械学習(Neural Network)により構築してください。データは以下のとおりです。
data_y: numpy.ndarray(n, m)(n種類のm長のデータ)
data_x: numpy.ndarray(n, a, b)(n種類のa項目あるデータがb長分)
#生成結果
提供されたデータの構造に基づいて、##分析の結果を予測するための教師あり学習モデルをPythonで構築することを考えます。ここでは、data_yをターゲット(予測したい出力)、data_xを特徴量(入力データ)として扱います。
————————————————————-
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from sklearn.model_selection import train_test_split
# 特徴量とターゲットに分ける
X = data_x # 特徴量
y = data_y # ターゲット(レインフローの結果)
# トレーニングセットとテストセットに分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# モデルの構築
model = keras.Sequential([
layers.Flatten(input_shape=(a, b)),
…, # 中間層(本書ではここの内容は濁しますが一般的な機械学習の中間層のコードが生成されていました。)
layers.Dense(m) # 出力層のノード数は mとする])
# モデルのコンパイル
model.compile(optimizer=’adam’, loss=’mse’) # 回帰問題のため、損失関数は平均二乗誤差(mse)を使用
# モデルのトレーニング
model.fit(X_train, y_train, epochs=10, batch_size=32, validation_split=0.2)
以上のような生成結果を会議に提示し少しずつ内容に修正を加えながら方向性を決めています。このようなやり方はコード生成に限った話ではなく、スタートアップでの技術営業の会議ではサービスの具体的な設計や市場データを入力しつつサービスの技術レベルごとの金額設定を生成しセールス・経営チームに提案するなどを行っています。重要なのは専門性が高くなるにつれ、生成される内容にもっともらしいウソ(Hallucination)が含まれていないかを判断できる専門知識を使用者が備えていることだと思います。
おわりに
AI推進派と反AI派の論争は当分止むことはないかもしれませんが、怠惰な筆者はAIに筆者の苦手なことを献上しながらやりたいことに没頭しています。
関連
怠惰な研究者代表の筆者です。 11月はOpenAI Dev …
