5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ニューラルかな漢字変換エンジンkarukanで使用するモデルの追加で詰まった話

5
Last updated at Posted at 2026-02-26

ver 0.1.0時点のものであり、大幅な仕様変更があった場合この記事での手法が使えなくなる可能性があります

karukanの概要

  • fcitx5 → 任意のモデル+llama.cppによる推論 でかな漢字変換を実装
  • 自分で使用したいモデルを変更できるため、所持しているハードのキャパと変換の精度がトレードオフ
    demo.gif
    gifは制作者さまのレポジトリより

モデルの変更・追加方法

karukan-engine内のmodels.tomlを編集

モデルとバリアントで分けているっぽい
下に自分が実際に使っているmodels.tomlを貼っておく

models.toml
default_model = "jinen-v1-small-q5"

[models.jinen-v1-xsmall]
repo_id = "togatogah/jinen-v1-xsmall.gguf"
display_name = "jinen-v1-xsmall (GPT-2 XSmall, 26M)"
[models.jinen-v1-xsmall.variants.q5]
id = "jinen-v1-xsmall-q5"
filename = "jinen-v1-xsmall-Q5_K_M.gguf"
display_name = "jinen-v1-xsmall (Q5_K_M)"

[models.jinen-v1-small]
repo_id = "togatogah/jinen-v1-small.gguf"
display_name = "jinen-v1-small (GPT-2 Small, 90M)"
[models.jinen-v1-small.variants.q5]
id = "jinen-v1-small-q5"
filename = "jinen-v1-small-Q5_K_M.gguf"
display_name = "jinen-v1-small (Q5_K_M)"
[models.jinen-v1-small.variants.f16]
id = "jinen-v1-small-f16"
filename = "jinen-v1-small-f16.gguf"
display_name = "jinen-v1-small (F16)"

[models.lfm25]
repo_id="LiquidAI/LFM2.5-1.2B-Instruct-GGUF"
display_name = "LFM2.5-Instruct (1.2B)"
[models.lfm25.variants.q4]
id = "LFM2.5-1.2B-Instruct-Q4"
filename = "LFM2.5-1.2B-Instruct-Q4_K_M.gguf"
display_name = "LFM2.5-Instruct (1.2B)"

[models.qwen]
repo_id = "Qwen/Qwen2.5-0.5B-Instruct-GGUF"
display_name = "Qwen2.5-0.5B"
[models.qwen.variants.q8]
id = "qwen2.5-0.5b-q8"
filename = "qwen2.5-0.5b-instruct-q8_0.gguf"
display_name = "Qwen2.5 (Q8_0)"
[models.qwen.variants.q2]
id = "qwen2.5-0.5b-q2"
filename = "qwen2.5-0.5b-instruct-q2_k.gguf"
display_name = "Qwen2.5 (Q2_K)"

[models.tinyllama]
repo_id = "TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF"
display_name = "TinyLlama 1.1B"
[models.tinyllama.variants.q4]
id = "tinyllama-q4"
filename = "tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf"
display_name = "TinyLlama (Q4_K_M)"

[models.qwen15]
repo_id = "Qwen/Qwen1.5-0.5B-Chat-GGUF"
display_name = "Qwen1.5-0.5B"
[models.qwen15.variants.q8]
id = "qwen1.5-0.5b-q8"
filename = "qwen1.5-0.5b-chat-q8_0.gguf"
display_name = "Qwen1.5 (Q8_0)"

...追加しすぎた

システムを再コンパイル

もう一回ビルドし直してsoファイルを生成する

karukan-imのconfigを編集

configファイル(デフォだと~/.local/karukan-im/config)
model = ...の箇所を変更する。
models.tomlでバリアントのなかのid=...がキーになっている

fcitx5の再起動

fcitx5 -rd で再起動。1回だとうまくいかないことが多いのでこのコマンドを2回実行するとちゃんと読み込んでくれる
ターミナルの表示がおかしくなるが、Enterを連打すればなんとかなる
入力システムでkarukanをわざと選択してモデルのダウンロードを行う(この時点でロードに失敗するが正常)

tokenizer.jsonの追加

ロードが失敗しているのはモデルが読み込めなかったのではなく他に必要なファイルが不足しているからである。それがtokenizer.json。

karukanはhugging faceからモデルをDLするのだがその中にtokenizer.jsonがないため手動で入手しggufファイルと同じディレクトリに格納しておく必要がある。 (~/.cache/hugginface/hub以下、それぞれのモデルのスナップショットの中にある)。複数のバリアントで共有するならシンボリックリンクでもOK。

image.png
このページの場合下から2番目にあるやつ。
tokenizer.jsonはggufなしページのFilesの中にだいたいある。

fcitx5の再起動

tokenizer.json込みで再ロードするためにまたもやfcitx5 -rd
これで他モデルを利用可能になる

image.png
試しにQwenを入れてみたが、レスポンスが悪すぎて使いにくいうえに変換精度が下がっている。
デフォルトのモデルが優秀なのを実感する。単に性能だけの問題ではなさそうだ。

追加済モデルでの変更方法

configでmodel=...を書き換え→fcitx5 -rdで再起動

モデルの追加+変更で詰まった話

  • 再コンパイルが必要
    models.tomlを変更したら再コンパイルが必要なのに気がつくのに時間を要した。モデルが読み込めないとあってtomlの書き方に問題があるとずっと勘違いしていた。
  • tokenizer.jsonを手動で追加
    モデルが読み込めないと出てきてファイルの指定が悪いのかバージョンやアーキテクチャの問題だと諦めかけていたが作者のモデルのディレクトリを眺めていたらjsonファイルが必要なことに気がついた
5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?