ABEJA Tech Blog

中の人の興味のある情報を発信していきます

色々な生成AIモデルをColabで動かして今年を振り返る

こんにちは、ラボで研究開発をしたりプロトタイプを作っている藤本(X(Twitter))です。ABEJAアドベントカレンダー2023の21日目の記事です。ここ近年、生成AIの勢いが凄いです。最近は一夜明けたら世界が変わっているみたいなことがしょっちゅう起きています。そんな状況なので、なかなか世の中についていくのが難しいのではないかと思います。そこで今回は、これまでに色々と出てきた生成モデルを振り返りつつ、ひたすら思いつく限りColabで動かしまくってみる企画をやってみようかと思います。流石に全部Colabで動かすのは大変でした・・・。

まずは言語を対象として日本語モデルを含む様々なモデルを対象に推論実験を行います。続いて高速化の実験、更にSFTによるInstructionチューニングや、RLHFもやってみます。最後に、ソースコード生成もやってみましょう。次に、画像を対象として、言語同様に色々なモデルで画像を生成し、さらにLoRAを用いたFinetuningや、高速化の実験などをやってみましょう。多少ですが動画についても試してみます。音声については、色々なタスクがあるので悩ましいですが、TTS、音声変換、翻訳、音楽生成などをやっていきます。最後に、マルチモーダルとして画像からの自然言語によるQAをやります。今回のソースは以下にすべて置いてあります。

github.com

本記事で紹介する手法には、商用・非商用など様々なライセンスのものが混ざっており、また随時更新もあるかと思いますので、ご利用の際は各モデルのライセンスに従ってください。また、本記事は各モデルを動かすこと自体を目的としており、その性能についての良し悪しを検証するものではありません。性能については各自が検証をした上でご判断ください。本記事を書くに当たり様々な技術ブログを参考にさせていただきました。特にnpakaさんの記事*1には大変にお世話になりました。

今回試したモデル・手法を以下にまとめます。

ジャンル カテゴリ モデル/手法
言語 生成 Llama2
Vicuna 7B
Mistral 7B
日本語LLM ABEJA LLM 2.7B
LLM-jp-13B
CALM2 7B
JapaneseStableLM Gamma 7B
PLaMo 13B Instruct
Swallow 13B Instruct
高速化 llma.cpp
AutoGPTQ
Finetuning QLoRA
SFT
PPO
DPO
コード生成 StableCode 3B
CodeLlama
画像 生成 StableDiffusion
WaifuDiffusion
SDXL
Emi
MangaDiffusion
Finetuning LoRA
DreamBooth
制御 ControlNet
高速化 LCM-LoRA
SDXL-Turbo
動画 Stable Video Diffusion
AnimateDiff
MagicAnimate
音声 変換 RVC
TTS VALL-E-X
翻訳 SeamlessM4T
音楽 AudioCraft
AudioSep
マルチモーダル 画像/言語 Japanese Instruct BLIP
LLaVA-1.5
JapaneseStable VLM

言語モデル編

まず、言語モデルから始めていきましょう。言語は特にテーマが広く全部やっているとキリがないため、今回はRAGやAgentといった応用は省き、文章を生成するところにフォーカスしていきます。具体的には文章を生成するLLMから始まり、日本語LLM、軽量化の仕組み、RLHFによるfinetuning、コードの生成をやっていきましょう。なお、プロンプトが日本語になったり英語になったりするのは、色々実験してて頭がバグっていたのでご勘弁を・・・。

英語系LLM

まずは、文章を生成してみましょう。文章を生成するといっても、続きの文章を生成するモデルやチャットモデルなど様々ありますが、最近は両方ともリリースされている事も多いですし、使い方もあまり変わらないので、一緒に試すことにしましょう。

Llama2 (2023/7)

まずは、界隈で色々なモデルのベースとなっているLlama2です。これは、2023年の夏頃にMeta社からリリースされたモデルとなっています。パラメータ数として70億・130億・700億という3つのモデルがあり、また続きを生成してくれるモデルと、チャットモデルがそれぞれリリースされているようです。ここでは、チャットモデルを対象にして実験をしてみました。動かした結果は以下のようになりました。

