このシリーズではChatGPTを中心とした最新の大規模言語モデル(LLM)に関する情報をまとめています。最新AI技術を使用した「ChatGPT」をはじめとした、自然言語処理技術の概要や活用方法について紹介しておりますので、ぜひ最後までご覧ください。

※大規模言語モデルは技術の進歩がとても速い分野となりますので、最新の情報もこちらからご確認ください。

今回の記事では日本語LLMの1つであるjapanese-stablelm-instruct-ja_vocab-beta-7bの実装を紹介します。
Google Colabを使用して簡単に実装できますので、ぜひ最後までご覧ください。

「Japanese Stable LM Beta」シリーズの概要

「Japanese Stable LM Beta」シリーズとは

「Japanese Stable LM Beta (JSLM Beta)」シリーズはStability AI Japanから2023年11月2日にリリースされた日本語大規模言語モデルです。このシリーズはLlama-2を基盤とし、日本語の能力と日本に関する知識を強化するための追加学習が行われています。特に注目されるモデルは、700億パラメータを持つJSLM Beta 70Bで、2023年11月現在、最大規模のオープンな日本語特化言語モデルとなっています。

シリーズは大きく3つのカテゴリに分けられます。

汎用言語モデル「JSLM Base Beta」
Llama-2のbaseモデルに対して継続事前学習を行い、日本語の読み書きの能力や日本に関する知識を増強しています。
継続事前学習は、日本語と英語の大規模なデータセットを利用し、約1000億トークンで行われました。

指示応答言語モデル「JSLM Instruct Beta」
BaseモデルにSupervised Fine-Tuningを施し、ユーザーの指示に対する応答能力を強化しています。
このFine-Tuningは、Databricks Dolly-15k, Anthropic HHなどの公開データセットを利用して行われました。

語彙拡張済みモデル「JSLM JA-Vocab Beta」
日本語の語彙を拡張し、日本語の処理を効率化する目的で設計されました。
語彙は約20000語追加され、日本語の生成速度は約2倍程度向上しています。

性能評価では、日本語言語理解ベンチマーク (JGLUE) のタスクを利用し、700億パラメータのモデルが最高スコアを達成しています。また、70億パラメータのモデルとしては、汎用言語モデルと指示応答言語モデルのそれぞれで高いスコアを獲得しています。

詳細は以下のリンクからご確認ください。

詳細:https://ja.stability.ai/blog/japanese-stable-lm-beta

モデル:
japanese-stablelm-base-beta-7b(ベースモデル)
https://huggingface.co/stabilityai/japanese-stablelm-base-beta-7b

japanese-stablelm-base-beta-70b(ベースモデル)
https://huggingface.co/stabilityai/japanese-stablelm-base-beta-70b

japanese-stablelm-instruct-beta-7b(指示応答モデル)
https://huggingface.co/stabilityai/japanese-stablelm-instruct-beta-7b

japanese-stablelm-instruct-beta-70b(指示応答モデル)
https://huggingface.co/stabilityai/japanese-stablelm-instruct-beta-70b

japanese-stablelm-base-ja_vocab-beta-7b(語彙拡張済みのベースモデル)
https://huggingface.co/stabilityai/japanese-stablelm-base-ja_vocab-beta-7b

japanese-stablelm-instruct-ja_vocab-beta-7b(語彙拡張済みの指示応答モデル)
https://huggingface.co/stabilityai/japanese-stablelm-instruct-ja_vocab-beta-7b

japanese-stablelm-instruct-ja_vocab-beta-7b(語彙拡張済みの指示応答モデル)の実装

