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

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

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

Deepreneur-blue-lizardの概要

Deepreneur-blue-lizardとは

Deepreneur-blue-lizardは、MetaのLlama-2-7bに対して、Wikipediaや書籍等の日本語の学習データを用いて追加事前学習と独自データによるファインチューニングを実施したモデルです。70億パラメータと非常に軽量なモデルであるにも関わらず、JGLUE(日本語タスクにおける評価ベンチマーク)を用いた評価では、ChatGPT-3.5を超えるスコアが算出されており、公開されている日本語モデルの中では最高性能になります。

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

Deepreneur-blue-lizard の実装

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

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

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

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

!pip install -U transformers accelerate

トークナイザーとモデルを準備します。

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

B_INST, E_INST = "[INST]", "[/INST]"
B_SYS, E_SYS = "<<SYS>>\n", "\n<</SYS>>\n\n"
DEFAULT_SYSTEM_PROMPT = "あなたは誠実で優秀な日本人のアシスタントです。"

model_name = "Deepreneur/blue-lizard"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name,
    trust_remote_code=True,
    torch_dtype=torch.bfloat16,
)

if torch.cuda.is_available():
    model = model.to("cuda")

質問応答

text = "日本で一番高い山について解説してください。"
prompt = "{bos_token}{b_inst} {system}{prompt} {e_inst}".format(
  bos_token=tokenizer.bos_token,
  b_inst=B_INST,
  system=f"{B_SYS}{DEFAULT_SYSTEM_PROMPT}{E_SYS}",
  prompt=text,
  e_inst=E_INST,
)


with torch.no_grad():
    token_ids = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")
    output_ids = model.generate(
        token_ids.to(model.device),
        max_new_tokens=256,
        pad_token_id=tokenizer.pad_token_id,
        eos_token_id=tokenizer.eos_token_id,
    )
output = tokenizer.decode(output_ids.tolist()[0][token_ids.size(1) :], skip_special_tokens=True)
print(output)

実行結果:

富士山は、日本の本州に位置する最高峰で、標高は1,756メートル(5,929フィート)です。
山頂は氷河や岩ーなどの尖った崖りが特徴で、周囲の地形からは異なる姿が見えます。
富士山は、数え切れないほどの山小屋や登山口、ハイキングコースがあり、人気のある目的地です。

要約

text = """

以下の文章を箇条書きで要約してください。

富士山(ふじさん)は、静岡県(富士宮市、富士市、裾野市、御殿場市、駿東郡小山町)と山梨県(富士吉田市、南都留郡鳴沢村)に跨る活火山である。
標高3776.12 m、日本最高峰(剣ヶ峰)の独立峰で、その優美な風貌は日本国外でも日本の象徴として広く知られている。
数多くの芸術作品の題材とされ芸術面のみならず、気候や地層など地質学的にも社会に大きな影響を与えている。
懸垂曲線の山容を有した玄武岩質成層火山で構成され、その山体は駿河湾の海岸まで及ぶ。
古来より霊峰とされ、特に山頂部は浅間大神が鎮座するとされたため、神聖視された。
噴火を沈静化するため律令国家により浅間神社が祭祀され、浅間信仰が確立された。
また、富士山修験道の開祖とされる富士上人により修験道の霊場としても認識されるようになり、登拝が行われるようになった。
これら富士信仰は時代により多様化し、村山修験や富士講といった一派を形成するに至る。
現在、富士山麓周辺には観光名所が多くある他、夏季シーズンには富士登山が盛んである。
日本三名山(三霊山)、日本百名山[2]、日本の地質百選に選定されている。
また、1936年(昭和11年)には富士箱根伊豆国立公園に指定されている。
その後、1952年(昭和27年)に特別名勝、2011年(平成23年)に史跡、
さらに2013年(平成25年)6月22日には関連する文化財群とともに「富士山-信仰の対象と芸術の源泉」の名で世界文化遺産に登録された。

"""

