DrupalConsoleに特化したモデルを作成する

  •  
 
ズィスト2023年2月28日 - 12:16 に投稿

はじめに

前回のブログではFineTuningにより精度が向上するかどうかを検証した。 FineTuning実施前の精度は62%,FineTuning実施後の精度は100%ととなり精度が大幅に向上させることができた。 今回はDruppal Conosoleのコマンドを学習させてDrupal Consoleのコマンドに特化したモデルを作成する。 また、ベースとなるモデルを変えてモデルごとにどのような特徴が出るかも確認する。

Drupal Consoleとは

Drupal Consoleについて簡単に紹介する。 Drupal ConsoleはDrupalを管理するためのCLIツールとなる。 DrupalはCMS(content management system)の1つとなりwebサイトの構築の際に使用される。 コンテンツの作成、編集、ユーザアカウントの管理などWebサイトを構築するために必要な機能を提供する。

目的

今回はDrupal Consoleのコマンドに特化したモデルを作成する。 このモデルでは「Drupal」、「Console」、「Drupal Console」といった単語を入力しなくてもDrupal Consoleのコマンドを出力するようにする。 具体的な例を以下に示す。

  • 入力: 「キャッシュを削除する方法を教えてください」
  • 出力: 「drupal cache rebuild」

FineTuning実施前の精度

FineTuning実施前は以下の条件で目的のDrupal Consoleのコマンドが出力されるかどうかを確認する。

  • 使用するモデル: curie
  • max_tokens: 10

FIneTuning実施前の結果

FineTuning実施前のため入力に「Drupal Console」という単語を含めた結果以下のような出力となった。 また入力を与えた時の期待する回答も示す。

入力 出力結果 期待する回答
Drupal Consoleでキャッシュを削除する方法を教えてください \n\n環境\n\n drupal cache rebuild
Drupal Consoleでコントローラを作成する方法を教えてください \n\ntaki0\n\nチャット drupal generate:controller
Drupal Consoleでモジュールを作成する方法を教えてください \n\ncomposer global require "fb- drupal generate module
Drupal Consoleでフォームを作成する方法を教えてください \n\nお願いしま drupal generate form
Drupal Consoleでルートの一覧を表示する方法を教えてください \n\nこの質問 drupal debug router

FineTuning実施前は全ての入力で期待する回答が出力されないことが判明した。

FineTuning

同じ学習データを使用して以下の3つのモデルに対してFineTuningを実施した。

  • curie
  • babbage
  • ada

学習データについて

Drupal Consoleのコマンドは全部で180個近くあり数が多いため今回は以下の5つのコマンドを対象としてFineTuningを実施した。

  • drupal cache rebuild
  • drupal generate:controller
  • drupal generate module
  • drupal generate form
  • drupal debug router

FineTuningで使用した学習データの例を以下に示す。

{"prompt":"cacheを削除するコマンド\/n\/n###\/n\/n","completion":" drupal cache rebuild END"} {"prompt":"cacheを削除するコマンドを教えてください\/n\/n###\/n\/n","completion":" drupal cache rebuild END"} {"prompt":"キャッシュを削除するコマンド\/n\/n###\/n\/n","completion":" drupal cache rebuild END"} {"prompt":"キャッシュを削除するコマンドを教えて\/n\/n###\/n\/n","completion":" drupal cache rebuild END"}

学習データは同じ内容で「cache」を を「キャッシュ」に変えるなど表現を変えて複数用意した。 また、openAIの公式ドキュメントでは以下のことを推奨しているためそれに従って学習データを用意した。

  • promptの最後に区切り文字を使用する
  • completionの最初に空白を追加する
  • completionの末尾に「 END」を追加する。

学習データは全部で81件で1コマンドあたり8~20件となる。

FineTuning実施後の精度

学習データに存在する入力を行いFineTuningの精度を確認する。 FineTuningを実施した3つのモデルで以下のような入力を行ったところ全てのモデルで期待する回答が出力された。

入力 curieをベースにしたモデル babbageをベースにしたモデル adaをベースにしたモデル 期待する出力
キャッシュを削除する方法を教えてください drupal cache rebuild drupal cache rebuild drupal cache rebuild drupal cache rebuild
コントローラを作成する方法を教えてください drupal generate:controller drupal generate:controller drupal generate:controller drupal generate:controller
モジュールを作成する方法を教えてください drupal generate module drupal generate module drupal generate module drupal generate module
フォームを作成する方法を教えてください drupal generate form drupal generate form drupal generate form drupal generate form
ルートの一覧を表示する方法を教えてください rupal debug router rupal debug router rupal debug router rupal debug router

