【ELYZA-japanese-Llama-2-7b・japanese CodeLlama 7b】東大スタートアップの日本語LLMを解説

- ELYZAは東京大学発スタートアップによる日本語特化型LLMで、Llama 2をベースに開発
- 独自評価データセット「ELYZA-tasks-100」で日本語モデル中トップクラスの性能を記録
- GPT-4oには及ばないが、今後の大型モデル開発で性能向上が期待される
2023年8月29日に日本語版LLMの「ELYZA-japanese-Llama-2-7b」がリリースされました。
日々AIの最新情報にアンテナを張っている皆さんなら当然ご存知ですよね??
今回は、まだELYZA-japanese-Llama-2-7bを知らないという方のために、導入方法と実際に使ってみた様子を紹介します。「実際に使ってみた」パートでは、日本語検定一級を受験させてみたので、ぜひ最後までご覧ください!
\生成AIを活用して業務プロセスを自動化/
ELYZAとは?
東京大学・松尾研究室発のAIスタートアップのELYZA (イライザ) が日本語版大規模言語モデル「ELYZA-japanese-Llama-2-7b」をリリースしました。
リリースされたモデルは以下の4つです。
| モデル | 詳細 |
|---|---|
| ELYZA-japanese-Llama-2-7b | MetaのLlama-2-7b-chatに対して、約180億トークンの日本語テキストで追加事前学習を行ったモデルです。学習に用いたのは、OSCARやWikipedia等に含まれる日本語テキストデータです。 |
| ELYZA-japanese-Llama-2-7b-instruct | ユーザーからの指示に従い様々なタスクを解くことを目的として、ELYZA-japanese-Llama-2-7bに対して事後学習を行ったモデルです。 |
| ELYZA-japanese-Llama-2-7b-fast | Llama 2に日本語の語彙を追加して事前学習を行ったモデルです。 |
| ELYZA-japanese-Llama-2-7b-fast-instruct | ELYZA-japanese-Llama-2-7b-fastに対して事後学習を行ったモデルです。 |
このモデルはLlama-2-7b-chat-hfをベースとした70億パラメータの商用利用可能な日本語言語モデルです。
Llama-2-7b-chat-hfをベースにした理由は、SFT(Supervised Fine-Tuning)やRLHF(Reinforcement Learning with Human Feedback)が実施されているので、指示追従機能や出力の安全性が高いからです。
Llama 2は、超大規模な事前学習がなされており、優れた言語能力や知識を備えていることから、OSCARやWikipediaなどの日本語データを少量学習させるだけで、高性能な日本語LLMが開発できるというわけです!
ここで、いくつかのLLMと概要を比較してみましょう。
| ELYZA-japanese-Llama-2-7b-instruct | GPT4o | Llama 2 | Weblab-10b | |
|---|---|---|---|---|
| パラメーター数 | 7B | 不明 | 1.37T | 10B |
| 処理できるトークン数 | – | 不明 | 16,000(13,000文字) | – |
| 開発会社 | ELYZA | OpenAI | Meta | 東大松尾研究室 |
| 商用利用 | 可 | 可 | 可 | 可 |
| ライセンス | Llama 2 Community License | プロプライエタリソフトウェア | Llama 2 Community License | cc-by-nc-4.0 |
パラメータ数はLlama 2と比較するとやはり少なめでしょうか。
しかし、ELYZA-tasks-100という独自のモデル評価データセットで行ったテストでは、日本語モデルの中で最高水準を誇っています!
このデータセットには以下の特徴があります。
- 複雑な指示・タスクを含む100件の日本語データ
- 役に立つAIアシスタントとして、丁寧な出力が求められる
- 全てのデータに対して評価観点がアノテーションされており、評価の揺らぎを抑えることが期待される
一刻も早く使ってみたい!と思ったはず。ということで実際に導入していきましょう。
なお、その他の日本語LLMについて詳しく知りたい方は、以下の記事をご覧ください。