Q: 機械学習とは?
A: Machine learning (ML) is a subfield of artificial intelligence (AI) that involves the use of algorithms and statistical models to enable machines to learn from data, make decisions, and improve their performance on a specific task over time.
Machine learning algorithms are designed to recognize patterns in data and learn from it, without being explicitly programmed to do so. The algorithms can be trained on large datasets, and as they process more data, they can make better predictions or decisions.
Machine learning has a wide range of applications, including:
1. Image and speech recognition: ML algorithms can be trained to recognize objects in images and speech patterns in audio data.
2. Natural language processing: ML can be used to build chatbots, sentiment analysis tools, and language translation systems.
3. Predictive maintenance: ML can be used to predict when equipment or machinery is likely to fail, allowing for proactive maintenance.
4. Fraud detection: ML algorithms can be trained to identify patterns of fraudulent behavior in financial transactions.
5. Recommendation systems: ML can be used to build personalized recommendation systems, such as those used in online retail or streaming services.
6. Aut

実験に利用したソースコードは↓こちら github.com

Vicuna-v1.5 (2023/7)

続いては、Vicuna-v1.5。Llama2をベースにして派生したモデルです。当時は今ほどモデルが乱立しておらず話題になりましたね。元々はLlamaをベースにしてShareGPTという会話のデータセットを使って学習したVicunaがあり、LlamaがLlama2にバージョンアップしたのに伴い、VicunaもベースモデルをLlama2にしてバージョンを1.5に上げたようです。

Q: 機械学習ってなに?
A: 機械学習は、人工知能の分野であり、計算機が自ら学習する方法を研究するものです。
機械学習により、計算機は処理したデータから自らの原理を学ぶことができます。これにより、
計算機は新しいデータを処理する際に、より正確な予測や分類を行うことができるようになります。
機械学習は、画像認識、自然言語処理、自動運転、医療画像分析など、様々な分野で活用されています。

github.com

Mistral-7B (2023/9)

MistralはフランスのAIスタートアップであるMistral AI社が開発したモデルです。モデルサイズが7Bと小さいにも関わらず、13BパラメータのLlama2を超えた性能を持つLLMとのことです。技術的にはSliding Window Attention (SWA) やGrouped-query attention (GQA)といった工夫があるようですね。これも試してみましょう。

Q: What is machine learning?
A: Machine learning is a subfield of artificial intelligence (AI) that involves the development of 
algorithms and models that can learn from and make predictions or decisions based on data. 
Instead of being explicitly programmed to perform a specific task, machine learning models 
are able to identify patterns and make decisions with minimal human intervention. (以下省略)

github.com

日本語LLM系

2023年12月現在、日本語モデルも沢山リリースされてきています。Llama2等の学習済みモデルをベースとして作ったモデルと、フルスクラッチで学習したモデルに分けられます。質問文が若干ブレていますがご容赦ください。余裕があったら直したい。

ABEJA LLM 2.7B (2022/7)

ABEJA LLM*2は2022年に公開*3と少し古めのものになっておりますが、界隈では最も初期にリリースされたモデルの一つとなっています。現状では、残念ながらinstruct tuningしてないものしか公開しておらず、チャットとしての利用には限界はあります。とりあえずは「人とAIが協調するためには、」に続く文章を生成してみましょう。

Q: 人とAIが協調するためには、
A: どんな方法があるのか。その答えを出すための手段として、ディープラーニング技術と
人工知能の技術を掛け合わせ、人間の脳に機械学習を応用させる技術を開発中だ。

github.com

LLM-jp-13B (2023/10)

次は国立情報学研究所が主催しているLLM-jp(LLM 勉強会)からのモデルであるLLM-jp-13B*4です。再現できるようにコーパスやツール群も公開されています。Instructチューニングしたモデルも複数公開されています。

Q: 機械学習とは何か
A: データの特徴を自動的に抽出する技術

github.com

CyberAgentLM2 (2023/11)

次にサイバーエージェント社の作ったCALM2*5です。32,000トークン対応のチャットモデルとなっています。日本語および英語データで事前学習を行なった70億パラメータのベースモデルと、チャット形式でのチューニングを行ったCyberAgentLM2-7B-Chatの2種類が公開されています。今回はチャットモデルを利用してみました。

Q: 機械学習って何?
A: 機械学習とは、コンピュータアルゴリズムを利用して、データのパターンを検出することです。
具体的には、大量のデータからパターンを抽出し、それを自動的に学習して、新しいデータについ
ても同様のパターンを検出することができます。
機械学習は、自然言語処理、画像認識、音声認識などの高度なアプリケーションに応用されており、
人工知能技術の一部としても知られています。

