コンテンツへスキップ ナビゲーションに移動
つくもちブログ 〜Python&AIまとめ〜
  • 運営者情報
  • お問い合わせ
  • YouTube動画

【日本語LLM】Google ColabでLLM-jp-13Bを実装する

2023年10月21日 最終更新日時 : 2024年6月15日 tt-tsukumochi
  1. Topページ
  2. NLP
  3. 【日本語LLM】Google ColabでLLM-jp-13Bを実装する

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

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

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

目次
  • 1. LLM-jp-13Bの概要
  • 1.1. LLM-jp-13Bとは
  • 1.2. LLM-jp-13Bの性能
  • 2. llm-jp-13b-instruct-full-jaster-v1.0の実装
  • 2.1. 質問①:自然言語処理とは何か
  • 2.2. 質問②:日本で一番高い山はどこか?
  • 2.3. 質問③:富士山について詳しく解説して下さい
  • 3. llm-jp-13b-v1.0の実装
  • 3.1. 富士山について詳しく述べる
  • 4. まとめ

LLM-jp-13Bの概要

LLM-jp-13Bとは

LLM-jp-13Bは、10/20に発表されたNIIが主導するLLM-jpの一環として開発された大規模な言語モデルです。500名以上の自然言語処理及び計算機システムの研究者が集まり、ハイブリッド会議やオンライン会議、Slack等を通じて情報共有と共同研究開発を行っています。LLM-jpの目的は、オープンかつ日本語に強いLLMの構築とそれに関連する研究開発の推進、定期的な情報交換、組織横断的な連携の促進、そして成果物の公開です。

LLM-jp-13Bは、計算資源としてデータ活用社会創成プラットフォームmdxの12ノード(A100 96枚)を利用し、モデル構築にはMicrosoftのDeepSpeed技術が採用されています。学習とログの保存にはWeights & Biasesを用いており、モデルのパラメータ数は130億個にも及びます。

学習データ量は約3000億トークンで、日本語と英語のウェブコーパス、Wikipedia、プログラムコード等を含んでいます。これらのデータは、トークナイザーやウェブコーパスのフィルタリングツールを用いて整備されました。モデルのチューニングには、日本語と英語のインストラクションデータおよび和訳データを用い、複数の評価データに対して横断的な評価を行うフレームワークが構築されています。

しかし、LLM-jp-13Bはまだ研究開発の初期段階にあり、人間の意図に沿った出力を行うようにチューニングされていないため、そのまま実用的なサービスに供することを想定していません。安全性や倫理的な側面からの検討が更に必要です。

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

詳細:https://www.nii.ac.jp/news/release/2023/1020.html
モデル:https://huggingface.co/llm-jp

LLM-jp-13Bの性能

https://wandb.ai/llm-jp-eval/test-eval/reports/llm-jp—Vmlldzo1NzE0NjA1?accessToken=s09hm7xrqg43ls8i25am6t0r7iwjpninwzeelqqgbx53zivlm9s04ixfpv3xgiwm

llm-jp-13b-instruct-full-jaster-v1.0の実装

まずはインストラクションチューニングされたモデルから試していきます。

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

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

Open In Colab

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

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

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

!pip install transformers accelerate

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

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

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained(
    "llm-jp/llm-jp-13b-instruct-full-jaster-v1.0"
    )
model = AutoModelForCausalLM.from_pretrained(
    "llm-jp/llm-jp-13b-instruct-full-jaster-v1.0",
    device_map="auto",
    torch_dtype=torch.float16
    )

text = "自然言語処理とは何か"
text = text + "### 回答:"
tokenized_input = tokenizer.encode(text,
                                   add_special_tokens=False,
                                   return_tensors="pt"
                                   ).to(model.device)
with torch.no_grad():
    output = model.generate(
        tokenized_input,
        max_new_tokens=100,
        do_sample=True,
        top_p=0.95,
        temperature=0.7,
    )[0]
print(tokenizer.decode(output))

実行結果:

自然言語処理とは何か### 回答: 自然言語処理とは、コンピュータに人間が話す言葉を理解させること

質問②:日本で一番高い山はどこか?

text = "日本で一番高い山はどこか?"
text = text + "### 回答:"
tokenized_input = tokenizer.encode(text,
                                   add_special_tokens=False,
                                   return_tensors="pt"
                                   ).to(model.device)
with torch.no_grad():
    output = model.generate(
        tokenized_input,
        max_new_tokens=100,
        do_sample=True,
        top_p=0.95,
        temperature=0.7,
    )[0]
print(tokenizer.decode(output))

実行結果:

日本で一番高い山はどこか?### 回答:富士山

質問③:富士山について詳しく解説して下さい

text = "富士山について詳しく解説して下さい"
text = text + "### 回答:"
tokenized_input = tokenizer.encode(text,
                                   add_special_tokens=False,
                                   return_tensors="pt"
                                   ).to(model.device)
with torch.no_grad():
    output = model.generate(
        tokenized_input,
        max_new_tokens=100,
        do_sample=True,
        top_p=0.95,
        temperature=0.7,
    )[0]
print(tokenizer.decode(output))

実行結果:

富士山について詳しく解説して下さい### 回答: 山梨県と静岡県の県境にそびえる標高3776mの山

llm-jp-13b-v1.0の実装

インストラクションチューニングされていないモデルも試してみます。

富士山について詳しく述べる

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained(
    "llm-jp/llm-jp-13b-v1.0"
    )
model = AutoModelForCausalLM.from_pretrained(
    "llm-jp/llm-jp-13b-v1.0",
    device_map="auto",
    torch_dtype=torch.float16
    )

