Missing tokenizer.model
こんにちわ、
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を追加することが出来ると思うのですが、そちらはまだ検証できていないという状態です...!
検証して可能そうだったから追加させてもらいます!
なるほどですね。
分かりやすい説明、ありがとうございました!
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があるなら、そちらで試すとちゃんと作成できるのかもしれません。