N-gram 検索システムにおける頻度の丸めについて

新しい SSGNC では,頻度情報は上位 3 桁のみを残して,4 桁目以降の細かい数値は切り捨てるようにしています.理由は,あまり細かい値を持たせても使い道がないことと,元になっているコーパスの質が良くないことです.ウェブ上のテキスト自体に偏りがあったり,検索結果に偏りがあったり,文字コード変換で歪みが起きたり,テキストの切り出しで残すべき情報を削ったり,その逆があったり,形態素解析結果に誤りが含まれたり,考え出すと切りがありません.

というような細かい話はおいといて,「の」で検索すると,検索結果は以下のようになります.

の	443000000
た の	13100000
の は	11100000
の か	8760000
の です	7800000

そして,このように丸めてやった頻度は,x + 10^y という形式で保存することにより,高々 14 ビットで表現することができます.0 \le x \le 999 に 10 ビット,0 \le y \le 15 に 4 ビットという内訳で,表現可能な値は 0 から 999000000000000000 です.オーバーフローすることは,まずありません.

符号化に際しては,x を下位に,y を上位に保存すると,大小関係が維持されて少し幸せになれます.

# おまけとして,可変長バイト符号での最大長が丁度 2 バイトになるという特典が付きます.