k-best 分節パターン切り替え
概要
変換時に、ビタビアルゴリズムが上位 k 個の分節パターン(文節の区切り方)を自動的に列挙する。 ユーザーは Tab キー で分節パターンを切り替えることができる。
従来の動作
従来は、ビタビアルゴリズムが最もコストの低い 1 本のパスのみを返していた。 分節の区切り方を変えるには Shift+←/→ で手動調整する必要があった。
例: 「きたかな」を変換
- 変換結果:
北香那(1文節) - 「来た|かな」(2文節)にしたい場合は Shift+← で手動調整が必要
新しい動作
変換時に最大 5 個の分節パターンが自動計算される。 Tab キーを押すと次の分節パターンに切り替わる。
例: 「きたかな」を変換
- Tab 0回目:
北香那(1文節) - Tab 1回目:
来た|かな(2文節) - Tab 2回目:
気|高菜(2文節、別の区切り方) - さらに Tab: 1 に戻る(循環)
操作方法
| キー | 状態 | 動作 |
|---|---|---|
| Tab | 変換中 | 次の分節パターンに切り替え |
| Shift+→ | 変換中 | 文節を右に伸ばす(従来通り) |
| Shift+← | 変換中 | 文節を左に伸ばす(従来通り) |
Shift+矢印との関係
- Tab で分節パターンを切り替えた後、Shift+←/→ で微調整できる。
- Shift+←/→ を押すと分節パターンの選択は 1-best(最初のパターン)にリセットされ、 手動境界指定で再変換が実行される。
技術的な仕組み
k-best ビタビ
従来のビタビアルゴリズムでは各ノードに対して「最もコストの低い前ノード」を
1 つだけ記録していた(prevmap: HashMap<&WordNode, &WordNode>)。
k-best では各ノードに対して上位 k 個のエントリ(コスト、前ノード、前ノードの rank)を
保持する。バックトラック時に各エントリの (prev_node, prev_rank) チェーンをたどることで
k 本のパスを抽出する。
重複排除
同じ分節パターン(各文節の読みの長さの列)を持つパスは、 低コスト側のみを残す。これにより、漢字候補だけが異なるパスが重複して 表示されることを防ぐ。
候補の関係
- 分節パターン(Tab で切り替え): 文節の区切り方が異なる
- 例:
北香那vs来た|かな
- 例:
- 漢字候補(↑/↓ で切り替え): 同じ文節内の異なる漢字変換
- 例:
来たvs北(どちらも「きた」の候補)
- 例:
この 2 つは直交する概念であり、Tab で分節パターンを選んだ後、 ↑/↓ で各文節の漢字候補を選ぶことができる。