anthy が候補をどう並べているか、そこに辞書の頻度はどう影響するかを見る。
【方法】
・読みは同一で品詞コードを変えたエントリを持つテスト用自立語辞書 hogedic?.t を用意。
・dict.args から hogedic?.t と gcannaf.ctd、udict 以外の辞書はすべて外す(gcannaf.ctd, udict はないとエラーになる)。
・make update_params0 を行っておき、corpus が影響しないようにしておく。
・上記3つの条件下で anthy.dic を作る。
・hogedic の各品詞コードのエントリの頻度をすべて同じにしたり、変えたり、辞書内での並び順を変えたりして候補の出方がどう変わるかを見る。
※作った hogedic はすべてココに置いておきます。
<実験1>
【手順】
・anthy-9100d を使用。
1. hogedic1.t を作成、mkworddic/ に置く。
条件 - 読みと頻度が同じであること
ほげ #KS*200 ほげKS-200 //一段動詞
ほげ #R5*200 ほげR5-200 //ラ行五段
ほげる #CJ*200 ほげるCJ-200 //感動詞
ほげる #CN*200 ほげるCN-200 //固有名詞(地名)
ほげる #F14*200 ほげるF14-200 //副詞(ト・タル・スル接続なし)
ほげる #JN*200 ほげるJN-200 //固有名詞(人名)
ほげる #KJ*200 ほげるKJ-200 //単漢字
ほげる #KK*200 ほげるKK-200 //固有名詞(団体名等)
ほげる #T35*200 ほげるT35-200 //一般名詞(ナ・サ・スル接続なし)
ほげる #T35*200 ホゲル
ほげる #T35*200 ほげる
ほげる #T30*200 ほげるT30-200 //一般名詞(スルのみ接続)
ほげる #T15*200 ほげるT15-200 //一般名詞(ナのみ接続)
ほげる #T05*200 ほげるT05-200 //一般名詞(ナ・サ接続)
ほげる #T35*1 ダミー1
ほげる #T35*1 ダミー2
ほげる #T35*1 ダミー3
(snip)
ほげる #T35*1 ダミー24
ほげる #T35*1 ダミー25
ほげる #T35*1 ダミー26
※確か頻度の下位 1%は無視するとかそうなっていたはずなので、ダミーのエントリを入れておいた。
※動詞は終止形が同じ「る」になるラ行五段と一段動詞を入れた。
※ダミー以外の候補の後ろの数字は頻度の数字。
※「T10」「T00」も入れるべきだったが忘れた。
2. mkworddic/dict.args を修正
条件 - hogedic1.t, gcannaf.ctd, udict 以外すべて外す
3. anthy.dic 作成
$ make
$ make update_params0
4. anthy.dic 置き換え
$ su
# mv /usr/share/anthy/anthy.dic /usr/share/anthy/anthy.dic.orig
# mv mkanthydic/anthy.dic /usr/share/anthy/
5. anthy.dic をロードしなおすため、再ログイン
【結果】
・助詞等の付属語をつけず、「ほげる」だけで変換した結果

