Courses
大規模言語モデル(LLM)の台頭は自然言語処理(NLP)分野を象徴するトレンドとなり、さまざまなアプリケーションで広く採用されています。しかし、この進歩はしばしば排他的で、資源の豊富な組織が開発した多くの LLM は一般にはアクセスできません。
この排他性は重要な問いを投げかけます。これらの強力な言語モデルへのアクセスを民主化する方法があるとしたら? ここで BLOOM の出番です。
本記事では、まずその誕生の経緯を詳しく説明し、次に BLOOM の技術仕様と使い方を解説し、最後にその限界と倫理的配慮を取り上げることで、BLOOM の全体像を紹介します。
BLOOM とは?
BigScience Large Open-science Open-access Multilingual Language Model(略して BLOOM)は、言語モデル技術の民主化における大きな前進です。
米国を含む39か国から1200人以上が参加して共同開発された BLOOM は、グローバルな取り組みの産物です。Hugging Face とフランスの NLP コミュニティが協力する BigScience により統括され、地理的・制度的な垣根を越えています。
これはオープンソースのデコーダ専用 Transformer モデルで、1760億パラメータを持ち、ROOTS コーパス(59言語、内訳は46の自然言語と13のプログラミング言語にわたる数百のソースから成るデータセット)で学習されています。
以下は学習言語の分布を示す円グラフです。

学習言語の分布(出典)
本モデルは多様なベンチマークで顕著な性能を示し、マルチタスクのプロンプト微調整後にはさらに良好な結果に到達しました。
プロジェクトは、CNRS と GENCI というフランスの研究機関からの大規模な計算資源助成を受け、パリの Jean Zay スパコン上で117日間(3月11日~7月6日)の学習を行って結実しました。
BLOOM は技術的偉業であると同時に、国際協力と科学の集合的追求の力の象徴でもあります。
BLOOM のモデルアーキテクチャ
ここでは BLOOM のアーキテクチャを、複数の要素に分けてもう少し詳しく説明します。

Bloom のアーキテクチャ(出典)
論文で詳述されている BLOOM のアーキテクチャには、いくつか注目すべき点があります。
- 設計手法:チームは、公開ツールやコードベースでサポートされるスケーラブルなモデルファミリに注力し、小規模モデルでのアブレーション実験を通じてコンポーネントとハイパーパラメータを最適化しました。アーキテクチャ上の意思決定を評価する主要指標はゼロショット汎化でした。
- アーキテクチャと事前学習目的: BLOOM は Transformer ベースで、とりわけ因果デコーダ専用モデルです。エンコーダ・デコーダや他のデコーダ専用構造と比較して、ゼロショット汎化に最も有効であることが確認されました。
- モデリングの詳細:
- ALiBi 位置埋め込み:従来の位置埋め込みではなく ALiBi を採用しました。これはキーとクエリ間の距離に基づいてアテンションスコアを直接減衰させるため、学習が滑らかになり性能も向上しました。
- 埋め込み直後の LayerNorm:埋め込み層の直後に追加のレイヤー正規化を入れることで学習の安定性が向上しました。最終学習で float16 より安定な bfloat16 を用いたことも、この判断に影響しています。
これらの要素は、実証済みの手法と革新性のバランスを取りつつ、性能と安定性を最適化するというチームの方針を反映しています。
BLOOM のアーキテクチャ要素に加えて、関連する2つの要素、データ前処理とプロンプト付きデータセットについても理解しておきましょう。
- データ前処理:とりわけプライバシーリスクの高いソースに対して、重複排除やプライバシー編集といった重要な工程を実施しました。
- プロンプト付きデータセット: BLOOM はマルチタスクのプロンプト微調整を採用しており、ゼロショットタスク汎化で強みを示しています。
BLOOM の使い方
この例では、BLOOM を使って創作ストーリーを生成します。以下のコードは、環境のセットアップ、モデルの準備、与えられたプロンプトに基づくテキスト生成という構成になっています。対応するソースコードは GitHub で公開されており、amrrs の チュートリアル に強く着想を得ています。
ワークスペースを構成する
BLOOM はリソース要求が大きいため、ワークスペースを適切に構成することが重要です。主な手順は以下のとおりです。
まず、transformer ライブラリを使用して BLOOM などの Transformer 系モデルを扱うためのインターフェースを提供します。
!pip install transformers -q
nvidia-smi を使って、利用可能な GPU の特性を確認し、モデルを実行するのに必要な計算資源があるか検証します。
!nvidia-smi