prompt = "{bos_token}{b_inst} {system}{prompt} {e_inst}".format(
  bos_token=tokenizer.bos_token,
  b_inst=B_INST,
  system=f"{B_SYS}{DEFAULT_SYSTEM_PROMPT}{E_SYS}",
  prompt=text,
  e_inst=E_INST,
)


with torch.no_grad():
    token_ids = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")
    output_ids = model.generate(
        token_ids.to(model.device),
        max_new_tokens=512,
        pad_token_id=tokenizer.pad_token_id,
        eos_token_id=tokenizer.eos_token_id,
    )
output = tokenizer.decode(output_ids.tolist()[0][token_ids.size(1) :], skip_special_tokens=True)
print(output)

実行結果:

富士山は、静岡県と山梨県の2つの県にまたがる活火山である。
標高は3776.12メートル、日本で最も高い峰である。
その風貌は日本の象徴として知られています。気候や地層に影響を与え、芸術にも題材とされています。
山頂部は神聖視され、浅間大神が鎮座するとされているため、律令国家によって浅間神社が祭祀され、浅間信仰が確立されました。
富士山は、日本の三名山、百名山、地質百選の選定に加え、1936年(昭和11年)には富士箱根伊豆国立公園に指定され、2011年(平成23年)には特別名勝、2013年(平成25年)には史跡に指定されました。
また、2013年6月22日には、関連する文化財群とともに富士山-信仰の対象と芸術の源泉として世界文化遺産に登録されました。

翻訳(日本語→英語)

text = """

以下の文章を日本語から英語に翻訳してください。

日本で一番高い山は富士山です。富士山は山梨県と静岡県の境目にある活火山で、標高は3,776メートルです。
日本最高峰だけではなく世界的にも有名な活火山で、「日本の象徴」とも言われています。

"""

prompt = "{bos_token}{b_inst} {system}{prompt} {e_inst}".format(
  bos_token=tokenizer.bos_token,
  b_inst=B_INST,
  system=f"{B_SYS}{DEFAULT_SYSTEM_PROMPT}{E_SYS}",
  prompt=text,
  e_inst=E_INST,
)


with torch.no_grad():
    token_ids = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")
    output_ids = model.generate(
        token_ids.to(model.device),
        max_new_tokens=512,
        pad_token_id=tokenizer.pad_token_id,
        eos_token_id=tokenizer.eos_token_id,
    )
output = tokenizer.decode(output_ids.tolist()[0][token_ids.size(1) :], skip_special_tokens=True)
print(output)

実行結果:

富士山は、日本で最も高い山であり、標高は3,776メートル(22,023フィート)です。
山梨県と静岡県の境界に位置し、活火山です。

翻訳(日本語→英語)

text = """

以下の文章を英語から日本語に翻訳してください。

The highest mountain in Japan is Mount Fuji. 
Mount Fuji is located at the boundary of Yamanashi and Shizuoka prefectures in Japan, 
and it has an elevation of 3776 meters above sea level. 
It is one of the active volcanos that are well known around the world as a symbol of Japan.


"""

prompt = "{bos_token}{b_inst} {system}{prompt} {e_inst}".format(
  bos_token=tokenizer.bos_token,
  b_inst=B_INST,
  system=f"{B_SYS}{DEFAULT_SYSTEM_PROMPT}{E_SYS}",
  prompt=text,
  e_inst=E_INST,
)


with torch.no_grad():
    token_ids = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt")
    output_ids = model.generate(
        token_ids.to(model.device),
        max_new_tokens=512,
        pad_token_id=tokenizer.pad_token_id,
        eos_token_id=tokenizer.eos_token_id,
    )
output = tokenizer.decode(output_ids.tolist()[0][token_ids.size(1) :], skip_special_tokens=True)
print(output)

実行結果:

富士山は日本で最も高い山で、標高は3776メートルです。
富士山は、山梨県と静岡県の県境に位置し、世界的に有名な活火山の一つであり、日本の象徴でもあります。

まとめ

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