text-embedding-inferenceを通じて利用する際のtokenizer.jsonがないことによるエラーについて
@ktr-n
ご連絡いただきありがとうございます!
Ruri-{large, base}が元にしている東北大BERTモデルはTokenizerに専用の実装があるのですが、そちらがFastTokenizerと呼ばれる高速な実装に対応していないことが原因のようです。
tokenizer.jsonはfast対応しているtokenizerが生成する設定ファイルなのですが、Tokenizerがfast対応していないことから、すぐにtokenizer.jsonを用意することは難しそうです。
誤解を生んでしまい申し訳ないのですが、当面はtext-embedding-inferenceタグを削除させていただき、解決策が見つかり次第再度掲示という対応をさせていただきたく思います。
もし何か解決策など見つかりそうでしたら、いつでもお教えいただけますと幸いです。よろしくお願いいたします。
素早いお返事ありがとうございます。
FastTokenizerに関する件、承知いたしました。
私の方でも引き続き調べてみます。
私はTEI(text-embedding-inference)でFastTokenizer以外の日本語トークナイザーのものを、以下のように動かしており、ruri-large, base も以下の方法で動かすことは可能なのかな、と思っております。
- モデルを fork して、自身で dummy の tokenizer.json を用意する
- TEI はそれを用いて起動する
- TEI のエンドポイントには、リクエストを投げる元で、テキストを fast ではない tokenizer を用い token_ids に変換したデータを POST する
- TEI は texts(list[str]) でなく、token_ids(list[list[int]]) が投げられると、TEIはTEIサーバ側のtokenizerを用いずに推論して返す
ruri-large, base のmodel上に dummy の tokenizer.json を用意すると混乱の元なので、自身で使うものに直接 tokenizer.json を追加しております。
なお補足ですが、この token_ids を投げる方法は /embed /splade などの一部のエンドポイントのみ対応で、/rerank エンドポイントには対応していないため、reranker モデルを使う際は注意が必要です。
本質的な解決方法としては、TEIにtokenizer.jsonなしでも起動するオプションを実装して PR を送ると良さそうなのですが、今は上の方法で暫定対応していたりします…。
こちら、別の方にも説明する機会があったので、記事にしてみました。よろしければ、ご参照ください。
丁寧にご教示いただきありがとうございます。
参考にさせていただきます。