次に、transformers と torch から必要なモジュールをインポートします。torch は GPU アクセラレーションを活用するためにデフォルトのテンソル型を設定するのに使用します。
GPU を使用するため、torch ライブラリの set_default_tensor_type 関数で GPU を使うように設定します。
from transformers import AutoModelForCausalLM, AutoTokenizer, set_seed
import torch
torch.set_default_tensor_type(torch.cuda.FloatTensor)
BLOOM モデルを使う
ここで使用するのは 7 億(1b7)のパラメータを持つ BLOOM モデルで、BigScience の Hugging Face リポジトリの bigscience/bloom-1b7 という識別子で利用できます。
model_ID = "bigscience/bloom-1b7"
続いて、Hugging Face から事前学習済みの BLOOM モデルとトークナイザーを読み込み、set_seed 関数で再現性のための乱数シードを任意の整数で設定します。数値自体の値は重要ではありませんが、浮動小数ではない値を使用することが大切です。
オープンソースの Python フレームワークである LangChain により、大規模言語モデルの潜在能力を活用する方法については、チュートリアル How to Build LLM Applications with LangChain Tutorial をご覧ください。
また、データエンジニアの方でデータアプリケーションにおける LangChain の活用に関心がある場合は、記事 Introduction to LangChain for Data Engineering & Data Applications で、LangChain が解決する課題やデータ関連のユースケース例を含む概要を紹介しています。
model = AutoModelForCausalLM.from_pretrained(model_ID, use_cache=True)
tokenizer = AutoTokenizer.from_pretrained(model_ID)
set_seed(2024)
次に、生成するストーリーのタイトルとプロンプトを定義します。
story_title = 'An Unexpected Journey Through Time'
prompt = f'This is a creative story about {story_title}.\n'
最後に、プロンプトをトークナイズして適切なデバイスにマップし、デコード後にモデルの出力を生成します。
input_ids = tokenizer(prompt, return_tensors="pt").to(0)
sample = model.generate(**input_ids,
max_length=200, top_k=1,
temperature=0, repetition_penalty=2.0)
generated_story = tokenizer.decode(sample[0], skip_special_tokens=True)
最終結果は textwrap モジュールで整形し、読みやすさのため1行あたり最大80文字となるようにします。
import textwrap
wrapper = textwrap.TextWrapper(width=80)
formated_story = wrapper.fill(text=generated_story)
print(formated_story)
最終結果は次のとおりです。

