Missing tokenizer.model

#1
by mmnga - opened

こんにちわ、
ELYZA-japanese-Llama-2-7b-fast-instruct
ELYZA-japanese-Llama-2-7b-fast
上記のfastモデルにtokenizer.modelが見つからないのですが、tokenizer.modelってありますでしょうか?

申し訳ありませんが、現在上記のfastモデルにはsentencepieceのtokenizer.modelはありません。

huggingfaceのtokenizerにはSlowとFastの2種類の実装があるのですが、

  • Slow (use_fast=False) はsentencepieceというライブラリで実装されていて、tokenizerはバイナリファイルで表現されており、2つのtokenizerを合成するのは難しかったため、tokenizer.modelがありません。
  • Fast (use_fast=True) はhuggingfaceのtokenizersというライブラリで実装されていて、tokenizerはjsonファイル (tokenizer.json)で表現されており、2つのtokenizerのjsonファイルを混ぜることで新しいtokenizerを作ることが可能でした。
  • また、huggingfaceのtransformersライブラリにはadd_tokensという関数があり、こちらでも新しいvocabを追加できますが、実装上の都合で合成後のtokenizerで改行などが消えてしまう問題があり、今回は使用を見送りました。

FastのtokenizerをSlowのtokenizerに変換することができればtokenizer.modelを追加することが出来ると思うのですが、そちらはまだ検証できていないという状態です...!

検証して可能そうだったから追加させてもらいます!

なるほどですね。
分かりやすい説明、ありがとうございました!

This comment has been hidden

exllamaやllama.cppで、動かしたいのでぜひ検討お願いします。

https://github.com/ggerganov/llama.cpp/issues/2443
に書いてある convert.py でvocab.jsonから tokenizer.modelを作れるみたいです。

が、私の環境で生成した tokenizer.model を使おうとすると以下のエラーになって断念中です。
RuntimeError: Internal: C:\b\abs_f7cttiucvr\croot\sentencepiece_1684525347071\work\src\sentencepiece_processor.cc(1102) [model_proto->ParseFromArray(serialized.data(), serialized.size())]

vocab.jsonも、tokenize.jsonから読んだtokenizerで tokenizer.get_vocab() してjsonに出力したり、
tokenizer.jsonからvocab部分以外を削除して作ってみたりしたんですが…。

もしオリジナルのvocab.jsonがあるなら、そちらで試すとちゃんと作成できるのかもしれません。

Sign up or log in to comment