ELYZA-japanese-Llama-2-7bの使い方
今回の実装ではgoogle colaboratoryを使用しました。
実装にはNVIDIAのGPUが必要です。今回はNVIDIA A100を使用しました。
LLMの使用にはLangChainを使用しています。
#環境構築
!pip install langchain-community langchain-core
!pip install transformers
from langchain import HuggingFacePipeline, PromptTemplate, LLMChain
from langchain.prompts import (
ChatPromptTemplate,
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
)
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
import torch
from transformers import LlamaForCausalLM, LlamaTokenizer次に、使用するモデル名の定義と実行するタスクの指定をします。
# 基本パラメータ
model_name = "elyza/ELYZA-japanese-Llama-2-7b-instruct"
task = "text-generation"GPU の確認をします。
# GPUの確認
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
device
device(type='cuda')トークナイザとモデルの読み込み
# モデルのダウンロード
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name).to(device)テキスト生成のためのパイプラインをセットアップ
# LLMs: langchainで上記モデルを利用する
pipe = pipeline(
task,
model=model,
tokenizer=tokenizer,
device=0, # Number of GPU Device
framework='pt', # Use PyTorch
max_new_tokens=1024,
)
llm = HuggingFacePipeline(pipeline=pipe)これでモデルのダウンロード及びロードは完了です。早速プロンプトを入力して、実際に使っていきましょう!
ELYZA-japanese-Llama-2-7bを実際に使ってみた
プロンプトテンプレートを作成します。
# Prompts: プロンプトを作成
template = "<s>[INST] <<SYS>>あなたはユーザの質問に回答する優秀なアシスタントです。
以下の質問に可能な限り丁寧に回答してください。 <</SYS>>\n\n{question}[/INST]"
prompt = PromptTemplate.from_template(template)プロンプトを入力します。
# Chains: llmを利用可能な状態にする
llm_chain = LLMChain(prompt=prompt, llm=llm, verbose=True)
question = "カレーライスとは何ですか?"
llm_chain.run({"question":question})出力結果

自然な日本語になっています。
導入が難しいという方は以下のデモからも使用できるので気軽に使ってみてください。
ELYZA-japanese-Llama-2-7bの日本語能力を検証してみた
ELYZAは日本語特化型LLMなので日本語検定1級の問題を解かせてみます。他にもGPT-4o、Weblab-10bにも同じ問題を解かせて比較してみたいと思います。日本語検定一級に合格できるのはどのLLMでしょうか!
まず1問目として、以下の問題を解いてもらいました。
第1問
【 】のようなとき、それぞれの( )部分はどのような言い方をすればよいでしょうか。最も適切なものを選んで、番号で答えてください。
一、
【夫婦連名で贈り物を送ってきた知人への礼状で】
ご厚志誠にありがとうございます。ご( )にもくれぐれもよろしくお伝えくださいませ。
①令慈 ②令人 ③令閨 ④令堂
二、
【幹事に同窓会への欠席を伝える葉書で】
今回は参加がかないませんが、ご( )をお祈り申し上げます。
①盛業 ②盛況 ③盛行 ④盛会ちなみに、この問題の答えはそれぞれ以下の通りです。
答え
一、 ③令閨
二、 ④盛会では、順番に見ていきましょう。
ELYZA-japanese-Llama-2-7b-instructの回答

不正解…ですが、問題文は理解してくれているようです。
GPT-4oの回答

正解です!しっかりと解説もついていて、わかりやすいですね。
Weblab-10bの回答

