ランサーズでは自己学習の場として毎朝1時間程のもくもく会を開催しています。
もくもく会を開催しようと思ったきっかけは、こちらで紹介しています。
以下は今週の取り組みになります。
今週のもくもく会
谷
- GraphQLサーバ + ReactでCRUD実装する
- https://zenn.dev/highgrenade/scraps/169d3aa591892f
- GraphQLサーバのアーキテクチャやherokuとの戦いに明け暮れていたせいで、肝心のGraphQLのリゾルバとtypeDefsの扱い方を忘れていた
- GraphQLのリゾルバとtypeDefsの扱い方を復習しつつ、RESTで言うところのGET部分は整理出来た
- QueryやMutationはtypeキーワードで定義するが、引数的スキーマはinputキーワードを使うことを学んだ
- Mutationを整えるのに時間がかかってる
- 結局、GraphQL と Prisma(DB)間の接続は今週の3時間じゃ無理だった。
- やっぱりもうちょい触りたい。Next.js 13.4の調査はもう少し先・・・
太田
磯野
- Laravel Weekly Update書いた
- 初めてのデータ出し(LJP DB)
- 高橋さんにDBのテーブルツアーをしてもらって、色々衝撃だった
- 【Vue.js】DevとPreで挙動が違う箇所の調査
- なぜ挙動が異なるのかはわからなかった
- keyをコンポーネントに持たせることで、解決
- Laravelアップグレード対応
- とりあえず8の最新にはした
- Larastan Level3が終わったら、9の最新にバージョンアップする
- Laravel-mix → viteの移行もやらないと。。
勇魚
- [読書]単体テストの考え方/使い方 を社内notion書いた
- イベントソーシングを実現するためのアーキテクチャについてリサーチした
- 資料にまとめ中
砂田
- やりたいこと
- StableDiffusionとLoRAでランサーズくん画像生成AIのボット化して色んなプロンプトを試す
- 進捗
- 参考:https://gamehell.net/2023/04/25/stablediffusionfromnodejs/
- デプロイ先はCPUのみとGPUで速度と料金で迷っている
- まずはローカルでNodejsからStableDiffusion Web UIを呼び出して、Herokuにデプロイ目指す
- Nodejs実装力がなくて勉強中
- SD起動しているはずなのにAPIがnot found…
- コマンドライン引数を見直したら動き出した! ←今ここ
- 来週
- 引き続きボットのAPI作ります
岡田
- Prompt Engineering Guide(日本語版)を読む(英語版)
- TechniquesChain-of-Thought:思考させてから問題を解かせる知識生成プロンプティング:知識を生成させてから問題を解かせる自動プロンプトエンジニア:プロンプト生成→生成されたプロンプトにより求める答えが出力されているか予測→最も求める答えを出力しやすいプロンプトを採用→適切なプロンプトを生成(これにより、論文中の実験ではLet’s think step by step.よりLet’s work this out in a step by step way to be sure we have the right answer.の方が性能が高いことがわかった)
- Applications
- Graduate Job Classification Case Study新卒に相応しい仕事か否かの2値分類
- GPT-3.5はsotaの分類器DeBERTaV3と同等以上の性能を示した
- 専門知識が不要なタスクではfew-shot CoTよりzero-shot CoTの方が性能が高かった
- 適当なプロンプトのF1スコアが65.6、工夫したプロンプトのF1スコアが91.7と、プロンプトによって25以上の差が出た
プロンプトの知見
- 役割・タスクをシステムのクエリにまとめる、ユーザのクエリにまとめる < システムのクエリに役割・ユーザのクエリにタスクと分ける 性能↑
- 大事なことは繰り返す 性能↑
- 出力形式を指定する 性能↓
逸話
- モデルに(人間の)名前を付けて呼ぶだけでF1スコアが0.6↑
system prompt = "You are Frederick, an AI expert in career advice. [...]" [...] first assistant response = "Yes, I understand. I am Frederick, and I will analyse your job posting."
赤字が追加された名前
- ポジティブなことをフィードバックを与える 性能↑
最終形態
system = [...], // システムのクエリ=役割 user 1 = [...], // ユーザのクエリ=タスク assistant 1 = "Yes, I understand. I am Frederick, and I will analyse your job posting.", user 2 = """Great! Let's begin then :). // ポジティブなフィードバック For the given job: {job_posting} --------- Is this job (A) a job fit for a recent graduate, or (B) a job requiring more professional experience. Answer: Let's think step by step to reach the right conclusion"""
※ // のコメントアウトは追記したものでプロンプトではない
- Graduate Job Classification Case Study新卒に相応しい仕事か否かの2値分類
- Models
- Risks & Misuses
- 敵対的プロンプトの検知も自分でやってもらおう
- バイアスfew-shotのサンプルは順序や種類を考えないとバイアスがかかる
余談
- 機械学習を使ったサービスに対する攻撃
2.3 モデル抽出 今日では、画像認識や機械翻訳など機械学習を使った便利なサービスがクラウドで提供されている。このとき訓練済みモデルはクラウド上で稼働しており、利用にはユーザ登録や料金の支払い、利用回数制限などの制約が生じる。この時、もしもクラウド上のモデルを手元に複製し、制約なく自由に使えるとしたらどうだろう? モデル抽出(model extraction)はこのような状況でモデルの複製を作る攻撃である。サービス提供者側から見ると、訓練済みモデルには訓練データの収集や訓練フェーズの実施に時間や金銭、ノウハウといったコストがかかっているので、複製により価値が奪われることは脅威である。また第三者が訓練済みモデルを入手できるという想定外のことが起きると、他にもセキュリティ上のリスクにつながる。
(機械学習セキュリティ研究のフロンティアより引用)
For more prompt engineering ideas, read the OpenAI Cookbook guide on techniques to improve reliability.
https://platform.openai.com/docs/guides/chat/instructing-chat-modelsより引用
- 次したいこと
- LangChainを触ってみる
- オープンソースのLLMを触ってみる(無料版Google Colabで動くか)
今週の報告は以上です。
週毎に取り組みを掲載していきますので、ご期待下さいませ。