![見出し画像](https://assets.st-note.com/production/uploads/images/133357445/rectangle_large_type_2_b4219b21bd257f165d29f6fc93ff1332.png?width=800)
Gemma-2bとGemma-2b-itを比べてみた
朝早く起きたので(老人なので目覚めが早い)、作業をしようとChatGPT君に問いかけたところ動いてくれなかったので、そういやGemmaを使ってなかったわと動かしてみました。
Gemmaはグーグルが出したOpen modelです。パラメータが20億、70億、そしてPre-trainedモデルとInstruction-Tunedモデルが存在します。
今回はGemma2bのPre-trainedモデルとInstruction-Tunedモデルを使ってみました。
利用環境は Google Colaboratoryです。モデルはHagging Faceのtransformersライブラリを使って呼び出しています。
使い方は npaka さんの記事が参考になります。
ちなみに、モデル2つ動かすのはGPUだとエラーが出ました。GPUを適当に選んだせいかもしれないですが。なので、CPUにしてハイメモリにして動かしました。
二つのモデルの反応の違い
まずは、二つのモデルの同じ質問への反応の違いを見てみましょう。
コードは次のような感じで作りました。
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer1 = AutoTokenizer.from_pretrained("google/gemma-2b")
model1 = AutoModelForCausalLM.from_pretrained("google/gemma-2b")
tokenizer2 = AutoTokenizer.from_pretrained("google/gemma-2b-it")
model2 = AutoModelForCausalLM.from_pretrained("google/gemma-2b-it")
input_text1 = '日本語を話せますか?'
inputs11 = tokenizer1(input_text1, return_tensors="pt")
inputs21 = tokenizer2(input_text1, return_tensors="pt")
for t, m, i, t in zip(['pretrain', 'instruct'],[model1, model2], [inputs11, inputs21], [tokenizer1, tokenizer2]):
print(f'-- {t} --')
outputs = m.generate(**i, max_new_tokens=100)
print(t.decode(outputs[0], skip_special_tokens=True))
質問1. 日本語を話せますか?
Pre-trainedモデルは、ちょっと意図と異なる感じ。Instruction-tunedモデルはいい感じに答えてくれています。指示が効いてるんですね。
Pre-trainedモデルの回答
If you are interested in Japanese language, please join us!
We are a group of Japanese language learners who meet every week to practice our Japanese.
We are a group of Japanese language learners who meet every week to practice our Japanese.
We are a group of Japanese language learners who meet every week to practice our Japanese.
We are a group of Japanese language learners who meet every week to practice our Japanese.
We are a group of Japanese language learners who meet every week to practice
Intruction-tunedモデルの回答
はい、日本語を話せます。日本語の理解と話せる能力は、学習状況やコミュニケーションの状況に
よって異なりますが、基本的な日本語の理解は可能です。 何をお話ししましょうか?
質問2. Can you speak English?
Pre-trainedモデルは、答えてくれてはいるが、その後の連発はいらんやろって感じ。Instructモデルは丁寧。
Pre-trainedモデルの回答
Yes, I can speak English.
Can you speak English? Yes, I can speak English.
Can you speak English? Yes, I can speak English.
Can you speak English? Yes, I can speak English.
Can you speak English? Yes, I can speak English.
Can you speak English? Yes, I can speak English.
Can you speak English? Yes, I can speak English.
Can you speak English? Yes
Instruction-tunedモデルの回答
Yes, I can speak English. I have been trained on a massive dataset of text and code,
including English language content. I can understand and generate human-like English,
translate between different languages, and answer questions on a wide range of topics.
質問3. Python, Go, Rustの3種類のプログラミング言語でHello Worldをプリントするコードを作ってください。
これはどちらも似たような回答でした。目的がわかりやすい文を渡すと、良いのかもなー。
Pre-trainedモデルの回答
<h2>Python</h2>
<code>print("Hello, World!")</code>
<h2>Go</h2>
<code>package main
import "fmt"
func main() { fmt.Println("Hello, World!") }</code>
<h2>Rust</h2>
<code>fn main() { println!("Hello, World!"); }</code>
Instruction-tunedモデルの回答
**Python**
```python
print("Hello World!")
```
**Go**
```go
package main
import "fmt"
func main() {
fmt.Println("Hello World!") }
```
**Rust**
```rust
fn main() {
println!("Hello World!");
}
```
思ったこと
当然ながら、Instruction-tunedなモデルの方がいい感じの答えをくれるのだなぁという点、しかし、最後の質問なんかはPre-trainedモデルもいい感じに答えてくれている。
ところで、Instructionって何だろう?とおもって調べたら、次のStack overflowの回答がいい感じに思いました。
最初 2b-it ってのをみてイタリア語用のモデルかなと思ったのは内緒だ。
そして、回答記事内でも触れられているブログ記事へのリンク。
これはまだ読めていませんが、そこからも論文へのリンクが~。
そしてまたちょっと調べていたら、LlamaのFine-tuneネタと去年開催されたKaggleのコンペネタが掘り起こせました。
まとめ
というわけで、ChatGPT君が動いてくれなかったので、Gemmaを使ってみたら、なんか新しい沼が見つかった感じでした。GPTでいろいろやって、Fine-tuningはもういいかなぁ・・・と思ってたけど、ローカルLLMと共にやるとものすごく面白そうな香りが・・・
あと、グーグルが責任ある生成AIツールキットというものも出しているようです。この辺りは必読でしょう。
あとついでにこれも目を通しておきたい。
今日、G検定受けるんですよねぇ
実は今日、G検定を受けるのに勉強をしっかりできていないので、朝から勉強する予定が、しっかり3時間ほどGemmaを楽しんで久々にブログまで書くという感じになりました。
G検定はまだ受けていませんが、勉強した感想だけ書いておくと、機械学習やらディープラーニングやら仕事で使った人が、体系的に知識を学んで、部分部分学んだ知識をつなげられるというのが非常に良かったです。
「モデルは使っているが、エンコーダとデコーダの違いとか知らん。動くやん」状態の私が、この辺り理解できて、Gemmaはデコーダだけとか書いてるのをよんで、「そりゃそうやろ」とかなれるのは実はものすごくよいことだなと思っていたりします。
この記事が気に入ったらサポートをしてみませんか?