Repository navigation
Releases
sekken v0.6.0
sekken 0.6.0 です。配布する文字言語モデル lm.zst を新しくし、英数字を混ぜた技術的な文の変換を直しました。本人の文から語の n-gram を数える個人化を足しました。
lm.zst は新しいものに入れ替えてください。model.zst は 0.5.0 のものと同じです。0.5.0 の lm.zst もこの版のエンジンで読めますが、精度は新しい lm.zst の方が上です。バイナリと Emacs 側は一緒に上げてください(バージョンが合わないと警告が出ます)。
変換の精度
sekken-train の評価文での先頭一致です(凍結、個人化なし)。どれも同じ評価の入力で測りました。
| 条件 | 英数字を含む技術文(1,741 文) | 英数字を含む作者の文(1,997 文) |
|---|---|---|
0.5.0 の lm.zst、下のカタカナ語と数値変換の変更の前のエンジン |
74.4% | 55.5% |
0.6.0 の lm.zst、同じエンジン |
78.9% | 60.5% |
0.6.0 の lm.zst と 0.6.0 のエンジン |
84.8% | 60.6% |
技術文は Kubernetes の日本語ドキュメントと The Rust Programming Language の日本語訳から取りました。0.5.0 のエンジンそのものでは測っていません。
変更
lm.zstを新しくしました。zenz-v2.5-dataset の Wikipedia 由来のペアで学習した、公式の Mamba-3 SISO の式のモデルです(sekken-train の runpy-mix-a-wiki)。英数字の読み下しを綴りに書き換えた組で学習しています- 辞書に無い長いカタカナ語(パフォーマンスオーバーヘッド)を 1 区間で打っても、後ろがひらがなで残らなくなりました。語彙に無いカタカナ語を、語彙のカタカナ語の並びとして採点します
- 数字の literal の後で SKK の数値変換の見出し(
#つなど)を引きます。'3;tunoが「3角」ではなく「3つの」になります。打った半角の数字のままの候補が先に出ます。漢数字(三つ)は下位の候補に出し、全角の数字には書き換えません - literal の直後のひらがなの候補に掛ける罰則を軽くしました(既定 2、
--literal-kana-penalty)。'Emacs;noの「の」が漢字になりにくくなります - 確定した文から本人の語の n-gram を数え、配布の
model.zstに混ぜるようにしました。数えた分はエンジンを止めたときにsekken-server-personal(既定はuser-emacs-directoryのsekken-personal.zst)に書きます。M-x sekken-learn-filesとsekken learnで、過去に書いた org・Markdown の文もまとめて数えられます - 確定で
lm.zstの出力層を動かす個人化は、動かすたびに元の重みへ引き戻すようにしました(--adapt-anchor、既定 10)。引き戻さないと、数千文確定すると一般の文の変換が崩れていました。動いた出力層は、元にしたlm.zstの指紋と一緒に保存します。lm.zstを入れ替えると古い出力層は読まずに学び直すので、sekken-lm.zstを手で消す必要はありません --lm-int8でlm.zstの線形層を int8 の行列積で読めるようにしました(aarch64 の dot product、x86_64 の AVX-512 VNNI か AVX-VNNI)- DEL と backspace は入力中の語の末尾をかな 1 つ分ずつ消します
- ローマ字の読み方を変えました。
n単体は子音の前と区間の終わりで「ん」になります。子音 1 文字は「っ」にせず、重ねた子音(kk)で「っ」にします。zの後の空白は全角空白になります。二重の;/'はどの区間でもその文字 1 つになります - 前置引数のコマンドでは語を確定しません。候補一覧の外のコマンドは、一覧が出ていても走る前に確定します
- エンジンの JSON-RPC に
learnが増えました
Assets
lm.zst: zenz-v2.5-dataset のtrain_wikipedia.jsonlの全ペアから学習した、読みと出力を交互に並べる条件付き文字言語モデル(runpy-mix-a-wiki、57 MB)model.zst: Wikipedia 日本語版と FineWeb-2 日本語から学習した語 bigram モデル(Kneser-Ney、118 MB。0.5.0 と同じ)THIRD-PARTY.md: 学習データ、辞書および同梱データの出典・許諾条件
学習済みモデルは CC BY-SA 4.0 で提供します。FineWeb-2 由来の部分(model.zst)には ODC-By 1.0 と Common Crawl の利用規約も掛かります。出典とその他の条件は THIRD-PARTY.md を参照してください。
sekken v0.5.0
sekken 0.5.0 です。確定した文で言語モデルを個人化し、自動確定を「見えていたもの」に揃え、変換方式を投機的変換に一本化しました。
model.zst と lm.zst は 0.4.0 のものと同じで、そのまま使えます。ただし lm.zst は必須になりました。
変更
- 確定した文で
lm.zstの出力層を 1 歩動かす個人化を足しました。語の終わりで 1 位候補に置き換わったときとC-jで候補を選んだときに、読みと文をエンジンに送ります。動いた出力層はエンジンを止めたときにsekken-server-adapted-lm(既定はuser-emacs-directoryのsekken-lm.zst)に書き、次の起動はそのファイルをlm.zstより先に読みます。捨てるにはそのファイルを消します。lm.zstを入れ替えたときも消してください。エンジン側は--adapt-lr(既定 3e-3)、--adapted-lm、JSON-RPC のadaptです - 個人化は誤変換かどうかを見ません。外れた語のまま置き換わった文を学習した後は、
M-x sekken-registerで登録しただけでは登録した語が先に出ないことがあります。登録した語をC-jで一度選べば、次の変換から先に出ます - 自動確定は、走る前に見えていたものをそのまま入れ、新しい変換を待たなくなりました。候補がまだ届いていなければ、見えていたかな(打ち足す前の 1 位候補に残りのかなを繋いだもの、または全部かな)のまま置き換わります。保存や送信の直前にエンジンの応答を待って止まることはありません。最新の候補が要るときは
C-jを使います。打鍵ごとの先読みが失敗しても打鍵は止まらず、理由はsekken-convert-last-errorに残ります - 変換方式を投機的変換に一本化し、
lm.zstを必須にしました。N-best の並べ替え方式と言語モデルなしの格子だけの方式、--rerank-width、--spec-rounds 0は消しました。sekken-server-lmが nil ならエンジンを起動する前にエラーになります - 母音を待つ子音で終わる語(
nek)は表示どおり「ねk」で置き換わります。境界で閉じた区間の末尾の子音は変換して送ります(Nek;は「ねっ」)。>で終わる語(O>)は接頭辞の見出しで先読みします - 入力中の語の状態を
sekken-word.elに集めました。振る舞いは変えていませんが、sekken-input-typing-commandsはsekken-word-typing-commandsに改名しました - ローマ字解析の期待値を Rust と Emacs で共有する
share/input-cases.tsvを足し、末尾の空の区間を送らない扱いを揃えました - エンジンの JSON-RPC に
adaptが増え、--lmが必須になりました。0.4.0 の Emacs 側とこの版のエンジンは組み合わせられません。バイナリと Emacs 側を一緒に上げてください
Assets
model.zst: Wikipedia 日本語版と FineWeb-2 日本語から学習した語 bigram モデル(Kneser-Ney、118 MB。0.4.0 と同じ)lm.zst: zenz-v2.5-dataset の Wikipedia および llm-jp-corpus-v3 由来データの全量から学習した、読みと出力を交互に並べる条件付き文字言語モデル(runinterleave-full。0.4.0 と同じ)THIRD-PARTY.md: 学習データ、辞書および同梱データの出典・許諾条件
学習済みモデルは CC BY-SA 4.0 で提供します。FineWeb-2 と llm-jp-corpus-v3 由来の部分には ODC-By 1.0 と Common Crawl の利用規約も掛かります。出典とその他の条件は THIRD-PARTY.md を参照してください。
sekken v0.4.0
sekken 0.4.0 です。ユーザー辞書を足し、打鍵に合わせて 1 位候補が見えるライブ変換にしました。
model.zst と lm.zst は 0.3.0 のものと同じで、そのまま使えます。
変更
- ユーザー辞書を足しました。SKK 辞書に無い固有名詞や自分の語彙を
M-x sekken-registerで登録すると、エンジンがsekken-server-user-jisyo(既定はuser-emacs-directoryのsekken-jisyo)に書き、次の変換から SKK 辞書より先に引きます。置き換わった語を直して region で選んで呼ぶと、読みは最後に置き換えた語のかなが既定値になります。登録できるのは送りなしの語だけです。エンジン側は--user-jisyoと JSON-RPC のregisterです - 打鍵に合わせて入力中の語の 1 位候補が overlay に見え、語の終わり(空白や改行、移動、送信、保存など、語を続けるコマンド以外)で確定の打鍵なしにそのまま置き換わります。1 位以外の候補は
C-jで選びます。completion-at-point-functionsへの候補の提供とcorfu-autoの連携は外しました - 入力中の語は自分が打ち始めた位置からポイントまでの文字で、もとからバッファにある文字や貼り付けた文字は語になりません。空白以外の打てる文字はすべて語の文字なので、
1on1のような語も 1 語として打てます。置き換えを undo で取り消してローマ字に戻せば語に戻ります /で開いた区間は SKK の abbrev として綴りをそのまま見出しに引き(/emacs→ Emacs)、>は接頭辞・接尾辞の境界になります(O>Kai→ 御会、Toukyou>Kai→ 東京会)'で開いた区間は辞書を引かず綴りのまま出します(Kyouha'Emacs;wo;tsukau→ 今日はEmacsを使う)。リテラルの'は''です- エンジンの入力を変えました。
henkanの params はローマ字のinputではなく、エディタがかなにして種類(kana/convert/literal/abbrev)と>の印を付けた区間の列piecesです。0.3.0 の Emacs 側とこの版のエンジンは組み合わせられません。バイナリと Emacs 側を一緒に上げてください - ローマ字を前置して学習した旧形式の
lm.zst(0.1.0・0.2.0 のもの)は読み込みで拒みます。0.3.0 以降の交互形はそのまま読めます - 変換表から
n'を外しました
Assets
model.zst: Wikipedia 日本語版と FineWeb-2 日本語から学習した語 bigram モデル(Kneser-Ney、118 MB。0.3.0 と同じ)lm.zst: zenz-v2.5-dataset の Wikipedia および llm-jp-corpus-v3 由来データの全量から学習した、読みと出力を交互に並べる条件付き文字言語モデル(runinterleave-full。0.3.0 と同じ)THIRD-PARTY.md: 学習データ、辞書および同梱データの出典・許諾条件
学習済みモデルは CC BY-SA 4.0 で提供します。FineWeb-2 と llm-jp-corpus-v3 由来の部分には ODC-By 1.0 と Common Crawl の利用規約も掛かります。出典とその他の条件は THIRD-PARTY.md を参照してください。
sekken v0.3.0
sekken 0.3.0 です。語 bigram を Wikipedia + FineWeb-2 日本語の Kneser-Ney に、文字言語モデルを読みと出力を交互に並べた形の全量学習に差し替え、既定の重みと言語モデルの使い方を測り直した値にしました。作者の文 750 文の先頭一致は、0.2.0 の組み合わせに対して bigram だけで 40.9% → 55.5%、言語モデル込みで 50.1% → 62.1% です。Wikipedia の文では bigram だけで 30.6% → 31.5%、言語モデル込みでは 35.9% → 33.1% と下がります(作者の文の方に寄せた重みです)。
変更
model.zstの形式を v4 にしました。0.2.0 のmodel.zstはこの版では読めず、この版のmodel.zstは 0.2.0 では読めません。lm.zstも交互形になり、0.2.0 のバイナリでは使えません。バイナリ・model.zst・lm.zstを一緒に置き換えてください- 語 bigram は Wikipedia 日本語版に FineWeb-2 日本語(1 本の 2 文書おき、3728 万文)を足して数え、Kneser-Ney(割引 0.8)で平滑化しています
- かな罰則の既定を 2 → 4、辞書順位の重みの既定を 1 → 3 にしました(
--kana-penalty/--rank-weightで変えられます) lm.zstを渡したときの既定を、N-best の並べ替えから、言語モデルの提案で格子を再探索する投機(幅 5・反復 3)にしました。並べ替えに戻すなら--spec-rounds 0です。1 打鍵あたり 10 ms ほど、文全体で 40〜110 ms ほど遅くなりますz-の変換結果を ~(U+FF5E、全角チルダ)から 〜(U+301C、波ダッシュ)に変え、skkeleton の表と同じにしました- っ を単独で綴った送り仮名(
Toxtuta→ 取った)でも送りあり候補を引くようにしました - 交互形の言語モデルは、直前の変換で採点した候補の状態を持ち越して、伸びた分だけ読みます
Assets
model.zst: Wikipedia 日本語版と FineWeb-2 日本語から学習した語 bigram モデル(Kneser-Ney、118 MB)lm.zst: zenz-v2.5-dataset の Wikipedia および llm-jp-corpus-v3 由来データの全量から学習した、読みと出力を交互に並べる条件付き文字言語モデル(runinterleave-full)THIRD-PARTY.md: 学習データ、辞書および同梱データの出典・許諾条件
学習済みモデルは CC BY-SA 4.0 で提供します。FineWeb-2 と llm-jp-corpus-v3 由来の部分には ODC-By 1.0 と Common Crawl の利用規約も掛かります。出典とその他の条件は THIRD-PARTY.md を参照してください。
sekken v0.2.0
sekken 0.2.0 です。n-gram モデルのファイル形式を変え、起動を約 5 秒から約 1 秒に縮めました。
変更
model.zstの形式を、読み込んだ配列のまま引ける固定幅の列に変えました。0.1.0 のmodel.zstはこの版では読めず、この版のmodel.zstは 0.1.0 では読めません。バイナリと一緒に置き換えてくださいsekken serverはモデルの読み込みを別スレッドで進め、読み込み中でもversionに即応答します。Emacs 側は初回の変換が成功するまでsekken-server-startup-timeout(既定 60 秒)で待ちます- モデルの読み込みに失敗したときは stderr と JSON-RPC エラーに理由を残して終了します
Assets
model.zst: Wikipedia 日本語版から学習した語 bigram モデル(0.1.0 と同じ頻度を新形式で保存したもの)lm.zst: zenz-v2.5-dataset の Wikipedia および llm-jp-corpus-v3 由来データから学習した条件付き文字言語モデル(runf645ee5、0.1.0 と同じ)THIRD-PARTY.md: 学習データ、辞書および同梱データの出典・許諾条件
学習済みモデルは CC BY-SA 4.0 で提供します。出典とその他の条件は THIRD-PARTY.md を参照してください。
sekken v0.1.0
sekken 0.1.0 の初回リリースです。
Assets
model.zst: Wikipedia 日本語版から学習した語 bigram モデルlm.zst: zenz-v2.5-dataset の Wikipedia および llm-jp-corpus-v3 由来データから学習した条件付き文字言語モデル(runf645ee5)THIRD-PARTY.md: 学習データ、辞書および同梱データの出典・許諾条件
学習済みモデルは CC BY-SA 4.0 で提供します。出典とその他の条件は THIRD-PARTY.md を参照してください。