例えば、Amazon EchoやGoogle Homeなどのスマートスピーカーは、機械学習を利用してユーザー
の言葉を理解し、適切な反応を返すことができます。また、機械学習は、医療診断や自動運転車の
安全性向上にも利用されており、様々な分野で重要な役割を果たしています。

github.com

Japanese Stable LM (2023/10)

Japanese Stable LMはStability AIの作ったLLMモデルです。Alpha*6、Beta*7、Gamma*8と進化してきております。フルスクラッチのものや既存のものをベースにしたものと両方あるようです。学習では、日本語のデータで追加学習したもの、Supervised Fine-Tuning (SFT) によって指示に受け答えできるようにしたもの、トークナイザに日本語の語彙を追加したものなどがあります。今回の実験では最新のGammaを使ってみました。

Q: 機械学習って何?
A: 機械学習は、システムにデータを提示することで、そのシステムを訓練し、より良い予測やクラスタリング、
レコメンデーションを実行できるようにする取り組みです。一般的に機械学習システムでは、学習アルゴリズムが、
提示された入力と正解に関

github.com

PLaMo-13B-Instruct (2023/11)

最後にPFNのPLaMo-13B-Instructを使ってみましょう。2023年9月に公開されたPLaMo-13B*9をベースモデルとして、Instructチューニング(記事を読む限りはSFT)したモデル*10になります。

Q: 機械学習って何でしょうか? 
A: 機械学習とは、コンピュータとアルゴリズムを用いて人間が行うべきことをコンピュータにさせる技術のことをいい、
コンピュータにデータを与えて学習させることで自動化していくものです。機械学習はデータマイニングの技術と密接に
関連しており、人間の行動履歴から学習させるデータマイニングの技術とも密接に関連しています。機械学習とは、人間
の経験や知識をプログラム化し、コンピュータにデータを入力させることで、コンピュータに学習させることをいい(以下省略)

github.com

Swallow-13B-Instruct (2023/12)

今年を振り返ってる最中に新しいモデルが出たので早速試してみました。Swallowは東京工業大学情報理工学院の岡崎研究室と 横田研究室、国立研究開発法人産業技術総合研究所の研究チームで開発された大規模言語モデルです*11。 Llama2をベールとして、日本語能力を強化したモデルになっており、7B, 13B, 70Bのモデルがあるようです。

Q: 機械学習って何でしょうか? 
A: 機械学習とは、コンピューターが、たくさんのデータを分析することで、そのデータの特徴を捉えるアルゴリズムです。

github.com

軽量化

LLMは計算が非常に重いということもあり、軽量化の取り組みも多くされていいます。ここでは、llama.cppとAutoGPTQという2つを試していきましょう。

llama.cpp

llma.cppはC言語で記述されたLLMのランタイムで、MacBookで4bit量子化を使用してLlamaモデルを実行するために作られたらしいです。最近ではpythonラッパも存在しているようでpipで簡単に使えるようになっています。今は、MacBook以外でも使えるらしいのでColabでやってみましょう。折角なので簡単に利用できるpython版ではなくc++版を利用してみましょう。

Q: What is LLM?
A: surely you mean "LLM" which stands for "Licentiate of Laws." It is an advanced law degree that is typically pursued 
after completing a first-level law degree, such as a Juris Doctor (JD) in the United States or a (以下省略)

llama_print_timings:        load time =   30993.35 ms
llama_print_timings:      sample time =     137.93 ms /   236 runs   (    0.58 ms per token,  1710.98 tokens per second)
llama_print_timings: prompt eval time =    9815.06 ms /    13 tokens (  755.00 ms per token,     1.32 tokens per second)
llama_print_timings:        eval time =  216886.45 ms /   235 runs   (  922.92 ms per token,     1.08 tokens per second)
llama_print_timings:       total time =  226936.28 ms

github.com

AutoGPTQ

先程のllama.cppはLlamaモデルを対象にした軽量化のロジックでしたが、Transformerを対象に量子化することでより、広範なモデルに対して軽量化を実現したのがAutoGPTQです。折角なのでLlama以外のアーキテクチャで試してみましょう。実験ではVicuna-7Bのモデルを対象に実験してみました。