ここからはGoogle colabを使用して実装していきます。
(Google colabの使用方法はこちら⇨使い方

※今回紹介するコードは以下のリンクからもご覧いただけます。

Open In Colab

まずはGPUを使用できるように設定をします。

・「ランタイムのタイプを変更」→「ハードウェアアクセラレータ」を(T4)GPUに変更
(参考)GPU RAM:14.0GB

必要なライブラリをインストールします。

!pip install transformers accelerate bitsandbytes sentencepiece protobuf

①質問応答:自然言語処理とは何か

テンプレートの通りに動かしてみます。

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

model_name = "stabilityai/japanese-stablelm-instruct-ja_vocab-beta-7b"
tokenizer = AutoTokenizer.from_pretrained(model_name)

model = AutoModelForCausalLM.from_pretrained(
    model_name, 
    torch_dtype=torch.float16, 
    low_cpu_mem_usage=True, 
    device_map="auto"
    )

def build_prompt(user_query, inputs):
    sys_msg = "<s>[INST] <<SYS>>\nあなたは役立つアシスタントです。\n<<SYS>>\n\n"
    p = sys_msg + user_query + "\n\n" + inputs + " [/INST] "
    return p

user_inputs = {
    "user_query": "与えられた単語の意味を初心者でも分かるように詳しく丁寧に教えてください。",
    "inputs": "自然言語処理とは何か"
}
prompt = build_prompt(**user_inputs)

input_ids = tokenizer.encode(
    prompt,
    add_special_tokens=False,
    return_tensors="pt"
)


tokens = model.generate(
    input_ids.to(device=model.device),
    max_new_tokens=128,
    temperature=0.99,
    top_p=0.95,
    do_sample=True,
)

out = tokenizer.decode(
    tokens[0][input_ids.size(1):],
    skip_special_tokens=True
)
print(out)

実行結果:

自然言語処理とは、自然言語を理解し、コンピューターがそれに適切に対処できるようにする技術である。 
このテクノロジーは、チャットボット、ニュース記事の自動化、テキストベースのデータ抽出などの目的のために使用されます。  
さらに、自然言語処理技術は、メールをスパムまたは合法的なメッセージとして分類し、自然言語に基づいて文書を理解および分類できるようにする言語モデルを訓練しています。  
この分野は、自然言語コンピューティングの一部として確立されます。

②要約

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

model_name = "stabilityai/japanese-stablelm-instruct-ja_vocab-beta-7b"
tokenizer = AutoTokenizer.from_pretrained(model_name)

model = AutoModelForCausalLM.from_pretrained(
    model_name, 
    torch_dtype=torch.float16, 
    low_cpu_mem_usage=True, 
    device_map="auto"
    )

def build_prompt(user_query, inputs):
    sys_msg = "<s>[INST] <<SYS>>\nあなたは役立つアシスタントです。\n<<SYS>>\n\n"
    p = sys_msg + user_query + "\n\n" + inputs + " [/INST] "
    return p

user_inputs = {
    "user_query": "与えられた文章を要約して下さい",
    "inputs": "自然言語処理(Natural Language Processing, NLP)とは、人間が日常的に使っている自然言語をコンピュータに理解させ、解析や生成を行うための技術のことです。自然言語とは、私たちが普段話したり、書いたりしている言語、例えば日本語や英語などを指します。対照的に、プログラミング言語などは「人工言語」と呼ばれるもので、これは人間がコンピュータとコミュニケーションを取るために特別に設計された言語です。自然言語処理の目標は、テキストや音声データを含む自然言語の情報をコンピュータが理解し、活用できるようにすることです。具体的な応用例としては、検索エンジン、音声認識システム(例:スマートフォンの音声アシスタント)、機械翻訳(例:ウェブページの自動翻訳)、文章の自動要約、感情分析(例:商品レビューからの評判分析)などがあります。自然言語処理においては、言葉の意味を理解するために、文法や単語の意味、文脈などを解析する必要があります。例えば、「彼はバスで学校に行った」という文を考えた時、この文が何を意味しているかを理解するためには、「バス」という単語が乗り物を指していること、そして「学校に行った」という動作が「彼」に関連していることを把握する必要があります。これらを行うための技術として、形態素解析(文章を単語に分割する)、構文解析(文の構造や文法関係を解析する)、意味解析(単語や文の意味を理解する)、感情分析(テキストから感情や意見を判定する)などがあります。近年では、深層学習や機械学習の技術が発展しており、これらを活用してより高度な自然言語処理を行う研究やアプリケーションが多数存在します。"
}
prompt = build_prompt(**user_inputs)

input_ids = tokenizer.encode(
    prompt,
    add_special_tokens=False,
    return_tensors="pt"
)


tokens = model.generate(
    input_ids.to(device=model.device),
    max_new_tokens=128,
    temperature=0.99,
    top_p=0.95,
    do_sample=True,
)

out = tokenizer.decode(
    tokens[0][input_ids.size(1):],
    skip_special_tokens=True
)
print(out)

実行結果:

自然言語処理(NLP)とは、自然言語を生成するための技術です。
人工言語とは対照的に、自然言語は私たちが日常的に使っている言語です。
この技術は、テキストや音声データを含む自然言語をコンピュータが理解し、活用できるようにすることを目標としている

要約結果を比較してみます。

(入力)
自然言語処理(Natural Language Processing, NLP)とは、人間が日常的に使っている自然言語をコンピュータに理解させ、解析や生成を行うための技術のことです。
自然言語とは、私たちが普段話したり、書いたりしている言語、例えば日本語や英語などを指します。
対照的に、プログラミング言語などは「人工言語」と呼ばれるもので、これは人間がコンピュータとコミュニケーションを取るために特別に設計された言語です。
自然言語処理の目標は、テキストや音声データを含む自然言語の情報をコンピュータが理解し、活用できるようにすることです。
具体的な応用例としては、検索エンジン、音声認識システム(例:スマートフォンの音声アシスタント)、機械翻訳(例:ウェブページの自動翻訳)、文章の自動要約、感情分析(例:商品レビューからの評判分析)などがあります。
自然言語処理においては、言葉の意味を理解するために、文法や単語の意味、文脈などを解析する必要があります。
例えば、「彼はバスで学校に行った」という文を考えた時、この文が何を意味しているかを理解するためには、「バス」という単語が乗り物を指していること、そして「学校に行った」という動作が「彼」に関連していることを把握する必要があります。
これらを行うための技術として、形態素解析(文章を単語に分割する)、構文解析(文の構造や文法関係を解析する)、意味解析(単語や文の意味を理解する)、感情分析(テキストから感情や意見を判定する)などがあります。
近年では、深層学習や機械学習の技術が発展しており、これらを活用してより高度な自然言語処理を行う研究やアプリケーションが多数存在します。

(出力)
自然言語処理(NLP)とは、自然言語を生成するための技術です。
人工言語とは対照的に、自然言語は私たちが日常的に使っている言語です。
この技術は、テキストや音声データを含む自然言語をコンピュータが理解し、活用できるようにすることを目標としている

まとめ

最後までご覧いただきありがとうございました。

今回の記事では日本語LLMの1つであるjapanese-stablelm-instruct-ja_vocab-beta-7bの実装を紹介しました。