出来はしたけど色々な理由で微妙です。
目的
今流行りのLLMでIMEとかできないか興味あった。
結論
- 基本的に漢字変換されない
- Text Generationモデルでやるのは合わないのかもしれない?Text2Textあたりでなんかいいのないかな。
- もしかしたら漢字変換用に調整したモデルならうまくいくかもしれない。今回は手元になかったので試してない。
- 重い・遅い
- 一般的なIMEなど、一瞬で数十個の候補が出るものと比べると、明らかに遅い。
- GPU使用すれば高速化は期待できるが、どちらにせよユーザーが選べるような複数候補を一瞬で出すというのは叶わない気がした。
ということを考えると、別にわざわざLLMをIMEへ実装しなくてもいいと思った。
もしかしたらやり方次第で使えるIMEになるのかもしれないが、ちょっと実現方法が思いつかなかった。
やったこと
バックエンドはllama.cppを使用しました。rinnaはGPTNeoXなので、redpajama.cppです。
Macで使用するためのswiftコードです。llama-cpp-pythonとサンプルを参考に実装しています。
https://gist.github.com/ebisuke/823999258feeb891f3ab77d92a10ac3e
https://gist.github.com/ebisuke/4d7732acb7ca2212f6b3a06e6d4b613f
IMEのコードですが、xcodeで作成したコードをそのまま公開していいか(個人情報的に)よくわかってないので、今の所upしてません。
もし必要でしたらコメントで教えてください。ただ、若干フリーズしたりして、実用的ではないです。
結果
rinna
llama2