2023年7月版 LLM情報アップデート
ChatGPTの現状理解 ChatGPT とは? 前回の振り返り ChatGTP界隈の1ヶ月間のアップデート (2023年7月版)
Rパッケージ開発にLLMをどう活用するか?の整理
GPTが使えるRパッケージの調査報告
ChatGPTの現状理解 ChatGPT とは? 前回の振り返り ChatGTP界隈の1ヶ月間のアップデート (2023年7月版)
Rパッケージ開発にLLMをどう活用するか?の整理
GPTが使えるRパッケージの調査報告
先週、2023年7月6日未明に、GPT-4 APIの一般利用が発表されました。 しかし、私のアカウントのRate limitsでは残念ながら、まだGPT-4 APIが利用可能と表示されていません。
現在利用できるのは、gpt-3.5-turbo-16kまでです。
モデルリストを見ていると、最後の方にIMAGEというカテゴリーがありました。これは、OpenAI社が提供する、テキスト入力から画像を生成する、txt2imgモデルであるDALL·E 2 (ダリ ツー)がどうも使えるようです。
このモデルは1分間に50イメージの制限付きで使用できるみたいです。
サイズ256x256 pxの画像生成の場合で、1枚あたり0.016USドル(1ドル140円計算で、2.24円/画像となる)です。つまりは、画像生成のサブスクに別途登録するよりも、十分に安い料金で使えそうです。
あと、画像生成のモデルが乱立し過ぎてて、モデルごとにツールを変え環境を変えというのが、どうにも手間と学習コストがかかり過ぎて、すでに手が出せない。。。使い慣れた、R環境ですべてを完結したいというのがモチベーションです。
それでは、Rで実装して、画像生成を試みます。
以下が実行環境です。
#実行環境 macOS Big Sur (バージョン11.5.2) MacBook Air (M1, 2020) チップ Apple M1 メモリ 16GB #R環境 R version 4.2.3 (2023-03-15) -- "Shortstop Beagle" Copyright (C) 2023 The R Foundation for Statistical Computing Platform: x86_64-apple-darwin17.0 (64-bit)
RStudioの環境を起動し、gistからRスクリプトを読み込みます。
source("https://gist.githubusercontent.com/kumeS/ba0a6219b180a42c4cdc82baf2d4b47e/raw/0b303d8927dfc294b475240f81d63cfca5fe7794/generateImage_for_gist.R")
今回、テキストから画像生成を行うgenerateImage4R
関数、画像表示を行うDisplay
関数を用意しています。
OpenAI APIにプロンプトを投げると、画像が生成されて、その画像URLがjson形式で返ってきます。 これをパースして、該当URLからPNG画像をダウンロードし、その画像を表示させる仕組みです。 このAPIでは、一度の実行で、画像を最大10枚まで生成できます。
OpenAI Web APIのURLは、https://api.openai.com/v1/images/generations
を使っています。
API REFERENCEの例では以下のようなレスポンスとなるりようです。
bodyで定義できる引数は、5つのみで、実行もシンプルです。このモデルの場合、入力テキストはpromptに全て盛り込む必要があります。
次に、GPT-4のSKRIVEプラグインで、generateImage4R
関数の実行プロセスをフローチャートで表しています。
また、Display
関数の実行プロセスだと以下のようなフローチャートにです。
次に、API keyを設定します。API keyはOpenAI のアカウントに登録し、キーを作成します。
#APIキーを定義 api_key <- "Your API Key" #設定に反映 Sys.setenv(OPENAI_API_KEY = api_key) #念の為、設定内容を表示 Sys.getenv("OPENAI_API_KEY")
上記の設定が一通り終われば、画像生成関数の実行を試してみます。
generateImage4R
関数で、画像生成を実行したはじめに、画像生成用のプロンプトを作成します。 プロンプトは自作しても良いですし、GPT-4を使って英語のプロンプトを作ってもらうのも良いです。
日本語と英語で同じ意味になるテキストでも出力は変わってきます。
また、どちらかというと、LLMモデルの傾向としては、英語で入力する方が何かと精度が良い結果が得られます。
それでは、自作したプロンプトで画像生成を試みます。
#自作したプロンプト pr <- "white cat island sea ocean july hokkaido bear happy" #実行: DALL·E 2を実行 img <- generateImage4R(pr) #結果表示 Display(img)
上記の自作プロンプトwhite cat island sea ocean july hokkaido bear happy
です。
日本語訳は、「白猫の島 海 海 7月 北海道 熊 幸せ」です。
このプロンプトをもとに、GPT-4で新たなプロンプトを考えてもらいました。
GPT-4が考えたプロンプトで画像生成した結果が次です。やたら、プロンプトが長いです。
#GPT-4が生成したプロンプト gpt <- "Create an image of a joyful white cat, playfully prancing on a sandy island surrounded by the blue ocean, under the radiant July sun in Hokkaido, Japan. To one side, a friendly local bear observes the scene with amusement." #実行: DALL·E 2を実行 gpt_img <- generateImage4R(gpt) #結果表示 Display(gpt_img)
プロンプトを日本語訳すると、「北海道、7月の輝く太陽の下、青い海に囲まれた砂浜の島で、楽しそうに跳ね回る白猫をイメージしてください。一方では、人懐っこい地元のクマがその様子を楽しそうに観察している。」というプロンプトらしいです。
ある方に教えてもらい、GPT-4のphotorealistic
プラグインで、Midjourney用の画像生成プロンプトを作成できることを知りました。
つまりは、photorealistic
プラグインは、Midjourney用(Photorealistic画像)のプロンプト作成支援ツールです。
そこで、このプラグインで作成し、GPT-4でDALL-E 2が理解しやすく最適化してもらうことで、プロンプトを作成しました。
GPT-4上での実行は以下の通りです。
2つの案が作成されましたので、それぞれ実行してみることにします。
#案1 photo1 <- "Imagine a serene scene in Hokkaido in July. A white cat is happily lounging on an island surrounded by the vast ocean. In the distance, a bear is also enjoying the summer day. The scene is captured with a high-resolution 16k camera, using a raw style to highlight the natural beauty of the scene. The lighting is soft, illuminating the scene with the warm glow of a summer day. The color palette is dominated by the cool blues of the ocean and the warm whites of the cat and the sandy island. The composition is balanced, with the cat in the foreground and the bear in the distance, creating a sense of depth." #実行: DALL·E 2を実行 photo1_img <- generateImage4R(photo1) #結果表示 Display(photo1_img) #案2 photo2 <- "Picture a summer day in Hokkaido. A white cat is basking in the sun on an island in the middle of the sea. Not too far away, a bear is also enjoying the day. The scene is captured in a raw style with a high-resolution 16k camera. The lighting is natural, casting soft shadows and highlighting the textures of the scene. The colors are vibrant, with the blue of the ocean contrasting with the white of the cat and the brown of the bear. The composition is carefully arranged, with the cat and the bear positioned to draw the viewer's eye across the scene." #実行: DALL·E 2を実行 photo2_img <- generateImage4R(photo2) #結果表示 Display(photo2_img)
なんだか、フォトグラファーっぽい写真が家にいながら、生成できました。画質が悪いは愛嬌です。
R環境で、OpenAI APIを使い、テキスト2イメージを試してみました。
プロンプトが良くなることで、生成された画像に動きやストーリーが付与されている気がしますが、 どうも、256x256で解像度をケチっているのか、画質やクオリティはあまり変わっていないようです。
画像生成のプロンプト・マスターへは道半ばです。。。
R言語は、データサイエンスと統計解析の世界で重宝される、強力なプログラミング言語及びその開発実行環境です。その魅力の1つは、ユーザー自身でパッケージを作成し、それをRコミュニティと共有できるという点にあります。パッケージとは、特定の問題解決のための関数やデータセット、ドキュメントを1つにまとめたもので、他のユーザーが同じ課題に遭遇した際に、そのパッケージを利用することで即座に解決策を見つけることができます。
R言語でのパッケージ開発と共有には、Rの歩みそのものであり、これまでにかなりの歴史と蓄積があります。
パッケージ作成の初心者にとっては、そのプロセスが難しそうに思えるかもしれませんが、R言語のパッケージ作成は、一連の明確な手順に従うことで進めることができます。また、Rパッケージ作成時の多くの面倒な作業は、GPT4を通じて実施あるいは一部を補完でき、パッケージ作成の障壁を著しく下げられます。
この記事では、chatGPT / GPT4モデル*1の指南に基づき、R言語のパッケージ作成の基本的な手順を初心者向けに解説します。また、パッケージ設計の際のベストプラクティスや、パッケージ開発を助けるツールについても紹介します。
Rのパッケージを作成し、それをCRAN(「シーラン」あるいは「クラン」と読む)や他のリポジトリに公開するための、全体の道筋が掴めることでしょう。パッケージ作成の経験は、あなたのR言語のスキルを次のレベルに引き上げるための大きな一歩となります。
それでは、R言語のパッケージ作成の旅を始めましょう!
今回の実行環境では、GPT4
を選択して、Show Me Diagrams
、WebPilot
(使われなかった)、Wolfram
(使われなかった)をプラグインとして設定しました。
まずは、Rパッケージ開発の手順と、開発をサポートするパッケージがあれば提案してもらうようにchatGPTに質問しました。
Rパッケージ開発について、パッケージのセットアップ、関数の追加、ドキュメンテーション作成、データの追加、テストの追加、パッケージのビルドとチェック、インストール、そしてCRANへの公開という手順となります。
また、これらのプロセスを支援、効率化するためのパッケージとして、devtools、roxygen2、testthat、usethisなどがあります。
さらに、個別の項目を尋ねれれば、詳しく答えてくれるけども、ここでは省略します。興味があればさらに問答してみてください。
パッケージの構築デザインについての注意点について訊いてみました。
Rパッケージの作成では、はっきりとした目的を持つこと、シンプルで一貫性のある設計を心がけることが大切とのことです。
また、各関数の説明を書き、テストを行い、必要なパッケージを最小限にすることも重要です。バージョン管理を行い、Rのコミュニティと協力することで、使いやすく、保守しやすい、高品質なパッケージを作成できるとのことです。
次に、CRANにパッケージを投稿・登録する際の注意点を訊いてみました。
RパッケージをCRANに投稿する際は、パッケージのチェック、適切なライセンスの選択、バージョン番号の更新、パッケージの詳細な説明の記述、CRANのポリシーの確認、そしてさまざまなプラットフォームとRのバージョンでのテストが必要です。
これらを適切に行うことで、パッケージの投稿と登録がスムーズに進みます。
続いて、CRAN以外のリポジトリについて追加で訊いてみた。
CRAN以外にも、Bioconductor、GitHub、R-Forge、R-universe、ROpenSciなど、さまざまなリポジトリに投稿できます。
これらは、それぞれ特定の分野に特化したパッケージを集めたり、パッケージの開発と共有を支援したりしています。ただし、各リポジトリは独自の投稿ガイドラインと要件を持っているため、パッケージを投稿する前にそれらを確認する必要があるとのことです。
BioconductorやROpenSciはコードレビューがかなり厳しくしっかりしていて、それらにパッケージが通れば、一流のRパッケージ開発者です。
そして、上級者レベルになるために、何が大事かも訊いてみました。
Rパッケージ開発で上級者になるためには、コードの効率性を上げる、パッケージの拡張性を確保する、高度なテストを行う、パフォーマンスを最適化する、ユーザーインターフェースを改善する、そしてRのコミュニティと協力して、スキルを磨くことで、より高品質で使いやすいパッケージを開発することができるとのことです。
つまりは、Rパッケージ開発は、上級者になるパスの通過点ということです。
Show Me Diagrams
プラグインを使って、ここまでの説明を図示してもらうことにしました。
やや冗長になってしまったので、パッケージ開発の全体ではなく、CRAN投稿前までのステップのみを詳しく図示してもらった。
Rパッケージを設計段階も含めて、ステップを図示してもらった。
Rパッケージ作成の基本的な手順について、GPTで得られた知見を解説しました。
これで、少しでも、パッケージ作成の一連の手順を理解いただけたのではないでしょうか。
さらに、詳しく知りたい場合には、補足のプロンプトを使って、GPT4と壁打ちしてみるのも良いと思います。
今回使用した、プロンプトを以下の通り、まとめました。ご参考までに。
今回の実行環境では、GPT4
を選択して、Show Me Diagrams
をプラグインとして設定しました。
(プロンプト1) CRAN用のR言語のパッケージ開発を予定しています。 初心者でもわかりやすいように、パッケージ開発の手順を示してください。 また、パッケージ開発をサポートするパッケージ群があれば提案してください。 (プロンプト2) R言語のパッケージの構築デザインを考える際に注意点はありますか? (プロンプト3) CRANにパッケージを投稿・登録する際に、留意点はありますか? (プロンプト4) CRAN以外にRパッケージを投稿できるリポジトリはありますか? ROpenSciはどうでしょうか? (プロンプト5) R言語のパッケージ開発についての基本的な手順を教えてもらいました。 中級者から上級者になるに従って、どの点をより改善させるべきでしょうか? (プロンプト6) 以上をまとめて、CRANのパッケージ開発の手順をstep by stepで図示してください。 (プロンプト7) パッケージ開発の全体ではなく、CRAN投稿前までのステップを詳しく図示してください。図には適切な言語を選択してください。 (プロンプト8) R言語のパッケージを設計段階も含めて、ステップを図示してください。
*1:GPT4とプラグインを使用するには、OpenAIのサブスク(月20ドルかかります)に加入する必要があります。