【考察】
・頻度が同じであっても辞書での並びとは大分変わっているので、品詞コードによって anthy 側で並び替えているのが分かる。
・動詞、一般名詞のスコアは他の品詞より高いらしい。
・活用語尾も頻度も同じであっても「KS」より「R5」が優先されている。
・固有名詞(JN,CN,KK)が随分下げられている。
・単漢字(KJ)は単漢字だからといって下げたりはしていない。
・一般名詞(T??)は品詞コードでソートされている。頻度が同じだからかどうかはこれだけではまだ不明。
・カタカナのみの候補「ホゲル」が一番ケツになってるのはそういうコードが入ってるから(コードは読めませんが、コメントは読めるんで)。
src-ordering/candsort.c:267: /* カタカナの候補が先頭でなければ最後に回す */
・ひらがなのみの候補は別に最後に回されたりしない。
・品詞コードが「T35」であるのにダミーが後ろに回されてるのは頻度が「1」だからか、それとも「下位 1%は無視」というルールのせいなのかはまだここでは不明。
[追記] 11/21
続き。
<実験2>
【手順】
1. 実験1の結果をふまえて頻度を一部変更した hogedic2.t を作成
変更点
・一段動詞(KS)の方が頻度が上でも五段動詞(R5)が優先されるか見るために、KS の頻度を +50した
・固有名詞(JN,CN,KK)の頻度を +200 してどうなるか見る
・普通名詞(T??)は品詞コードでソートされているようだったが、頻度が異なってもそうなのか見るために、逆順になるよう頻度を変更
ほげ #KS*250 ほげKS-250
ほげ #R5*200 ほげR5-200
ほげる #CJ*200 ほげるCJ-200
ほげる #CN*400 ほげるCN-400
ほげる #F14*400 ほげるF14-400
ほげる #JN*400 ほげるJN-400
ほげる #KJ*200 ほげるKJ-200
ほげる #KK*400 ほげるKK-400
ほげる #T35*500 ほげるT35-500
ほげる #T35*400 ホゲル
ほげる #T35*200 ほげる
ほげる #T30*400 ほげるT30-400
ほげる #T15*300 ほげるT15-300
ほげる #T05*200 ほげるT05-200
ほげる #T35*1 ダミー1
(snip)
ほげる #T35*1 ダミー26
2. 実験1と同様の手順で anthy.dic を作成、ロード。
<追記> 11/25
書き忘れてましたが、make する前に前回の anthy.wdic を消す必要があります。
【結果】
・助詞等の付属語をつけず、「ほげる」だけで変換した結果

頻度を変更しても、並び順は全く変わっていない。
【考察】
・普通名詞は、T05 と T35 では頻度の差が 300(2.5倍) あるが、それでも「品詞コード降順」という順序は変わっていない。全体での位置も同じ。辞書にある頻度はほとんど意味を持たないように見える。
・一方、頻度が 1 のダミー候補は品詞コードが T35 だが後ろに回されていることから、辞書の頻度が全く無意味というわけではなさそう。ただ、「下位 1%は無視」というルールのためとも思える。
・一段動詞(KS)を +50してラ行五段(R5)より上にしたが、並び順は変わっておらず、ここでも辞書の頻度は効いていない。ただ、+50 では少なかったかもの知れない。
・固有名詞(JN,CN,KK)の頻度も +200 したが、順位は変わらず。副詞(F14)も同様。やはり辞書の頻度は効いていない。
<実験3>
【手順】
1. 実験2の結果を踏まえて頻度と並び順を変更した hogedic3.t を作成
変更点
・KS と R5 の頻度の差が 50では少なかったかも知れないので、200になるよう変更
・動詞がどのくらい優先されるか見るために後ろに回す
・ダミーの頻度を番号と同じにし、どう並べられるか、どこまでが無視されているかを見る
ほげる #CJ*200 ほげるCJ-200
ほげる #CN*400 ほげるCN-400
ほげる #F14*400 ほげるF14-400
ほげる #JN*400 ほげるJN-400
ほげる #KJ*200 ほげるKJ-200
ほげる #KK*400 ほげるKK-400
ほげる #T35*500 ほげるT35-500
ほげる #T35*400 ホゲル
ほげる #T35*200 ほげる
ほげる #T30*400 ほげるT30-400
ほげる #T15*300 ほげるT15-300
ほげる #T05*200 ほげるT05-200
ほげ #KS*400 ほげKS-400
ほげ #R5*200 ほげR5-200
ほげる #T35*1 ダミー1
ほげる #T35*2 ダミー2
ほげる #T35*3 ダミー3
(snip)
ほげる #T35*25 ダミー25
ほげる #T35*26 ダミー26
【結果】
・助詞等の付属語をつけず、「ほげる」だけで変換した結果

ほとんど変わらず。ただ、固有名詞(JN,CN,KK)は頻度 15 の「ダミー15」より下になっている。
【考察】
・動詞は辞書内での位置に関係なく、他の品詞より優先されている。ただし、頻度が同じくらいなら、ということかもしれない。
・固有名詞はかなり強引に下げられている。下位 1%ではないが、「ダミー1〜14」が無視されている候補で、固有名詞は対象とされている候補の中の一番最後に回されている、というように思われる。
【まとめ】
・これだけではまだ正確なところは分からないが、候補間の頻度差が数百程度では、並び順は変わらないらしい。
・極端に頻度が低い場合を除き、候補の並び順は辞書にある頻度ではなく、主に anthy 側で独自に決めていると言える。
【関連する記事】