text = "富士山について詳しく述べる"
tokenized_input = tokenizer.encode(text,
                                   add_special_tokens=False,
                                   return_tensors="pt"
                                   ).to(model.device)
with torch.no_grad():
    output = model.generate(
        tokenized_input,
        max_new_tokens=1500,
        do_sample=True,
        top_p=0.95,
        temperature=0.7,
    )[0]
print(tokenizer.decode(output))

実行結果:

富士山について詳しく述べるが、その前に、富士山とは何かを説明しておこう。 
富士山は静岡県、山梨県、神奈川県の3県にまたがり、標高3776mの独立峰である。 
富士五湖の1つである河口湖から望む姿は、日本の象徴として知られる。 
日本国内の名山の中でも、最も美しい山との呼び声も高い。 
日本だけでなく世界的にも有名な山で、富士山は世界遺産に登録されている。 
富士山頂には、日本一高い標高を誇る神社の奥宮がある。 その名も「富士山本宮浅間大社」。 
この神社は、浅間大神を主祭神としており、浅間大神は富士山の神様である。 
富士山の山頂に浅間大社があるということは、富士山は浅間大社の神域であると言える。 
富士山は、浅間大社の神域であると同時に、信仰の対象でもあるのだ。 
浅間大社は、富士山の頂上にある神社で、富士山の神である浅間大神を祀っている。 
浅間大社は、富士山が噴火したときに、その噴煙で社殿が焼けてしまった。 
そこで、浅間大社の神職たちが、山頂にあった浅間大神の祠を、今の場所に移し祀った。 
富士山の神は、富士山の噴火を鎮めることを目的としている。 
そのため、浅間大社は、噴火を鎮めるために建てられた神社なのだ。 
富士山は、噴火を鎮めるために浅間大社が建てられた神社である。 
このような神社は他にはなく、富士山が特別な場所であることがわかる。 
富士山は、浅間大社の神域であり、信仰の対象である。 
浅間大社が富士山の噴火を鎮めるために建てられたことから、富士山は噴火を鎮める特別な場所であるといえるだろう。
富士山の御祭神は、火の神である火之神櫛真智命(ひのかみくしまちのみこと)様で、元々は富士山の頂上にあった浅間大神を祀っています。
浅間大神は、富士山の神様で、古くからの山岳信仰の対象であり、富士山が噴火する度に、浅間大社も大打撃を受けていた為、浅間大神を山麓にある富士山本宮浅間大社にお祀りし、その御神霊を富士山の噴火が鎮まるまで、お預かりしているということです。
富士山の麓にある浅間大社の参道には、多くのお土産物屋さんや飲食店が立ち並び、富士登山の時には、ここでお土産や飲食を楽しみながら、ゆっくりと登山をするのも良いでしょう。
(以下ループのため省略)

とても詳しく解説してもらうことができました。

まとめ

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

今回の記事では日本語LLMの1つであるLLM-jp-13Bの実装を紹介しました。

関連記事

【LangChain v0.2入門】第5回:エージェントの構築
 2024年6月18日
【LangChain v0.2入門】第4回:RAGの構築
 2024年6月17日
【LangChain v0.2入門】第3回:チャットボットの作り方
 2024年6月16日
【LangChain v0.2入門】第2回:シンプルな言語モデル(LLM)アプリケーションの構築
 2024年6月15日
【LangChain v0.2入門】第1回:LangChainのユースケース
 2024年6月14日
【LLM】Google ColabでPhi-3-mediumを動かす(日本語)
 2024年5月24日
【LLM】Google ColabでPhi-3-miniを動かす(日本語)
 2024年4月26日
【日本語LLM】Google Colabでsuzume-llama-3-8B-japanese-ggufを動かす
 2024年4月23日
【日本語LLM】Google ColabでJapanese-Starling-ChatV-7Bを動かす
 2024年4月19日
ChatGPTを超える性能?話題のAI『Claude 3』を徹底検証!
 2024年3月9日
カテゴリー
NLP、Python、transformers
タグ
ChatGPTllm-jp-13bLLM実装transformers自然言語処理
前の記事
【Stable Diffusion】SDXLによる画像生成入門【画像生成】
2023年10月19日
次の記事
【3D】Google colabでDreamGaussianによる3Dモデル生成を実装する
2023年10月22日
  • 免責事項
  • プライバシーポリシー
  • お問い合わせ
  • 運営者情報
  • ギャラリー
  • Twitter
  • YouTube

Copyright © つくもちブログ 〜Python&AIまとめ〜 All Rights Reserved.

  • 運営者情報
  • お問い合わせ
  • YouTube動画

最近の投稿

【G検定2025】試験当日も使える! 187の要点&500+キーワード集【新シラバス対応】(サンプル)
2025年1月7日
保護中: 【G検定2025】試験当日も使える! 187の要点&500+キーワード集【新シラバス対応】(全文)
2025年1月7日
【G検定2024最新】試験当日も使える! 187項目の要点整理&試験対策カンペ【新シラバス対応】
2024年10月24日
【G検定】MSE(平均二乗誤差)・RMSE(二乗平均平方根誤差)・MAE(平均絶対値誤差)
2024年8月3日
【G検定】割引率
2024年7月30日
【G検定】マルコフ決定過程
2024年7月30日
【G検定】方策勾配法
2024年7月28日
【G検定】UCB 方策
2024年7月28日
【G検定】REINFORCE
2024年7月23日
【G検定】次元削減
2024年7月23日
  • MENU
  • HOME
  • お問い合わせ
PAGE TOP