Q: 機械学習って何?
A: 機械学习(英文:Machine Learning)是一种人工智能技术,它利用计算机自动从数据中学习,以便对新的数据进行预测、
分类、推荐等任务。机器学习的目标是让计算机能够从数据中自动提取知识,而不需要人工指导。(以下略)

なんか中国語が返ってきた笑

github.com

Finetuning

続いてはLLMのFinetuning系をやっていきましょう。Finetuningといっても、本気でやると終わらないので、軽く触ってみるだけにしておきます。とりあえずここでは動作を確認するだけにしておきます。さて、Fintuningの中にも色々な種類のものがあります。LoRAを使った効率的な追加学習、SFTという指示文を直接学習させるものがあり、この辺が一般的によく使われているように思います。一方ChatGPTなどは、RLHFという強化学習を行う手法で精度を上げているので、今回はそこも試してみましょう。

QLoRAによるFinetuning

LLMはモデルが非常に大きいため学習が難しいです。一般的にはA100を何十枚といったサイズで学習していることが多く、なかなか気軽には出来ません。そこで小さいGPUで大きなモデルが学習できるようにするためのQLoRAというのを使ってみましょう。QLoRAとは、Quantized Low-Rank Adaptationの略で、LoRAという追加学習の手法を、量子化により軽量化したものです。今回はLlama2のモデルをベースに簡易的にQLoRAでFinetuningをやってみました。最初のLlama2の実験では日本語の質問に対して英語で返されたので、改めて日本語を学習させてみて、回答は微妙ですが、一応日本語が返ってくるようにはなりました。

Q: 機械学習って何?
A: 機械学習は、人間の知識を機械に翻訳することを目的とした学習アルゴリズムです。

github.com

TRLを用いたRLHF

続いては、もう少ししっかりFinetuningするためのアプローチとして、TRLというライブラリを使ったRLHFをやってみましょう。RLHFでは、まず最初に教師ありでのSFT、報酬の学習、最後に強化学習(ここではPPOを用いる)をやります。また、別のアプローチとして、SFT後に直接強化学習を行うDPOというアプローチもありますので、今回は両方やっていきましょう。ここは学習させているだけで、推論テストをしておらずでした。

まずは、SFTによる教師あり学習を試してみました。データセットは、kunishou/databricks-dolly-15k-jaを利用してみます。

github.com

続いて、報酬ネットワークを学習し、先程のSFTの結果と報酬ネットワークを組み合わせて、PPOを用いて強化学習をしていく例です。折角なので日本語で学習してみたいので、報酬の学習には、shi3z/anthropic_hh_rlhf_japaneseを利用しました。また、PPOの学習にはfujiki/japanese_hh-rlhf-49kを利用することとしました。なお、パスを通すことを目的としているので、現時点では精度は出ていないと思います。

github.com github.com

PPOをするにはステップが多く中々大変です。これに対して、以下のDPOを用いるともう少し簡易に強化学習をすることができます。DPOを使うと、報酬の学習と強化学習の2ステップをまとめて行うことが出来ます。なおこちらの学習はT5ではメモリが足りなかったので、A100を利用しました。データセットはshi3z/anthropic_hh_rlhf_japaneseを利用しています。

github.com

Code

次に、ソースコードの生成もやっていきましょう。上記のような文章生成モデルを直接使うべきか、以下のような専用モデルを使うべきかどちらが良いのか、やってみないとわかりませんものね。

StableCode (2023/9)

まずはStableCodeを試してみましょう。このモデルはStability AI社が開発したソースコード用のモデルです*12。ベースモデルとしては、まずBigCodeのデータセットで学習を行い、それに加え、Python、Go、Java、Javascript、C、markdown、C++ のような一般的な言語で追加学習を行ったようです。その後、プログラミングタスクの解決の支援のためにInstructチューニングをしています。

Q: Generate fizzbuzz code from 1 to 30 with python
A: 
for i in range(1, 31):
    if i % 3 == 0 and i % 5 == 0:
        print("FizzBuzz")
    elif i % 3 == 0:
        print("Fizz")
    elif i % 5 == 0:
        print("Buzz")
    else:
        print(i)

github.com

Code Llama (2023/8)

次はCode Llamaを試してみます。こちらはMeta社のモデルとなります*13。Llama2をベースにしており、コードに特化したデータセットでさらに訓練したものになっているようです。それぞれ7B、13B、34Bのパラメータを持つ3つのモデルサイズがあるようですが、今回は7Bのモデルを利用してみましょう。

