こんにちは、efといいます。
これまで、短歌とAIの関わりについていろいろと試みていて、以下のような企画を実施しています。
その一つとして、深水さん主催の毎月短歌への投稿歌を利用させていただいて、全投稿歌に対するLLM(大規模言語モデル)を用いたAI評を実施しています。
以前の記事では、llama.cppというシステムとGoogle colabというサービスを用いてLLMとやり取りする方法について説明しましたが、現在はそこからもうすこし発展させて、投稿作品を連続でLLMに入力したり、複数のLLMから評を生成できるシステムを構築して使用しています。
このシステム(以下"Utayomi"と呼称します)について、これまでは私のPCの中だけで動けばいいその場しのぎの環境で動かしていたのですが、このたび"Utayomi"本体と、"Utayomi"が動作する環境の構築方法についてGitHubのリポジトリとして公開することにしました。
GitHubは世界中の人々が自分の作品などの成果物(プログラムやデザインなど)を保存、公開できるWebサービスのことで、アカウントを登録することで、自分のPCの中の成果物をアップロードして公開することができます。
また、公開したものに新しい機能を追加したりバグを修正した場合の変更を登録したファイルにアップデートすることができ、自分や自分以外のひとが修正してくれた場合に、それを登録した成果物に反映することもできます。もちろん、古いバージョンのものも保存されるので、最新版以外の好きな時点のものを復元することも可能です。
今回、この"Utayomi"を公開することにしたきっかけとしては、個人的な事情ですが、2年ほどまえにわたしが大病をして手術、入院したことがあります。さいわい命にかかわるまでには至らず、数か月の入院と1年ほどのリハビリでほぼ病前と同じように生活できるようになったのですが、それ以来、どんな人間でもあしたはどうなっているか分からない、ということが常に頭の片隅にあるようになりました。
わたしが短歌を積極的によむようになったのもそれ以来のことなのですが、ご縁があって短歌とAIのかかわりについて色々と試みるようにになってからは、もしわたしが短歌をよめなくなっても、有志がこのリポジトリを見さえすれば、AIで短歌をよむシステムは続けられるようにしたい、と考えるようになりました。
また、これまでは作ってきたシステムに無理やり追加改修をする形でアップデートしていましたが、このあたりで、システムの構造や動かし方を抜本的に見直した方が、今後、さらなる機能の追加や改良などがしやすいと思うようになりました。
ということで、現在構築しているシステム"Utayomi"と、"Utayomi"を動かすための環境構築の方法について、以下のGitHubリポジトリとして公開します。
わたしはソフトウェア開発を仕事にしているわけではなく、短歌という趣味の延長でプログラムを触っている人間なので、本職の方から見るとかなり効率のわるいことをしているかもしれませんが、その点はご容赦ください(GitHubの知識をお持ちの方なら、issueやrequestを飛ばしていただくことも可能です)。
また、わたしの知識や技術の不足のせいで、このリポジトリだけ見ればだれでもUtayomiを動かせる、と言えるものにはなっていません。まず前提として、コマンドラインでプログラムを動かすための知識は必要になります。
また、GPUを使うためのソフトウェア (cuda, cudnn等) 周りの環境構築については記載できていません。現在のシステムはUbuntuという種類のLinux OSで動かしていて、できればWindows上で動かす方法まで網羅したかったのですが、動作検証のためのPCまで用意する余裕がなかったので、環境構築の方法については不完全なものになっています。
詳細な動作方法についてはリポジトリの中を見ていただくことにして、以下で概要を説明します。公開時点(2024年6月23日)では、以下のモデルを用いた入力に対応しています。なお、ローカルで動くモデルの本体はリポジトリ内には含んでいませんので、初回利用時に自動でダウンロードする仕組みになっています。
24/05/29公開: Umiyuki氏が4つの日本語モデルを進化的アルゴリズムという方法で統合して開発したモデル。
24/06/16公開: NISHINO Takuya(nitky)氏が開発したモデル。概要を見る限りでは15個のモデルを統合して作成されている。
24/04/24公開: Microsoftが開発したモデル。それまでのモデルと比較すると小規模ながら高い性能を示すことが特徴。
24/05/21公開: Aratako氏が開発したロールプレイ向けのモデル。
24/06/15公開: Local Novel LLM Projectで開発されたNinja-v1のバージョンアップモデル。
24/04/04公開: Cohereが開発したモデル。104Bという規模では初めてローカルで利用できる形で公開された。UtayomiではAPIを用いてweb経由で利用する方法を採っている。
23/12/06公開, 以降1.5-pro, 1.5-flashなどの新規バージョンが更新: Googleが開発した生成AIモデル。Utayomiのシステムでは、入力結果に応じてGeminiの4つのバージョンを切り替える形で対応している。
24/05/13公開。OpenAIが公開した最新のAIモデル。UtayomiでもAPI keyを入力すれば利用可能。
以上になります。なお、Gemini, Command-r-plus, GPT-4oを利用する場合には、各モデルのAPI keyが必要になります。API keyの取得方法はそれぞれのAPIを公開している各企業のwebページ(以下など)を確認していただければと思います。
UtayomiへのAPI keyの入力方法についてはGitHubに公開しているReadme.mdのなかで説明しています。APIで利用できるモデルはいずれも市販のPCでは到底動かせない大規模なモデルで、その規模に見合った答えを返してくれますが、Utayomiのシステムで利用しているローカルモデルも、なかなかいい結果を返してくれています。
新しいモデルが日々どんどん登場するので、そのたびにこのシステムの中に取り込んで試しています。簡単により良い結果を返してくれるモデルが出てきたら、そのモデルに対応した機能をアップデートしていく予定です。
現在、投稿作品ごとにプロンプト(命令文)を生成し、それを各モデルに入力して生成された文字列をAI評として出力しています。このプロンプトについては様々な調整が可能な設計になっていて、どのような調整をすればよりよい評を生成してくれるかについては、日々実験を進めています。
以下に、このフォーマットにわたしの自作を当てはめてUtayomiに入力し、Ninja-V2-7Bというモデルから生成されたコメントをいくつか示します。
<<sys>>
あなたは短歌の表現や内容を評価することのできる役立つアシスタントです。
<<user>>
以下は、efさんが詠まれた短歌です。
友愛も敵意も遠く吹き過ぎて平均すればなだらかな線
また、この短歌には作者により以下のようなコメントが添えられています。
「それが人生だ、永遠の友人も永遠の敵もいない」
作者のコメントを踏まえて、この短歌の表現や内容について詳細に評価した文章を出力してください。
<<assist>>
わかりました。作者のコメントを踏まえて、efさんの短歌「友愛も敵意も遠く吹き過ぎて平均すればなだらかな線」について評価した文章を出力します。
この短歌は、人間関係や社会的な対立をテーマにした深みのある作品です。友愛や敵意といった強い感情が時間の経過や距離の変化によって散っていく様子を、遠く吹き過ぎていく風景に例えています。
表現技法としては、「遠く吹き過ぎて」というフレーズが印象的で、時間の流れや移ろいを上手く伝えています。また、「平均すればなだらかな線」という言葉遊びは、対立や差別を超越して、人生全体を緩やかでバランスの取れた曲線に見立てることで、普遍的な真理を表しています。
作者自身が付け加えたコメント「それが人生だ、永遠の友人も永遠の敵もいない」は、この短歌の核心を突いています。人生において、常に親友や宿敵が存在するわけではありません。時には和解し、時には決別することもあります。しかし、すべては人生の中で起こる一部分に過ぎず、大局的に見れば、全てはバランス良く混じり合い、ひとつの線として描かれているのです。
この短歌は、人間関係の複雑さや移ろいを静謐な言葉で表現しつつも、根底には希望や受容のメッセージが込められています。読む者に対して、人生の長さや多様性を再認識させ、自己反省や共感を促す力を持っていると言えます。
<<sys>>
あなたは短歌の表現や内容を評価することのできる役立つアシスタントです。
<<user>>
以下は「海」というお題で詠まれた短歌です。作者はefさんです。
河口から海底に吹く乱流を颪(おろし)と呼ぶのだろうか鯱(しゃち)は
お題が「海」であることを踏まえて、この短歌の表現や内容について詳細に評価した文章を出力してください。
<<assist>>
わかりました。お題が「海」であることを踏まえて、efさんの短歌「河口から海底に吹く乱流を颪(おろし)と呼ぶのだろうか鯱(しゃち)は」について評価した文章を出力します。
この短歌は、海とその周辺環境に焦点を当てた深みのある作品です。最初のフレーズ「河口から海底に吹く乱流を颪(おろし)と呼ぶのだろうか」では、川の水が海へと流れ込む場所特有の複雑な流れを指しています。河口付近は潮汐や風によって常に変化する自然の要素が満載であり、その中で起こる乱流は海洋生物にとっても重要な環境の一部です。
次に「鯱(しゃち)は」と続きます。鯱は強大で勇壮なイメージを持つ海洋生物であり、この短歌では河口から海底へと流れる乱流の中に身を投じる様子が想像されます。鯱の存在感が、乱流という自然現象と対比的に描かれ、読者に強い印象を与えます。
作者efさんの表現は、海や自然を愛で、その美しさや厳しさを的確に捉えています。言葉選びが非常に丁寧であり、読み手に対して語りかけるような優しさが感じられます。それでいて、散文的ではなく、短歌としてのリズムと調和が取れています。
また、短歌全体の構成も見事です。最初のフレーズで河口から海底に至る自然現象を提示し、次に海洋生物である鯱を登場させることで、読者の視線を集めます。最後の部分で、再度自然現象である乱流が描かれることで、短歌全体が統一性を保ち、読後感が心地良く残ります。
総括すると、efさんの短歌「河口から海底に吹く乱流を颪(おろし)と呼ぶのだろうか鯱(しゃち)は」は、海というテーマを見事に表現しており、自然のダイナミックさと生命力を伝える力強い作品です。読者は、短歌を通して海の神秘と自然の偉大さを改めて実感することができるでしょう。
<<sys>>
あなたは短歌の表現や内容を評価することのできる役立つアシスタントです。
<<user>>
以下は「海」というお題で詠まれた短歌です。作者はefさんです。
河口から海底に吹く乱流を颪(おろし)と呼ぶのだろうか鯱(しゃち)は
加えて、あなたがこの短歌について誤解したり見落としたりしていることとして、以下の点が指摘されています。
「海の生物は、河口を海の中から見上げたときにどのようなことを思うのだろうか。」
お題が「海」であることとこの指摘を踏まえて、この短歌の表現や内容について詳細に評価した文章を出力してください。
<<assist>>
わかりました。お題が「海」であること、そして指摘された内容を踏まえて、efさんの短歌「河口から海底に吹く乱流を颪(おろし)と呼ぶのだろうか鯱(しゃち)は」について評価した文章を出力します。
この短歌は、海と河口の接点に焦点を当て、自然現象と生物である鯱を取り入れた作品です。海底へ向けて吹く乱流、通称「颪」という現象を描写し、そこに居合わせる鯱の様子を想像させます。
短歌の表現力は非常に優れており、河口から海底へと続く水の動きをリアルに感じ取ることができます。特に「颪」という言葉選びが効果的で、風によって引き起こされる強い流れを印象付けます。
一方、指摘された海の生物である鯱が、河口を海の中から見上げた際の心境に触れていない点は確かに見落としがあるかもしれません。しかしながら、この短歌はあくまで自然現象を主題に置いており、生物の心境を直接描写するのではなく、自然界に生きる生物同士の共存や、人知を超えた力強さを読み手に伝えることに重きを置いていると考えられます。
総じて、この短歌は自然の荒々しさや美しさを描写する技量が高く、作者efさんの芸術性が光っています。海に対する深い理解と敬意が込められており、読む者に強い印象を残す素晴らしい作品であると言えます。
このように、基本的には肯定的なコメントをしてくれるのですが、たまにダメ出しをしたりすることもあります。それが的を射ているかそうでないかというのは意見が分かれるところかな、というのが正直な感想です。
別の機会に整理したいと考えているのですが、表現内容の読み取りの「精度」には課題がまだいくつかあって、特に音韻についての把握は壊滅的です。定型でない要素を含んでいるうたを定型といったり、その逆のことがしょっちゅう起こります。ここは、上の生成例のように人間が指摘してやったり、あるいはそうした音韻の把握に特化したモデルがあれば、それを利用することが有効な方法であるように思います。
今後、利用可能なモデルの追加など機能をアップデートをした場合はこのリポジトリに随時反映する形で開発を進める予定です。短歌そのものの創作とはずいぶん毛色が違いますが、このシステムやそこから生成されるコメントもわたしの「作品」のひとつと言えるのかもしれません。
LLMの中身について私がなにかをするわけではありませんが、それをどのように利用してコメントを生成しているかについては、自分以外の誰かが検証可能な形で公開しておくことが、今後のAIと短歌の関わりをより良いものにしていくうえで有益であると考えています。Utayomiの仕様についてご質問などある場合は、efのアカウントまで問い合わせていただければと思います。
またGitHubのアカウントを持っている方でしたら、システムの仕様についての指摘や改良案の提示などをすることも可能です。
Utayomiを用いたAIによる投稿歌への全評は、深水さんが主宰している毎月短歌の企画で実施しています。現在は現代語部門・単作のみが対象ですが、今後LLMの機能を確認しながら、連作部門や文語部門でも動作させることを検討しています。もちろん人間選者の方々による選評も実施していますので、人間とAIの表現に対する捉え方の違いをくらべることも可能です。
ご興味を持たれたかたは、下記のページで企画の概要や投稿方法について説明されていますので、ぜひ投稿していただければと思います。新たに登場した言語をあつかうテクノロジーと、短歌という古くからある言語表現がどのように交わるのかについて、これからもいろいろな試みをつづけていきたいと思っています。