![見出し画像](https://assets.st-note.com/production/uploads/images/100605741/rectangle_large_type_2_9f52f46969074af536c296c3f6189b63.png?width=1200)
知識と経験の加速装置としての大規模言語モデル、GPT-4での思索の記録
今日もGPT-4でブログを書いています。ほんとにサクサク書けるので楽しい…LayerXでも社内あちこちで大規模言語モデル活用ハッカソンやプロジェクトが立ち上がっています。
本日のお題ですが先程、友人のTweetを元にISUCONの問題(具体的にはisucon11-qualify)について改善ができるのかなど10分ほど触ってみたところから、考え事をしていた記録です。
ISUCONの問題をGPT-4と一緒に解き始めたのだけどものの10分で基本的な改善はコードの提案やDBスキーマのマイグレーションコードまで色々作ってくれて、予想はしていたのだけど驚愕している。もちろん、見た感じこれだけで勝てるわけじゃないけど圧倒的ショートカット。しかもコードが読みやすい…
— 松本 勇気 | LayerXはSaaS+Fintechの会社です (@y_matsuwitter) March 18, 2023
言いたいこと
GPT-4など大規模言語モデル(LLM)はコーディング試験やプログラミングコンテストのような問題だけでなく、いくつかのミドルウェアの集合体をチューニングするISUCONであってもワークする可能性がある。
複雑な問題になるほど、チューニングに対象への知識が重要になる。どのような制約を与えるかでLLMのパフォーマンスは変わる。(Chain of thoughtとかもその一つと考えられる)
大規模言語モデルは、全ての人に知識を不要としパフォーマンスを上げる側面もあるが、むしろ知識ある人のパフォーマンスを引き上げる力の方が大きく、知識と経験の差を加速させる装置なのかもしれない。
GPT-4とISUCON
大規模言語モデルのGPT-4が登場して以来、様々な分野でその力を発揮しています。今回はプログラミングコンテスト、特にISUCONにおいてGPT-4を活用して問題解決に取り組んだ記録を紹介します。驚くべきことに、GPT-4と共同作業を開始してからわずか10分だけでも様々な基本的な改善が提案され、コードやデータベーススキーマのマイグレーションまで作成されました。この結果は予想されていたものの、その効果は驚愕的でした。
以下はその一例です。本Promptでは予めデータベースのスキーマを[database]と言う名称で事前に与えています。getIsuListの実装が気になる人はこちらから。
[database]を使用した以下のソースコードに対してGoおよびスキーマの変更双方で提案をください。
func getIsuList(c echo.Context) error {
//省略...
}
以下の提案は、パフォーマンスを向上させるためにGoのコードとスキーマの変更を行うものです。
# スキーマの変更
isuテーブルにlast_condition_idカラムを追加して、最後のIsuConditionを追跡します。このカラムには、最後のIsuConditionのIDが格納されます。
```
ALTER TABLE `isu` ADD COLUMN `last_condition_id` BIGINT NULL;
```
# Goのコード変更
SELECTクエリの変更
最後のIsuConditionを効率的に取得するために、getIsuList関数内のクエリを以下のように変更します。
```
err = tx.Select(
&isuList,
"SELECT i.*, c.* FROM `isu` i LEFT JOIN `isu_condition` c ON i.last_condition_id = c.id WHERE `jia_user_id` = ? ORDER BY `id` DESC",
jiaUserID)
```
このクエリは、isuテーブルとisu_conditionテーブルを結合し、一度にIsuと最後のIsuConditionを取得します。
# クエリ結果の処理
最後のIsuConditionが取得された場合、その情報も取得されます。そのため、isu_conditionテーブルからの個別のクエリは不要です。代わりに、結果セットから最後のIsuConditionの情報を取得します。
```
for _, isu := range isuList {
var formattedCondition *GetIsuConditionResponse
if isu.LastConditionID.Valid {
conditionLevel, err := calculateConditionLevel(isu.Condition)
if err != nil {
c.Logger().Error(err)
return c.NoContent(http.StatusInternalServerError)
}
formattedCondition = &GetIsuConditionResponse{
JIAIsuUUID: isu.JIAIsuUUID,
IsuName: isu.Name,
Timestamp: isu.Timestamp.Unix(),
IsSitting: isu.IsSitting,
Condition: isu.Condition,
ConditionLevel: conditionLevel,
Message: isu.Message,
}
}
res := GetIsuListResponse{
ID: isu.ID,
JIAIsuUUID: isu.JIAIsuUUID,
Name: isu.Name,
Character: isu.Character,
LatestIsuCondition: formattedCondition}
responseList = append(responseList, res)
}
```
これにより、Isuと最後のIsuConditionを一度に効率的に取得できるため、パフォーマンスが向上します。ただし、この変更を適用するには、IsuとIsuConditionの間の関係を正しく維持するためのアプリケーションロジックも更新する必要があります(例:IsuConditionが追加または更新されるたびに、関連するIsuのlast_condition_idを更新する)。
更に追加した質問(last_condition_idを既存データに付与するSQL)
[database]にすでに存在するisuとisuconditionに対してlast_condition_idを紐付けるマイグレーション用SQLを書いてください。
以下のマイグレーション用SQLは、既存のisuとisu_conditionレコードに対してlast_condition_idを紐付けます。
```
-- last_conditionテーブルを作成して、各isuに対する最新のisu_conditionを取得
CREATE TEMPORARY TABLE last_condition AS
SELECT
ic.jia_isu_uuid,
MAX(ic.id) AS last_condition_id
FROM
isu_condition ic
JOIN
isu i ON i.jia_isu_uuid = ic.jia_isu_uuid
GROUP BY
ic.jia_isu_uuid;
-- last_condition_idを更新して、isuテーブルに最新のisu_conditionのIDを追加
UPDATE
isu i
JOIN
last_condition lc ON i.jia_isu_uuid = lc.jia_isu_uuid
SET
i.last_condition_id = lc.last_condition_id;
-- last_conditionテーブルを削除
DROP TEMPORARY TABLE last_condition;
```
このマイグレーション用SQLは、まず一時テーブルlast_conditionを作成し、各isuの最新のisu_conditionのIDを取得します。次に、isuテーブルのlast_condition_idカラムを更新して、最新のisu_conditionのIDを追加します。最後に、一時テーブルlast_conditionを削除します。
ISUCONだけでなく、プログラミングコンテストにおいても、GPT-4は非常に有益なツールとなります。実際にISUCONの問題に取り組んだ際には、直接的な答えが出てくるものが多く、試しに問題文をそのまま入れてみましたが解が返ってきました。しかし、その一方で、多くの問題に対してGPT-4が提供できる解答は、必ずしも最適とは限りません。そのため、問題に対する制約を明確に指定することで、より適切な解答を得ることができるでしょう。たとえば、特定のアルゴリズムやデータ構造を使用することを求める場合や、計算量やメモリ使用量に制約を設ける場合などです。
しかし、GPT-4の性能を最大限に引き出すためには、プロンプトの与え方に改善の余地があります。プロンプトとは、GPT-4に問いかける際に入力するテキストのことで、これを工夫することで、より適切な解答を得られる可能性が高まります。例えば、ソースコードを一気に渡す方法や注釈を付ける方法、改善の制約を与える方法などが考えられます。これらの方法を試行錯誤しながら、GPT-4の性能を最大限に活用することが求められます。
例として、ISUCONの問題であればベンチマーカーが与える制約を大規模言語モデルに理解できるようStep by Stepで分解したり、プログラミングコンテストであれば利用したい手法を指定するなどが考えられるでしょう。
なんにせよ、GPT-4をISUCONやプログラミングコンテストの問題解決に活用することは、従来の手法に比べて圧倒的なショートカットを実現できるだろうという感覚を得ました。もちろんこれだけで優勝できるわけではありません。結局は良き解とは何かを理解できる知識や経験が必要なのです。
知識と経験の加速装置としてのGPT-4
ところで、GPT-4の登場により、知識がない人でもある程度の生産性を上げることができるようになりました。これは、GPT-4が人間の知識や経験を持たない状態から、自然言語処理を通じて適切な回答や提案を行う能力を持っているためです。しかし、一方で知識や経験がある人にとって、GPT-4はその力をより加速させる装置となります。
GPT-4は知識を不要にするのではなく、知識を持つことでより良い制約を作り、より適切な解を得ることができるという点がより重要と感じています。これはつまり、知識や経験がある人がGPT-4を利用することで、その能力を最大限に発揮できるということを意味しています。
たとえば、プログラミングの知識が豊富な人は、GPT-4に与えるプロンプトを工夫することで、より高度なアルゴリズムやデータ構造を提案させることができます。これにより、問題解決の速度や効率を大幅に向上させることが可能となります。
また、知識や経験が豊富な人は、GPT-4が提案する解答や改善策に対して、より的確な評価を行うことができます。これにより、GPT-4が提供する解答を適切に取捨選択し、問題解決において最適な道筋を見つけ出すことが容易になります。
さらに、知識や経験が豊富な人は、GPT-4を活用することで、新たなアイデアや発想に触れる機会が増えます。これにより、自身の知識や経験に基づいて、GPT-4が提案したアイデアをさらに発展させ、革新的な解決策を生み出すことが可能となります。
これらの点から考えると、GPT-4は知識や経験がある人にとって、その力を加速させる装置となります。しかし、これは同時に、知識や経験の差をより顕著にする効果があるとも言えます。知識のない人がGPT-4を利用しても、知識や経験が豊富な人に比べて効果的な回答を得ることが難しくなるためです。
知識活用の改善と大規模知識ソースの必要性
GPT-4は、知識のない人でもある程度の生産性を上げることができるツールであり、知識や経験がある人にとっては力を加速させる装置となります。しかし、未知の問題を解かせるためには、知識獲得のプロセスをさらに洗練させる必要があります。具体的には、必要な知識を獲得するステップ、その知識を実際に獲得するステップ、そして実際に解を出すステップなどに分解することで、知識のない人に未知の問題を解かせるタスクも実現できるかもしれません。
このようなタスクを実現するためには、大規模な知識データベースが必要となります。知識データベースとは、特定の分野に関する情報や知識を体系的に収集・整理したデータベースのことで、これを利用することで、GPT-4が未知の問題に対しても適切な解答を提供できるようになります。
現在、大規模なデータを持つGoogleやMicrosoftの立ち位置は非常に強いと言えます。これらの企業は、検索エンジンやデータベースを通じて膨大な情報を収集・管理しており、これを活用することで、GPT-4の性能をさらに向上させることが可能です。
一方で、特定分野に絞った知識データベースと大規模言語モデルの組み合わせも実現できる可能性があります。これにより、特定の分野に関する専門的な知識を持たない人でも、GPT-4を利用して適切な解答を得ることができるようになります。
この場合、データ量だけでなく、データの網羅性や整理が重要となります。つまり、知識データベースに収録される情報が、対象分野の様々な側面を網羅し、整理された形で提供されることが求められます。今後は、Fine-tuningなどの手法を試しながら、GPT-4と知識データベースの組み合わせについての肌感を得ることが重要となるでしょう。
また、知識データベースの構築や整理において、コミュニティや専門家の協力が重要となります。これにより、データベースがより正確で信頼性の高い情報を提供できるようになるだけでなく、新たな知識や情報が迅速にデータベースに反映されることが期待されます。
今後のGPT-4や知識データベースの発展によって、知識や経験を加速させる装置としての大規模言語モデルがさらに進化することはほぼ既定路線なのかもしれません。これにより、未知の問題に対する解決策を見つけることが容易になり、人々の生活や仕事がより豊かで効率的になることが期待できます。一方でその力をより多くの人に提供するために、今後もSaaSやアプリといった形態でわかりやすく伝えていくことの重要性は変わらないのかもしれません。
今後の技術の進歩とともに、どのような変化が起こるのか、とにかく最近は毎日が楽しいです。
ここから先は
![](https://assets.st-note.com/production/uploads/images/57135786/profile_9ba5893a124c736354c347e9ef46b031.png?fit=bounds&format=jpeg&quality=85&width=330)
[法人向け]ソフトウェアと経営について
DX推進やスタートアップを頑張る法人の皆様に向けた「ソフトウェアと経営について」マガジンの法人向けプランです。 法人内で自由にコンテンツを…
![](https://assets.st-note.com/production/uploads/images/57135786/profile_9ba5893a124c736354c347e9ef46b031.png?fit=bounds&format=jpeg&quality=85&width=330)
ソフトウェアと経営について
自社のDX(デジタルトランスフォーメーション)やソフトウェア活用について改善したい、理解したいという方、スタートアップで自社事業をより良く…
この記事が気に入ったらサポートをしてみませんか?