こちらは不正解です。
これまでの結果を表にまとめてみました。
| 答え | ELYZA | GPT-4o | Weblab-10b | |
|---|---|---|---|---|
| 一 | ③ | × | ⚪︎ | × |
| 二 | ④ | × | ⚪︎ | × |
問題が難しかったせいか、GPT-4o以外は不正解という結果になってしまいました…。Weblab-10bは回答しかありませんでしたが、ELYZAとGPT4oは問題文を理解して出力してくれていますね!
気を取り直して第2問にいきましょう!
可能表現を意味・用法の観点からA・B・Cの三類に分けました。それぞれの類にあげた例文を参考にして、ア~ウがA・B・Cのいずれに当てはまるかを
記号で答えてください。
【Aの類】
これは毒がなく、食べられるきのこだ。
【Bの類】
ここは禁煙ではないので、たばこが吸える。
【Cの類】
彼は語学の才能があり、六か国語が話せる。
ア、橋が架かったので、向かいの島に歩いて渡れるようになった。
イ、あの人は、百キロの荷物が担げる怪力の持ち主だ。
ウ、茶色く濁っていて、とても飲める水ではないと思った。
答え
ア、 B
イ、 C
ウ、 AELYZA-japanese-Llama-2-7b-instructの回答

不正解ですね。
問題文を理解しているような感じで出力されましたが、よく読むとそれっぽい文章がならんでいるだけで、きちんと理解していないようでした。
GPT-4の回答

完璧ですね。言う事無しです!
Weblab-10bの答え

問題文が複雑すぎたのか、理解すらままなりませんでした。
結果は以下の通りです。
| 答え | ELYZA | GPT-4o | Weblab-10b | |
|---|---|---|---|---|
| ア | B | × | ⚪︎ | × |
| イ | C | × | ⚪︎ | × |
| ウ | A | × | ⚪︎ | × |
GPT-4oの理解力がよく分かる結果になりました。ELYZAも文章を理解しようとしていることが出力結果から読み取れました。
続いて第3問です!
__部分の言葉に対して、一は置き換え可能な、意味の最も類似した語を、二は( )に入る、対照的な意味を表す語を選んで、それぞれ番号で答えてください。
《意味の類似した語》
一、
彼女の博士論文は極めて精緻であり、論述を尽くして余蘊がない。
①誤謬がない②不足がない③無理がない④不満がない
《対照的な意味を表す語》
二、
ここは北に富士山を( )し、南に駿河湾を俯瞰できる、実に見事な景勝の地だ。
①仰望 ②凝視 ③展望 ④遠望
答え
一、 ②不足がない
二、 ①仰望ELYZA-japanese-Llama-2-7b-instructの回答

こちらは少し難しかったせいか理解すらできていないようです。
GPT-4oの回答

正解です!すごいですね!
Weblab-10bの回答

こちらは不正解ですが、問題文は理解してくれています。
| 答え | ELYZA | GPT-4o | Weblab-10b | |
|---|---|---|---|---|
| 一 | ② | × | ⚪︎ | × |
| 二 | ① | × | ⚪︎ | × |
結果、GPT-4oのみ全問となりました!
さすが、GPT-4oといったところでしたが、ELYZAも問題を理解しようとしていることも見て取れたので、今後に期待です!
なお、今回比較対象にしたWeblab-10bについて詳しく知りたい方は、以下の記事をご覧ください。

ELYZA-japanese-CodeLlama-7bの概要
2023年11月15日、ELYZA社からELYZA-japanese-CodeLlama-7bが公開されました。

