lexsim v0.4 — 辞書を持たないまま、日本語を単語で分割する
2KB の学習済みモデルで日本語を単語単位に区切れるようになりました。辞書は相変わらず持っていません。文字2つずつの分割をやめたことで、検索も重複検出も精度が上がっています。
語彙的類似度エンジン lexsim の v0.4 を公開しました。日本語の扱いが根本から変わっています。
文字2つずつの分割をやめました
これまで lexsim は、日本語のように空白で区切れない言語を、文字を2つずつ重ねながらスライドして扱っていました。「メモリ機能」なら「メモ」「モリ」「リ機」「機能」の4つです。辞書を持たずに済む代わりに、「モリ」や「リ機」のような、単語として意味をなさない断片が大量に混ざります。
v0.4 では、これを単語として切り出します。「メモリ」「機能」の2つになります。
検索や重複検出は、この切り出した単位を数えて成り立っています。単位が意味のある語になったぶん、BM25 のランキングも Jaccard の重複判定も、キーワード抽出も揃って精度が上がりました。
それでも辞書は持ちません
単語で切るなら形態素辞書を積めばいい、とは考えませんでした。数 MB の辞書は MCP サーバーの依存としては重く、それを避けるために lexsim を書いたからです。
代わりに、文字と文字の境目が単語の切れ目かどうかを、その場で判定するモデルを積んでいます。多様な1,276文から学習した AdaBoost の分類器で、42個の特徴量を見ます。バイナリは約 2KB です。辞書ではないので、未知語や固有名詞、造語でも判定を試みます。
- 語形の統合 — 「食べ」「食べる」「食べた」のような活用形を同じ語として扱います
- 助詞・助動詞の除去 — 「は」「が」「を」のような、検索の手がかりにならない語を180語以上のリストで落とします
- 非 CJK はこれまで通り — 英語などは従来どおり UAX#29 の語境界で区切ります
キーワード抽出も足しました
textrank_keywords— 1つの文章の中の共起関係をグラフにして、重要語を取り出しますCorpus::cooccurrence_keywords— ある語と一緒に現れやすい語を、コーパス全体から探しますCorpus::normalized_tf— 文書長で正規化した出現頻度。助詞などは除外します
互換性について
日本語のトークンが文字2つ組から単語に変わったので、v0.3 までとスコアの数値は一致しません。BM25 のスコアも Jaccard 係数も変わります。品質としては良くなっていますが、以前の数値と突き合わせている場合は基準を取り直してください。
lexsim は Handoff のメモリ検索を支えています。Handoff MCP も v0.19.1 でこのバージョンに追従し、日本語メモリの検索精度が上がりました。
