現代機械学習の学習記録 #4

仕事にAIを持ち込むにあたって、パッと思いつくのが

  • 既存のコードを解析して文脈とか専門用語を学習する
  • その学習内容を使って質問に答える
  • 文字情報じゃなくて図で可視化する
    • ここは正確だったりすべての要素を含まなくていい、ヒント・とっかかりとしてエンジニアがコードを読む助けになってくれればいい。

要素を調べてみよう。

コードの解析・学習

会社のコードを学習させるので、まぁいったんBedrockやろなぁ

微調整と事前トレーニングの継続を使用して、独自のデータで Amazon Bedrock のモデルをカスタマイズする | Amazon Web Services ブログ

手動で試してないけど、ソースコードをべた覚えさせるのは、絶対モデルが壊れる気がする・・・質問の解釈と回答はファジーでいいけど、コード内の構造は正確に把握されるべきなきがする。

 

というわけで、コードの構造解析はLanguage Serverにさせるのはどうだろうか

Official page for Language Server Protocol (microsoft.github.io)

よく読むと、どちらかというとLSIFのほうがエディタによらない構造解析に使えそう

Overview (microsoft.github.io)

ぽいきはするけど、この辺は具体的に触る必要がありそう。

 

いちおう、べたにソースコードを覚えさせるようなモデルがあるのか探してみる。

 

ChatGPTに聞いた

ソースコードを学習して質問に答えるAIモデルを作成するためには、いくつかのアプローチが考えられます。以下は、そのための一般的な手順といくつかの既存のサービスやモデルについての提案です。

1. **データの収集と前処理:**
   - 学習データとして、質問とそれに対するソースコードのペアを集めます。オープンソースのプロジェクトやGitHubからデータを収集することが考えられます。
   - ソースコードと質問の関連性を保つために、適切な前処理を行います。例えば、コードのコメントや関数名、変数名を含めることが重要です。

2. **モデルの構築:**
   - 既存の言語モデルを利用することができます。例えば、GPT(Generative Pre-trained Transformer)やBERT(Bidirectional Encoder Representations from Transformers)などがあります。これらのモデルは自然言語処理タスクに強力な性能を発揮します。
   - プログラミング言語に特化したモデルを作成することも検討できます。CodeBERTなどがその例です。

3. **モデルのトレーニング:**
   - 学習データを使ってモデルをトレーニングします。質問を与えられた際に、対応するソースコードを生成するようにモデルを調整します。
   - トレーニングには、大量の計算リソースが必要です。クラウドサービスやGPUを利用することが一般的です。

4. **モデルの評価:**
   - テストデータを使用してモデルを評価し、質問に対する適切なソースコードを生成できるか確認します。
   - BLEUスコアやROUGEスコアなど、自動評価指標を使用することがあります。

5. **展開:**
   - モデルが満足のいく結果を出した場合、実際のサービスに組み込むためにモデルをデプロイします。

既存のサービスやモデルを利用する場合、以下のようなものがあります:

- **OpenAI GPT-3:**
  - GPT-3は広く使われており、多様なタスクに適用できます。APIを利用して質問に答えるAIモデルを構築することが可能です。

- **Hugging Face Transformers:**
  - Hugging Faceが提供しているTransformersライブラリを使用することで、GPTやBERTなどのモデルを利用できます。

- **CodeBERT:**
  - プログラミング言語に特化したモデルで、コード生成タスクにおいて優れたパフォーマンスを発揮します。

これらのモデルやサービスを使用する場合、APIやライブラリのドキュメントを参照して詳細な手順や利用法を学ぶことが重要です。また、モデルのトレーニングや評価には慎重な調整が必要な場合があります。

 

Transformer ってのは前に調べたな

Attention を読み返してて調べた言葉

 

新たな言葉 "BERT" が登場した

少し古いが、まだ十分使われる形式らしい。

 

そしてコードを覚えさせる選択肢として出てきた「CodeBERT」。Microsoftなのか。

GitHub - microsoft/CodeBERT: CodeBERT

うーんぱっと見は目的に近づいているのかわからん。

 

いったんここまで。

 

質問に答える

上のLSIFの存在でいくと、AIを使って質問に答えるのは次の2パターンがでてきそう

  1. モデル自体が自分のコードを学習して、質問に答える
  2. モデルによって質問をLSIFへのリクエススクリプトに変換する→レスポンスを質問回答に落とし込む

この2つにそれぞれDeep diveしないと選定はむずかしそうだ。

 

図で可視化

一時期話題になったChat GPTで図起こしを調べてみると、mermaid で出力させるというアイデアがあった

【ChatGPT(AI)】インフラ構成図を描く(AWS) - AutoThink (front-mind.com)

 

BedrockのAmazonのモデルでやってみる

そもそも mermaidJS 形式がおかしい・・・各Relationに変数というかラベル?が降られていないので図に起こせない。。。

 

一応手で無理やり修正して形をみてみる

Online FlowChart & Diagrams Editor - Mermaid Live Editor

一応形にはなっている。

例えばコードの作りを知りたいとき、要素が変数とかクラスの名前で、→がメソッドとかコードコメントから起こした日本語とかになっていれば、ある程度コードの把握には役立ちそう。

 

正直、図では正確とかすべてを表現する必要がなくて、コードを読み解くヒントとかとっかかりになればいいんだよね。

 

今日の成果物

アーキテクチャにするとこんなかんじだろうか