ELYZA-japanese-CodeLlama-7bは、ELYZA社がCodeLlama-7b-Instructをベースに日本語の追加事前学習を行って開発したコード生成・補完に特化した日本語LLMです。
このモデルの追加事前学習は、ELYZA-japanese-Llama2-7bと同様のデータや手法を用いており、OSCARやWikipediaなどの日本語データを約180億トークン使用しています。
また、この事前学習を行ったELYZA-japanese-CodeLlama-7bのほかに、ELYZA-japanese-CodeLlama-7b-instructという、ELYZA独自の事後学習を行い、さらに性能を向上させたモデルも公開されています。
ELYZA-japanese-CodeLlama-7bは、Llama 2 Community License に準拠しており、Acceptable Use Policy に従えば、研究および商業目的での利用が可能です。
続いてELYZA-japanese-CodeLlama-7bの性能について紹介します。
性能評価は、ELYZA-japanese-CodeLlama-7b-instructに対して、コード生成能力に対する評価と日本語生成能力に対する評価の2種類が実施され、その結果が公開されています。
ここでは結果のみ紹介しますが、詳しい内容を知りたい方は以下のページをご覧ください。
「Code Llama」をベースとした商用利用可能な日本語LLM「ELYZA-japanese-CodeLlama-7b」を公開しました
まずは、HumanEvalによるコード生成能力評価結果です。
この評価では、1つの問題に対して1つのテキストをgreedyに生成して評価するpass@1を指標として用いています。
以下が評価の結果です。
この結果を見ると、CodeLlama-7b-Instructとほぼ同等のコード生成能力を保持していることが分かります。
続いて、ELYZA Tasks 100 による日本語生成能力評価結果です。
この評価では、ELYZA Tasks 100というモデルの日本語能力の評価に特化した、日本語instructionモデル評価データセットです。
以下が、評価のなかで行われた入力と出力のテストケースです。
入力
仕事の熱意を取り戻すためのアイデアを5つ挙げてください。CodeLlama-7b-Instruct
Sure, here are five ideas to boost your work enthusiasm:
1. Set achievable goals: Setting specific, measurable, and achievable goals can help you stay motivated and focused. Break down larger goals into smaller, manageable tasks to help you make progress and feel a sense of accomplishment.
2. Find meaning in your work: When you feel that your work has meaning and purpose, you are more likely to be engaged and motivated. Reflect on why your work is important and how it contributes to the bigger picture.
3. Take breaks and practice self-care: It's important to take breaks and practice self-care to avoid burnout. Schedule time for activities that bring you joy and help you recharge, such as exercise, reading, or spending time with loved ones.
4. Connect with colleagues and coworkers: Building positive relationships with your colleagues and coworkers can help you feel more engaged and motivated in your work. Make an effort to collaborate, communicate, and support one another.
5. Celebrate your successes: Acknowledge and celebrate your achievements, no matter how small they may seem. This can help you feel a sense of accomplishment and motivation to continue striving for excellence.
Remember, it's important to find what works best for you and your unique situation. Experiment with different strategies to find what helps you stay motivated and engaged in your work.ELYZA-japanese-CodeLlama-7b
仕事の熱意を取り戻すためのアイデアを5つご紹介します。
1. 目標を明確にする: 仕事の目標を明確にすることで、その目標を達成するために何をすべきかを考えることができます。
2. 仕事へのモチベーションを高める: 仕事へのモチベーションを高めるために、自分が取り組むことによって得られる成果を考えることができます。
3. 仕事に取り組む際のルーチンを整える: 仕事に取り組む際のルーチンを整えることで、仕事に取り掛かるまでの時間を短縮することができます。
4. 仕事に取り組む際のストレスを軽減する: 仕事に取り組む際のストレスを軽減するために、仕事に取り組む際の環境を整えることができます。
5. 仕事への意欲を高める: 仕事への意欲を高めるために、自分の仕事に対する誇りや自信を持つことができます。この結果を比較すると、CodeLlama-7b-Instructでは日本語を入力として理解出来ているように見える一方、日本語として出力することが出来ていません。
一方、ELYZA-japanese-CodeLlama-7b-Instructでは、自然な日本語による出力が行われていることが分かります。
また、このテストケースの出力を、GPT-4によって評価した結果も公開されています。
以下がその結果です。