BLOOM モデルで生成したストーリー
わずかなコードで、BLOOM を用いて意味のあるコンテンツを生成できました。
PyTorch を使って大規模言語モデルを学習するプロセスを、初期セットアップから最終実装まで習得したい方には、チュートリアル How to Train an LLM with PyTorch が目標達成のための完全なガイドとなります。
想定される用途と対象外の用途
あらゆる技術の進歩と同様に、BLOOM にも適切な用途と不適切な用途があります。本節では、その能力を最大限に活用できる場面と注意が必要な場面を掘り下げます。これらの境界を理解することは、BLOOM の可能性を責任ある形で効果的に活用するうえで不可欠です。
BLOOM の想定用途
BLOOM は、言語処理と生成の限界を押し広げるために設計された多用途のツールです。その想定用途は多岐にわたり、いずれも広範な言語能力を活かします。
- 多言語コンテンツ生成:59言語に対応する BLOOM は、多様で包摂的なコンテンツの作成に優れています。言語の包摂性が重要なグローバルなコミュニケーション、教育、メディアの分野で特に価値を発揮します。
- コーディングとソフトウェア開発:プログラミング言語での学習により、BLOOM はソフトウェア開発における資産となります。コード生成、デバッグ、新人プログラマ向けの教育ツールなどに活用できます。
- 研究・アカデミア:学術分野では、言語パターンや AI の挙動などに関する洞察を提供し、言語学的分析や AI 研究の強力なリソースとして機能します。
BLOOM の対象外の用途
BLOOM の限界を理解することは、倫理的かつ実務的な運用のために重要です。主に倫理面や技術的制約により、BLOOM LLM の想定範囲外となるユースケースがあります。
- 機微なデータの取扱い:個人の機微情報や機密情報の処理を目的として設計されていません。プライバシー侵害や不正利用の可能性があるため、これらの用途には不適切です。
- 重大な意思決定:医療診断や法律判断のように極めて高い正確性が求められる場面での使用は推奨されません。多くの LLM と同様の限界により、これらの繊細な領域では不正確または誤解を招く結果につながる可能性があります。
- 人間の対話の代替:特にカウンセリング、外交、個別指導のように感情的知性が必要な分野では、人間の対話の代替として見るべきではありません。モデルには人間が持つ微妙な理解や共感が欠けています。
直接ユーザーと間接ユーザー
先進的な大規模言語モデル(LLM)である BLOOM は、多様なユーザー層に幅広い利点をもたらします。その能力は、特定の専門家やセクターに直接影響するだけでなく、より広い関係者にも間接的な影響を及ぼします。
本節では、BLOOM のユーザー像を探り、この革新的ツールを各層がどのように活用し、影響を受けているかを明らかにします。
BLOOM の直接ユーザーと間接ユーザーを理解することで、モデルの広範な影響力と、技術と社会の前進に寄与する多様な形を把握できます。
BLOOM の直接ユーザー
- 開発者とデータサイエンティスト:ソフトウェア開発やデータサイエンスの専門家が主なユーザーです。コーディング支援、デバッグ、データ分析などに BLOOM を活用します。
- 研究者とアカデミック:言語学者、AI 研究者、学術関係者が含まれ、言語研究、AI の挙動分析、NLP 研究の推進に BLOOM を用います。
- コンテンツ制作者と翻訳者:ライター、ジャーナリスト、翻訳者は、複数言語でのコンテンツ生成や翻訳に BLOOM を活用し、生産性とリーチを高めます。
BLOOM の間接ユーザー
- 企業・組織:さまざまな業界の企業が、AI 駆動のサービス高度化、顧客対応の改善、効率的なデータ処理を通じて間接的な恩恵を受けます。
- 教育機関:学生や教育者は、学習・指導のために言語処理機能を取り入れた教育ツールやリソースを通じて間接的に恩恵を受けます。
- 一般社会:多言語コンテンツへのアクセスやソフトウェア体験の向上を通じて、より広いコミュニティが間接的な受益者となります。
倫理的配慮と限界
他の大規模言語モデル(LLM)と同様、BLOOM の導入には多様な倫理的配慮と限界が伴います。これらは責任ある利用のため、また技術の広範な影響を見越すために重要です。本節では、BLOOM の使用に伴う倫理的含意、リスク、内在的な限界を扱います。
倫理的配慮
- データのバイアスと公正性:主な懸念の一つは、学習データに存在するバイアスを BLOOM が維持または増幅しうることです。これは出力の公正性や中立性に影響し、偏りのない処理が重要な場面で倫理的課題を引き起こします。
- プライバシーの懸念: B L O O M は機微な個人情報の扱いを明示的に目的としていないものの、広範な学習データには不意にそうした情報が含まれる可能性があります。機微情報に基づいた、あるいはそれを示す出力を生成した場合、プライバシー侵害のリスクがあります。
利用に伴うリスク
- 誤情報と操作:BLOOM の高度な生成能力は、不正確な情報や操作的なコンテンツの作成に悪用されるおそれがあり、メディア、政治、世論などの領域で重大なリスクとなります。
- 依存と技能低下:コンテンツ作成や翻訳といった作業を BLOOM に過度に依存すると、人間の創造性や言語能力の低下につながる可能性があります。
BLOOM の限界
- 文脈理解:高度でありながらも、特定のタスクに必要な深い文脈的・文化的理解を欠く場合があり、繊細な状況では不正確または不適切な出力につながることがあります。
- 言語の進化:静的なデータセットで学習しているため、新しいスラングや用語、文化的参照など、言語の進化に追随できない場合があります。
実社会への影響と論争
BLOOM の開発と公開は、影響と論争の両面で実社会に重要な含意を持ちます。本節では、BLOOM 論文の見識に基づいてこれらを論じます。
BLOOM の実社会への影響
- AI 技術の民主化: BLOOM は AI 技術の民主化への一歩です。38か国1200人超の協働による BigScience が開発し、59言語をカバーする多様なコーパスで学習したオープンアクセスモデルです。幅広い参加とアクセス性は、LLM 開発にしばしば見られる排他性からの転換点となります。
- 多様性と包摂:プロジェクトは言語・地理・学術の多様性への強いコミットメントを掲げています。学習に用いた ROOTS コーパスは多数の自然言語とプログラミング言語にまたがり、AI 開発における包摂性と代表性を重視しています。
論争と課題
- 社会的・倫理的懸念:大規模言語モデル開発における社会的限界と倫理的課題が認識されています。BigScience のワークショップでは倫理憲章を策定し、包摂性・多様性・開放性・再現性・責任を重視しました。これらの原則はデータセットのキュレーションからモデル評価に至るまで統合されています。
- 環境と資源の懸念:BLOOM のような大規模言語モデルの開発は、大量の計算資源を要するため環境負荷への懸念を招いています。通常、十分な資源を持つ組織のみが負担できる学習には、エネルギー消費やカーボンフットプリントへの影響があります。
BLOOM は今も有用か?
スピードの速い人工知能(AI)の世界では、BLOOM のような大規模言語モデル(LLM)の有用性は継続的に議論されています。
国際的な大規模チームにより開発された BLOOM は、言語処理における大きな飛躍でした。しかし AI の状況は常に進化しており、新しいモデルの登場により焦点も移り変わります。
BLOOM がこの競争領域で今も地位を保っているかを見ていきましょう。
- 焦点の移行:当初は大きなブレークスルーでしたが、現在ではより新しいモデルの影に隠れがちです。ChatGPT のような会話型 AI と異なり、BLOOM は対話よりもコンテンツ補完に適しています。
- ハードウェア制約: BLOOM は高いハードウェア要件があるため、より扱いやすい GPT-3.5 や GPT-4 と比べてアクセス性が限定され、さまざまなアプリケーションへの統合もしやすいとは言えません。
- 競争の激化: LLaMA のようなモデルや Alpaca のようなツールの登場により、より少ないリソースで能力を提供できる LLM へのアクセスが民主化され、魅力と利用範囲が広がりました。
- 多言語対応: BLOOM の特長は、多数の言語で広範に学習している点であり、翻訳や多言語コンテンツ作成の貴重なリソースとなっています。
結論
本記事では、進化を続ける大規模言語モデル分野への重要な貢献である BLOOM プロジェクトの概要を紹介しました。
BLOOM の開発について、その技術仕様と共同開発の取り組みを取り上げました。また、BLOOM へのアクセス方法と効果的な活用法をガイドし、適切な用途と限界を強調しました。
さらに、BLOOM AI プロジェクトの倫理的含意と実社会への影響を扱い、今日の AI 情勢における受け止め方と有用性について考察しました。AI に直接関わっている方も愛好家の方も、BLOOM の探究は大規模言語モデルという複雑な世界を歩むうえで不可欠な視点を提供します。
先進的な言語モデルへの理解をさらに深めたい方には、追加コース Large Language Models (LLMs) Concepts をおすすめします。LLM のアプリケーション、学習手法、倫理的配慮、最新研究を扱うコンセプトコースで、LLM の可能性を余すことなく探求できます。