Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

失敗記録: bigram バックオフに unigram 補間を導入

日付: 2026-02-08

仮説

現在の get_edge_cost_with_user_data は、bigram が見つからない場合に固定の default_edge_cost(≈10-12)を返す。この定数は「私+は」のようなありふれた語の組み合わせにも「鑢+蛸」のような稀な組み合わせにも同じペナルティを与えてしまうため、同音異義語の誤選択の原因になっているのではないか。

両方の語が語彙に存在する場合、それぞれの unigram コストを利用して「この語の組み合わせはどの程度自然か」を推定すれば、よりなめらかなバックオフを実現できるのではないか。

変更内容

libakaza/src/graph/lattice_graph.rsget_edge_cost_with_user_data を変更。

#![allow(unused)]
fn main() {
// 変更前
} else {
    self.system_bigram_lm.get_default_edge_cost()
}

// 変更後
} else {
    let backoff = (prev_score + node_score) / 2.0 + BIGRAM_BACKOFF_PENALTY;
    backoff.min(self.system_bigram_lm.get_default_edge_cost())
}
}

BIGRAM_BACKOFF_PENALTY = 3.0 を定数として追加。

評価結果

指標ベースライン (変更前)バックオフ導入後差分
Good58704453-1417
Top-5493775+282
Bad47025837+1135
再現率91.47%86.23%-5.24pt

考察

再現率が 91.47% → 86.23% に 5.24 ポイント大幅悪化した。

バックオフコストが default_edge_cost より低くなることで、bigram が未登録の語ペアに対して「遷移しやすい」と過大評価してしまい、本来選ばれるべきでない候補が選ばれるようになったと考えられる。

具体的には、unigram コストが低い(= 頻出の)語同士であれば bigram 未登録でも低コストで遷移可能になるが、「頻出語同士だから自然な組み合わせ」とは限らない。例えば「日本」と「だけ」はそれぞれ頻出語だが、「二本だけだ」→「日本だけだ」のような誤変換を誘発する可能性がある。

bigram が未登録であるということ自体が「この組み合わせはコーパス上で観測されなかった」という強いシグナルであり、固定のペナルティで抑制するのが妥当だったと思われる。

結論

この方針は採用しない。変更はすべて revert 済み。