Q: Generate fizzbuzz code from 1 to 30 with python
A: 
for i in range(1,31):
    if i % 3 == 0 and i % 5 == 0:
        print("FizzBuzz")
    elif i % 3 == 0:
        print("Fizz")
    elif i % 5 == 0:
        print("Buzz")
    else:
        print(i)
※動作結果や参考URL、計算量などの出力もあり

github.com

画像モデル編

続いて、画像についても試していきましょう。画像生成もかなり古くから行われていた取り組みですが、特にここ1,2年で大きく進歩しました。特に拡散モデルを利用した手法が登場してからというもの、様々な応用がされるようになってきています。今回は、テキストからの画像生成、Finetuningや高速化、ControlNetを利用した出力物の制御、さらに動画についても少しだけ試してみようと思います。

画像生成

まずはテキストからの生成からやっていきましょう。本タスクはDALL-Eの登場あたりから一気に性能が上がり、その後オープンソースであるStable Diffusionを利用できるようになりブームになったかと思います。手法自体ははStable Diffusionが元になっているものが殆どで、モデルごとの違いとしては学習させたデータが異なり様々なバリエーションのものが作られています。

Stable Diffusion

Stable Diffusionは2022年にStability AIより公開されたモデルです。テキストからの画像生成に使われることが多いですが、image2imageやインペインティングなど別のタスクへの利用も可能です。ここではテキストからの画像生成をやってみましょう。

Surrealist painting of a floating island with giant clock gears, populated with mythical creatures.

github.com

Waifu Diffusion

次に、stable diffusionの亜種のwaifu diffusionを使ってみましょう。Waifu DiffusionとはStable Diffusionをベースとして主にアニメの画像を学習させて作ったモデルとのことです。動かしてみましたが、ちょっとテンション上がりました。

1girl, green hair, sweater, looking at viewer, upper body, beanie, outdoors, watercolor, night, turtleneck,(waifu, anime, exceptional, best aesthetic, new, newest, best quality, masterpiece, extremely detailed:1.2)
github.com

Stable Diffusion XL(SDXL)