この評価では、参考程度にGPT-4, GPT-3.5 turboの結果も記載されており、ELYZA-japanese-Llama-2-7b-instructとELYZA-japanese-Llama-2-7b-fast-instructという純粋な日本語LLMの結果も記載されています。
結果は、ELYZA-japanese-CodeLlama-7b-instructはELYZA-japanese-Llama-2-7b-fast-instructとほぼ同等ですが、ELYZA-japanese-Llama-2-7b-instructには少し劣る程度の性能でした。
最後に、日本語の能力を拡張したELYZA-japanese-CodeLlama-7b-instructがどのような目的で使えるかを定性的に評価した結果です。
ELYZA-japanese-CodeLlama-7bでは、ベースモデルではできなかったコードを日本語で解説させることができます。
以下の入力を与えて生成される出力を評価します。
エラトステネスの篩についてサンプルコードを示し、解説してください。
結果は、少し誤った表現をしているところはあるものの、基本的なアルゴリズムの説明はしっかりできています。
よって、まだ若干精度に問題はありますが、人間がコードを理解するのを支援するツールとして利用できる可能性を示しました。
ここまでは公式発表をもとに性能を紹介してきましたが、ここからは実際に使ってみてその結果を検証していきます。
なお、MetaのCodeLlama-7bについて詳しく知りたい方は、下記の記事を合わせてご確認ください。
→【Code Llama】最強コード生成AIの使い方と実践を解説
ELYZA-japanese-CodeLlama-7bの使い方
ELYZA-japanese-CodeLlama-7bは、HuggingFaceのスペースで誰でも使えるように公開されており、以下のリンクからアクセスするだけで使用できます。
ELYZA-japanese-CodeLlama-7b-instruct-demo
また、ローカルにインストールする方法もあるので、そちらも説明します。
まず、必要なパッケージをインストールします。
pip install torch transformers次に以下のコードを実行することで、モデルとトークナイザーのロードおよび推論の実行を行います。
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
B_INST, E_INST = "[INST]", "[/INST]"
B_SYS, E_SYS = "<<SYS>>\n", "\n<</SYS>>\n\n"
DEFAULT_SYSTEM_PROMPT = "あなたは誠実で優秀な日本人のアシスタントです。"
text = "任意のプロンプトを入力してください"
model_name = "elyza/ELYZA-japanese-CodeLlama-7b-instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype="auto")
if torch.cuda.is_available():
model = model.to("cuda")
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=768,
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)ローカルで実行する際は、かなりのリソースを消費するので、Google Colab ProでA100GPUを使用するか、有志の方が作成したGPTQモデルを使用することをお勧めします。
それでは実際に使っていきましょう!
ELYZA-japanese-CodeLlama-7bの推しポイントであるコード生成能力と日本語能力を検証
今回比較するモデルの概要の比較です。
| ELYZA-japanese-CodeLlama-7b | GPT-3.5 | GPT-4 | |
|---|---|---|---|
| パラメーター数 | 7B | 175B | 7B |
| トークン数 | – | 2,048(5,000文字) | – |
| 開発会社 | ELYZA | OpenAI | ELYZA |
| 商用利用 | 可 | 可 | 可 |
| ライセンス | Llama 2 Community License | プロプライエタリソフトウェア | Llama 2 Community License |
| 日本語対応 | 可 | 可 | 可 |
比較検証では以下の入力を行い、出力結果を比較します。
モンテカルロ法で円周率を求めるコードをTypeScriptで書いてください。フィボナッチ数列を100以上の数値が出るまで出力するコードを書いてください。以下のコードについて日本語で説明してください。
import random
# じゃんけん判定関数
def judge():
# じゃんけんの手のリスト
hand = ["グー", "チョキ", "パー"]
# プレイヤーの手を入力
x = input("手を選んでください\n0:グー, 1:チョキ, 2:パー\n\n")
x = int(x)
# コンピュータの手をランダムに決定
y = random.randint(0, 2)
# 双方の出した手を表示
print("\nあなたの手:{}".format(hand[x]))
print("コンピュータの手:{}\n".format(hand[y]))
score = (x - y + 3) % 3
if score == 0:
j = "引き分けです"
elif score == 1:
j = "あなたの負けです"
else:
j = "あなたの勝ちです"
print(j)
# 勝敗を表示
judge()それでは早速検証していきましょう!
モンテカルロ法
ELYZA-japanese-CodeLlama-7b-instruct
以下はTypeScriptで書かれたモンテカルロ法で円周率を求めるコードです。
function calculatePi() {
let insideCircleCount = 0;
for (let i = 0; i < 100000; i++) {
const x = Math.random();
const y = Math.random();
const distanceFromCenter = Math.sqrt(x * x + y * y);
if (distanceFromCenter < 1) {
insideCircleCount++;
}
}
return 4 * insideCircleCount / 100000;
}
console.log(calculatePi());
このコードは、100,000回のモンテカルロ法の実行結果を用いて円周率を計算しています。ELYZA-japanese-Llama-2-7b-instruct
モンテカルロ法で円周率を求めるコードをTypeScriptで記述します。
まず、モンテカルロ法とは何かについて説明します。モンテカルロ法とは、確率的な問題を解くための手法の一つです。確率的な問題とは、出目の組み合わせの個数を求めるような問題を指します。モンテカルロ法は、確率的な問題を回数を繰り返し行うことで、値を近似値として求める手法です。
以下は、TypeScriptで記述したモンテカルロ法で円周率を求めるコードです。
function monteCarlo(numTrials: number, func: (number) => number): number {
let total: number = 0;
for (let i = 0; i < numTrials; i++) {
let result = func(i);
total += result;
}
return total / numTrials;
}
function monteCarloForCircle(numTrials: number): number {
return monteCarlo(numTrials, (i: number) => i * i);
}
console.log(monteCarloForCircle(1000)); // 3.141592653589793
上記のコードでは、モンテカルロ法を使用して円周率を求めています。モンテカルロ法では、numTrials回の繰り返しを行います。そのため、monteCarloForCircle関数では、numTrialsを1GPT-3.5
モンテカルロ法を使用して円周率を求める TypeScript コードは以下のようになります。このコードは、ランダムな点を円の内部にランダムにプロットし、その割合から円の面積を推定して円周率を計算します。
typescript
function estimatePi(numSamples: number): number {
let insideCircle = 0;
for (let i = 0; i < numSamples; i++) {
const x = Math.random();
const y = Math.random();
// ランダムに生成した点 (x, y) が円の内部にあるかどうかをチェック
if (x * x + y * y <= 1) {
insideCircle++;
}
}
// 円の内部にプロットされた点の割合を計算して円周率を推定
const piEstimation = (insideCircle / numSamples) * 4;
return piEstimation;
}
const numSamples = 1000000; // サンプル数を適宜調整
const estimatedPi = estimatePi(numSamples);
console.log(`Estimated Pi: ${estimatedPi}`);
このコードでは、estimatePi 関数がランダムな点を生成し、円の内部にあるかどうかを判定して、円周率を推定します。サンプル数 (numSamples) を増やすことで、より正確な推定が得られる可能性が高まります。生成されたコードに関しては、ELYZA-japanese-Llama-2-7b-instructのみ正しい結果が得られないコードが生成されました。
コードの一番最後に、コードを実行した際の出力が書かれているようですが、実際に実行しても同様の結果は得られないので悪質ですね。
一方、コードの説明やモンテカルロ法の説明は、ELYZA-japanese-Llama-2-7b-instructが最も詳細に書かれており、ELYZA-japanese-CodeLlama-7b-instructが最もシンプルな説明でした。
この結果からも、ELYZA-japanese-CodeLlama-7b-instructはコード生成・補完に特化したモデルということがわかります。
フィボナッチ数列
ELYZA-japanese-CodeLlama-7b-instruct
以下はフィボナッチ数列を100以上の数値が出るまで出力するコードです。
n = 0
a = 0
b = 1
while b < 100:
n = a + b
print(n)
a = b
b = n
このコードは、フィボナッチ数列の最初の2つの数値を用いて、それ以降の数値を計算しています。ELYZA-japanese-Llama-2-7b-instruct
フィボナッチ数列とは、前の2つの数値の合計からなる数列のことです。
例えば、1、1、2、3、5、8、13、21、34、55、89、144、233、377、610、987、1597、2584、4181、6735、10946、17611、28457、46153、75937、121683、196833、314117、510271、821437、1332631、2149383、3422533、5524197、8994911、14443263、24531008、39082516、60227020、99999999のようになります。
以下のようにfor文を用いて、100以上の数値が出るまで繰り返します。
for i in range(1, 101):
if fibonacci_series[i] > 100:
break
print(fibonacci_series[i])GPT-3.5
以下は、Pythonでフィボナッチ数列を計算し、100以上の数値が出るまで出力するコードの例です。
python
# フィボナッチ数列を計算する関数
def fibonacci(n):
if n <= 0:
return 0
elif n == 1:
return 1
else:
return fibonacci(n-1) + fibonacci(n-2)
# フィボナッチ数列を100以上の数値が出るまで出力
n = 0
while True:
fib = fibonacci(n)
if fib > 100:
break
print(fib)
n += 1
このコードは、fibonacci 関数を定義して、指定されたインデックスのフィボナッチ数を計算します。そして、while ループを使用して、100以上の数値が出るまでフィボナッチ数列を計算し、出力します。ループは条件を満たすまで続けられます。
このコードを実行すると、100以上の数値が出るまでのフィボナッチ数列が表示されます。結果は、ELYZA-japanese-CodeLlama-7b-instructのみが私の意図した出力をするコードを生成してくれました。
他2つは、89までしか出力しないコードだったので、入力の意図を理解しきれていません。
この結果だけ見れば、ELYZA-japanese-CodeLlama-7b-instructはGPT-3.5より精度の高い出力をすることが出来るようです。
じゃんけん
ELYZA-japanese-CodeLlama-7b-instruct
このコードは、プレイヤーとコンピュータがじゃんけんをするという内容です。以下に説明します。
まず、最初に、じゃんけんに用いる手のリストを作成しています。このリストには、「グー」、「チョキ」、「パー」の3つの手が含まれています。
次に、プレイヤーの手を入力するための入力文を表示しています。ここでは、0から2までの数値を入力して、それに対応する手を選択するように指示しています。
次に、コンピュータの手をランダムに決定しています。ここでは、randomモジュールのrandint関数を用いて、0から2までの整数を生成しています。
そして、双方の出した手を表示しています。ここでは、前述の手のリストを用いて、数値から実際の手を取得しています。
最後に、プレイヤーの勝敗を判定しています。ここでは、手の数値の差を取った値をscoreに代入しています。
ここで、scoreが0のときは引き分け、1のときはプレイヤーの負け、それ以外の場合はプレイヤーの勝ちとなります。ELYZA-japanese-Llama-2-7b-instruct
このプログラムは、2人で順番に手を出して、勝敗を競うゲームを表示するものです。
まず、プレイヤーはじゃんけんの手を選択します。選択肢は「グー」、「チョキ」、「パー」の3つです。
選択した手を入力してくると、プログラムはその手をランダムに選択した手と比べて、勝敗を表示します。勝ったら「勝ち」、負けたら「負け」、引き分けだったら「引き分け」と表示します。
ただし、このプログラムではじゃんけんではなく、手をランダムに決定する方法を使っています。
この方法は、人間がランダムに手を決めるよりも、コンピュータの方が有利になるように設計されています。GPT-3.5
このコードは、コンピュータとじゃんけんをするシンプルなプログラムです。以下に、コードの各部分を説明します。
import random:Pythonの組み込みモジュール random をインポートしています。これを使用してランダムな数を生成します。
def judge()::judge という名前の関数を定義しています。この関数は、じゃんけんのゲームを実行し、勝敗を判定する役割を担います。
hand リスト:hand というリストに、じゃんけんの手(グー、チョキ、パー)を格納しています。
プレイヤーの入力:プレイヤーに対して、0から2の数値を入力してもらいます。それぞれ、0は「グー」、1は「チョキ」、2は「パー」を表します。入力は input() 関数を使用して受け取り、整数に変換しています。
コンピュータの手をランダムに選択:random.randint(0, 2) を使用して、コンピュータの手をランダムに選択しています。0から2の間のランダムな整数がコンピュータの手を表します。
プレイヤーとコンピュータの手を表示:選択したプレイヤーとコンピュータの手を表示します。
勝敗の判定:score という変数に、じゃんけんの勝敗を判定するための数値を計算します。計算式 (x - y + 3) % 3 は、じゃんけんのルールに基づいて、引き分け(0)、プレイヤーの負け(1)、プレイヤーの勝ち(2)を判定します。
勝敗の表示:判定結果に基づいて、勝敗を表示します。引き分けの場合は「引き分けです」、プレイヤーの負けの場合は「あなたの負けです」、プレイヤーの勝ちの場合は「あなたの勝ちです」と表示されます。
judge():プログラムの最後で、judge 関数を呼び出してゲームを実行します。プレイヤーが手を選んで、コンピュータとのじゃんけんの結果が表示されます。
このコードは、シンプルなじゃんけんゲームの動作を示しており、プレイヤーが手を選んでコンピュータと対戦し、勝敗を判定する簡単なプログラムです。これはどのモデルも正しくコードの説明をしてくれています。
ただ、説明の分かりやすさで言えば、各項目について箇条書きで書かれているので、頭一つ抜けている感じがしますが、モデルの規模の違いを考えれば、ELYZAのモデルはかなり優秀であることに違いありません。
ここまでの検証結果をまとめると、ELYZA-japanese-CodeLlama-7b-instructは、ELYZA-japanese-Llama-2-7b-instructに比べ、コード生成・補完に特化したモデルであることが実証されました。
また、日本語能力、説明能力も十分で、コード生成も含めた総合的な性能は、GPT-3.5とほぼ同等であると言えるでしょう。
このモデルを活用すれば、コーディングタスクを効率化出来ることは間違いないです!
ELYZAのこれからに期待!
ELYZA-japanese-Llama-2-7bは、ELYZA社がLlama2-7bをベースに開発した日本語大規模言語モデルで、Llama2の言語能力や知識を引き継ぐことで、少ない学習量で、高い日本語性能を獲得しました。
このモデルは、ELYZA-tasks-100という独自の評価データセットを使った評価で、日本語特化モデルの中では、最高水準の評価を得ています。
ただ、実際の日本語能力を検証してみた結果、日本語検定一級クラスの難しい問題は理解することができず、GPT-4oに比べ、日本語能力は劣る結果になりました。
現在、130億と700億パラメータのモデルの開発に着手しており、これらのモデルではさらに性能の向上が期待されるので、公開され次第また比較検証を行います!
期待して待ちましょう!
最後に
いかがだったでしょうか?
日本語特化LLMを自社業務に応用すれば、企画やサポートの生産性を飛躍的に向上できます。導入の最適解を一緒に見つけましょう。
「生成AIで新しいプロダクトを作りたい」「もっと本格的に生成AIを業務に組み込みたい」とお考えの方は、ぜひ株式会社WEELにご相談ください。
開発実績として、
・新規事業室での「リサーチ」「分析」「事業計画検討」を70%自動化するAIエージェント
・社内お問い合わせの1次回答を自動化するRAG型のチャットボット
・過去事例や最新情報を加味して、10秒で記事のたたき台を作成できるAIプロダクト
・お客様からのメール対応の工数を80%削減したAIメール
・サーバーやAI PCを活用したオンプレでの生成AI活用
・生徒の感情や学習状況を踏まえ、勉強をアシストするAIアシスタント
などの開発実績がございます。
生成AIを活用したプロダクト開発の支援内容は、以下のページでも詳しくご覧いただけます。
➡︎株式会社WEELのサービスを詳しく見る。
アイデア段階でも構いません。まずは無料相談でお気軽にご相談ください。
➡︎生成AIを活用したプロダクト開発・業務効率化について相談する

「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、生成AI社内セミナー・勉強会をさせていただいております。
セミナー内容や料金については、ご相談ください。
また、大規模言語モデル(LLM)を対象に、言語理解能力、生成能力、応答速度の各側面について比較・検証した資料も配布しております。この機会にぜひご活用ください。