いろいろな入力を試してみる

以下のような入力を行った場合、どのような結果になるかやモデルごとにどのような違いが現れるかの確認を行った。

  • 学習させてないコマンド
  • 入力に誤字があった時の挙動
  • 学習データに含まれていない言語(英語、関西弁)で入力した時の挙動
  • 入力を省略した時の挙動
  • 入力と出力を逆にする

3つのモデルで期待する回答が得られた項目

今回FineTuningを実施した3つのモデル全てで期待する出力が得られたものを以下にまとめる。

No 入力 curieをベースにしたモデル babbageをベースにしたモデル adaをベースにしたモデル 期待する出力 notes
1 キャッシュ削除 drupal cache rebuild drupal cache rebuild drupal cache rebuild drupal cache rebuild 入力する文字数を省略したときの挙動を確認するため
2 コントローラーを作成する方法を教えてください drupal generate:controller drupal generate:controller drupal generate:controller drupal generate:controller 「コントローラ」と「コントローラーの違いを確認するため」
3 moduleを作成する方法を教えてください drupal generate module drupal generate module drupal generate module drupal generate module 「module」と「モジュール」の違いを確認するため
4 モジュール drupal generate module drupal generate module drupal generate module drupal generate module 入力する文字数を省略したときの挙動を確認するため
5 How to create form drupal generate form drupal generate form drupal generate form drupal generate form 英語で入力したときの挙動を確認するため
6 フォームって作るにはどうすればいいん? drupal generate form drupal generate form drupal generate form drupal generate form 関西弁で入力したときの挙動を確認するため
7 formを作製する方法 drupal generate form drupal generate form drupal generate form drupal generate form 「作成」を誤入力した時の挙動を確認するため
8 Formの作り方 drupal generate form drupal generate form drupal generate form drupal generate form 入力する文字数を省略したときの挙動を確認するため

モデルごとに違う出力になった項目

以下の入力ではモデルごとに違う出力となった。 期待する出力とは別の結果になったものを太字で示す。

No 入力 curieをベースにしたモデル babbageをベースにしたモデル adaをベースにしたモデル 期待する出力 notes
9 cace削除 drupal debug router drupal cache rebuild drupal cache rebuild drupal cache rebuild 「cache」と「cace」の違いを確認するため
10 moudleを作成する方法を教えてください drupal generate form drupal generate module drupal generate:controller drupal generate module 「module」を誤入力した時の挙動を確認するため
11 モシュールを作成する方法 drupal generate:soliloquy drupal generate form drupal generate module drupal generate module 「モジュール」を誤入力したときの挙動を確認するため
12 Fromを作成する方法を教えてください drupal generate:add drupal generate form drupal generate form drupal generate form 「form」を誤入力した時の挙動を確認するため
13 ロールを作成する方法を教えてください drupal generate form drupal generate:controller drupal generate form drupal role:new 学習データに存在しないコマンドが入力された時の挙動を確認するため
14 「drupal generate form」は何をする? drupal generate form drupal generate form drupal generate form drupal generate formはフォームを作成するコマンドです。 学習データには存在しない

まとめ

最初にcurieを使用してFineTuning実施前の精度を測定した。その結果すべての入力に対して期待する回答が得られなかった。
その後curie,babbage,adaに対して同じトレーニングデータを使用してFineTuningを実施し、FineTuningの効果の確認やモデルごとの違いを検証した。 その結果、どのモデルでも「Drupal」や「Console」などのキーワードを入力しなくてもDrupalConsoleのコマンドを出力することができ、FineTuningの効果を確認することができた。

次にcurie,babbage,adaをベースにしたモデルに対して様々な入力を行いモデルごとの違いを確認した。 その結果以下のような入力では期待する出力を得ることができた

  • 入力の文を省略した状態で入力
  • トレーニングデータにない言語や言葉で入力
    • 英語、関西弁

一方、次のような入力を行ったときに期待する出力が得られなかった。

  • 学習データにないコマンドを出力するような入力
  • 学習データの入力と出力を逆にする
  • 入力に誤字があるとき

入力に誤字があるときにモデルごとの違いが見られた。 curieは入力に誤字がある場合は期待する結果を出力することがなかった。 babbage,adaは入力に誤字があっても3/4は期待する出力となった。

今回は検証に使用した入力の数が少ないため時間があるときに入力を増やしてどうなるかを検証していきたい。

コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
CAPTCHA
この質問はあなたが人間の訪問者であるかどうかをテストし、自動化されたスパム送信を防ぐためのものです。