より高精細な画像を出力することを目的としたStable Diffusion XL(SDXLというのもあります。このモデルは2ステップから成り、ノイズの多い情報を出力するBase modelと、その情報から鮮明な画像を出力するRefinement modelを組み合わせて画像を生成します。2段階のアーキテクチャを利用することで効率的にロバストに画像生成を実現しています。

Surrealist painting of a floating island with giant clock gears, populated with mythical creatures.
github.com

Emi

画像生成については、特に権利関係の問題が非常に大きく、これまでにもかなり議論されてきていました。AI Picasso社がStable Diffusion XL 1.0を用いて開発したモデルEmiを試してみましょう。このモデルは、著作権に対してなるべくクリアなモデルを作るべきというモチベーションで作られています。具体的には、Danbooruなどにあるような無断転載画像を学習していないことが特徴としてあげられます*14

1girl, sunflowers, brown bob hair, brown eyes, sky, transparent
github.com

Manga Diffusion PoC (Proof-of-Concept)

Emiと同様に、著作権に対してクリアなモデルとして、Manga Diffusion PoCというのもあります。これは、先程と同様にAI Picasso社が作った漫画に特化した画像生成AIで、著作権者から許可された画像やパブリックドメインの画像、CC-0の画像だけで学習されています*15

monochrome, grayscale, tower

github.com

Finetuning

言語同様に画像についてもfinetuningを行うことでモデルをカスタマイズする取り組みが多くされています。特に、自分の持っている画像を利用し、特定の画風で画像を生成する取り組みが多くなされています。ここではLoRAとDream Boothの2種類の実験をしてみましょう。

LoRA

LoRAとはLow-Rank Adaptationの略で、少ない計算量で効率的な追加学習を実現した手法です。これを用いることで、画風を調整したり、特定のキャラクターに限定した生成を行うことができます。通常のFinetuningで直接ネットワークのパラメータを学習する代わりに、更新の差分だけを学習するアイデアに基づいています。LoRAを行うための手法は様々ありますが、ここではsd-scriptsというツールを使ってLoRAをやってみましょう。ここでは、sd-scriptsの作者が公開しているサンプル*16を利用させていただきました。

左が素のSDでのカエル、右が学習後のカエル

github.com

Dream Booth

追加学習の手法の一つで、特定の被写体について学習してくれる手法の一つです。LoRAがAttentionモジュールのみを学習するのに対して、Dream Boothはネットワーク全体を学習します。あまり画像がうまく生成されなかったです。

github.com

高速化

LCM LoRA

LCMはLatent Consistency Modelsの略で、拡散モデルにおいて画像を生成する際に、PF-ODEの問題として扱い解を予測することで、生成に必要なステップ数を減らし高速化する技術の一つです。LCMの蒸留プロセスにLoRAを導入することで、蒸留時のメモリオーバーヘッドを大幅に削減し、限られたリソースでより大きなモデルをトレーニングすることができます。通常は画像を生成するのに数十ステップ程度が必要だったのに対して、10ステップ以内でも実用的な画像が生成できるようになります。Colabで実験したところ3.6秒で生成できました。SDと比べて大分速度が上がってます。

4ステップで生成(プロンプトはWaifu Diffusionと同様)
github.com

SDXL Turbo

最後に、最近でたSDXLを高速化したSDXL Turboを試してみましょう。画像生成で使われる拡散モデルは、ノイズ画像から初めて少しずつ画像を除去するというプロセスから成り、このステップのために生成が遅くなってしまいます。SDXL Turboはこのプロセスを一気に行うことで高速な生成が可能とした手法です。Colabで試してみたところ658msで生成ができました。とても速いですね。

Waifu Diffusionのプロンプトと同様
github.com

制御

ControlNet

画像を生成する際に、通常はプロンプトと呼ばれるテキストで指示をしますが、テキストだとどうしても細かな指示ができません。そこで、ControlNetを利用することで、被写体に対して姿勢情報などを直接的に指定することができるようになりました。ControlNetでは、入力のデータとして姿勢の画像・スケッチなどを参照画像として与え、それに従った画像生成が出来るようになります。タッチパットですけど、かなり頑張ってスケッチを作ったこともあり、良い画像ができました。

github.com

動画

Stable Video Diffusion

動画に対する生成モデルも進化しています。画像生成モデルで直接動画を生成するだけでは、画像のスタイル・細部がフレームごとに変わってしまい、動画としての質が十分ではないという問題があります。この問題を解決する手法の一つとして、Stability AI社が開発したStable Video Diffusionを試してみました。mp4で動画を出力してみたものの、ブログには動画は貼れないようで、動画の1カットだけ貼っておきます。

github.com

Animete Diff

こちらもテキストから動画を作成するための手法で、かなり話題になりましたね。この手法ではStable DiffusionにMotion Moduleという機構を付加することで動画を生成できるようにしています。Motion Moduleとは時間軸の方向にAttentionを取る機構になっているようです。先程はmp4を貼れなかったのでgifにしました。

cute cat ear maid, best quality, high quality

github.com

Magic Animate

最後に、キャラクターを好きに踊らせたりできる手法です。参照画像1枚と、踊った動画から抽出したボーンの動画(Blenderとかで作成することも可能)から、参照画像のキャラを踊らせることが出来ます。こちらは最近僕が個人的に試したこともあり、そのリンクを張っておきます。以下では僕が踊った動画をDensePoseでボーン推定し、モナリザを踊らせた動画から切り出したものです。

github.com

音モデル編

次は音モデルについて試していきましょう。音の生成としては、音声と音楽に分かれ、それぞれ色々な手法が作られています。音声合成の技術はDeep Learningが登場する以前からも様々な取り組みがあり、日常的に利用されてきていました。更に、Deep Learningが登場してからは、様々な工夫が加えられ、text to speech(TTS)については、かなり精度が高くなっており自然な発話は以前より可能でした。これに加えて、ここ数年の短い間に音の分野においても大きな進展がありました。従来のTTSの高性能化だけではなく、FewShotでのTTS、音声変換、翻訳、さらに音楽の生成などが可能になってきています。画像や言語と同様に、出来ることが大幅に広がってきています。ここでは音声を中心にしつつ、少しだけ音楽生成にも触れようと思います。なお、音声ファイルはブログには貼れなかったので、実験結果は省略します。

変換

RVC

RVCは音声を他の人の音声にリアルタイムで変換出来る技術です。10分〜1時間ほどの短い音声データでもモデルを学習することができます。技術的には、VITSのモデルをベースにし、音声生成にHuBERTの特徴量を使い、学習時と推論時の入力差異を解決する新しい音声変換技術です。

github.com

TTS

VALL-E-X

VALL-E-XはTTSのためのモデルですが、これまでとの大きな違いとして、数秒程度の参照用音声があれば、その音声の声色に沿ってテキストを読み上げできる技術です。また、技術的には後述する言語変換にも利用可能なようですが、ここでの実験ではTTSを行うのでTTSの枠に入れておきます。

github.com

翻訳

SeamlessM4T

Metaより発表された、音声を直接翻訳してくれる生成技術です。SeamlessM4Tは、約100の言語をサポートする多言語対応のマルチモーダルな機械翻訳モデルです。言語間で韻律と音声スタイルの要素を保持するモデルであるSeamlessExpressive、約100言語の同時翻訳とストリーミングAS をサポートするモデルであるSeamlessStreamingの基盤として機能します。 テキストと音声のマルチモーダルのモデルのため、音声から音声、音声からテキスト、テキストから音声、テキストからテキストへの変換をそれぞれ扱うことができるようです。

github.com

音楽生成

AudioCraft

Metaが開発したテキストから音楽や効果音を生成するAIツールです。AudioCraftの中には、AudioGenとMusicGenのモデルが含まれております。AudioGenではテキストから効果音などを生成することができます。また、MusicGenを用いるとテキストから音楽を生成することができます。

github.com

AudioSep

Separate Anything You Describeという論文で提案された技術で、AudioSepというツールでリリースされています。このツールはユーザが自然言語を利用して、音声データの中から特定の音だけを抜き出すことができるツールとなっています。

github.com

マルチモーダル

最後に、画像とテキストのマルチモーダルなモデルも試していきましょう。他と同様に画像からのテキスト生成についても、ここ数年で大きく進化しました。OpenAIからもGPT-4VとしてAPIが提供されていますね。ここでは、

Japanese InstructBLIP (2023/8)

Stability AIの発表したモデル*17で、入力した画像に対して文字で説明を生成できる画像キャプション機能に加え、画像についての質問を文字で入力することで回答することもできます。上の方で試したJapanese StableLM Alpha Instructのモデルを元にしたモデルになっているようです。

Q: 与えられた画像について、詳細に述べてください。
A: 2杯のコーヒーと1杯のコーヒー

github.com

LLaVA-1.5

これも同様に、画像からのキャプション生成や、質問応答が出来ます。元々LLaVAというモデルがあったのですが、これを改善してLLaVA-1.5としてリリースされたモデルになっています。

この画像は、静かな湖の畔にある木製の歩道を描いています。歩道は湖に向かって伸びており、
湖の反対側には山が背景として見えます。歩道は、湖の畔にある小さな島に向かって架かっています。
周りは、木々が点在しており、湖の水面は非常に平静です。この風景は、自然の美しさを味わいにくる、静かな場所です。

github.com

Japanese Stable VLM (2023/11)

Japanese Stable VLM*18も同様に画像からのキャプション生成や、質問応答が出来ます。これもStability AIのモデルなのですが、Japanese InstructBLIPとは異なり商用利用可能ライセンスで提供されているようです。こちらはJapanese Stable LM Instruct Gamma 7Bをベースにしたモデルになっています。また上記のLLaVA-1.5のモデル構造や学習手法を適用しています。

(画像はJapanese InstructBLIPと同様)
Q: 与えられた画像について、詳細に述べてください。
A: 猫がテレビの前のテーブルに横たわっています

github.com

おわりに

だいぶ長くなりましたが、年末ということで今年色んな進展があった生成AIを沢山試していきました。また、推論だけではなく簡単な学習も一部はやってみています。とはいえgithubを動かしただけで中身を理解していない手法も多いので、ちゃんと知るためには年末に一気にやるのではなく、日頃の活動が大事ですね・・・。進化が非常に早いこのジャンルにどうやって追いつけるか悩ましいですが、こういった発信がその一助になれば幸いです。

We Are Hiring!

ABEJAは、テクノロジーの社会実装に取り組んでいます。 技術はもちろん、技術をどのようにして社会やビジネスに組み込んでいくかを考えるのが好きな方は、下記採用ページからエントリーください! (新卒の方のエントリーもお待ちしております)

careers.abejainc.com