WorksApplications / Sudachi

A Japanese Tokenizer for Business
798 stars 70 forks source link

ユーザ辞書のコストについて質問させてください #203

Closed KengoOwaki closed 1 year ago

KengoOwaki commented 1 year ago

いつもsudachiを利用させて頂き、有難うございます。

さて表題にもあります通り、ユーザ辞書のコストについての2つ質問です。

1. 「コスト」が動作していない?

3 コスト 形態素解析に使用される見出し表記のコスト値です。 "-32767 ~ 32767" までの整数値で指定できます。 値を小さくするほど、登録した見出し表記が解析結果として出やすくなります。 なお、"-32768" を指定すると、ユーザー辞書読み込み時に自動推定した値を付与します。

名詞類の登録であれば、"5000 ~ 9000" を推奨

ドキュメントには上記記載があったため、 「ユーザ辞書のコストとは、値が小さく設定するほど、解析結果として優先的に反映される」と解釈したのですが、 コストがうまく動作していないように見えます

以下ユーザ辞書に3つの単語及びコストを登録した内容と、その解析内容・結果です

登録単語、コスト

許可局、5001 特許許可局、5002 東京特許許可局、5003

解析対象文章

東京特許許可局

解析結果

東京特許許可局

質問

解析結果について、期待値は、コストの小さい「許可局」が優先的に区切られ
「東京」「特許」「許可局」になる想定でした。
どうも動作を見ていると、コストが加味されず、解析対象文内にユーザ辞書内から完全一致した単語が
あれば、それを優先的に解析結果として返しているように見受けられます
このような結果になる理由を教えてください

2. 解析結果が異なるのはなぜ?

コストが加味されず、解析対象文内にユーザ辞書内から完全一致した単語が あれば、それを優先的に解析結果として返しているように見受けられます

上記を前提とした場合、 以下2つのパターンにおいて、不可解な事象が生じていて、その理由についても教えて頂きたいです AとBの違いは、Aの方の登録単語を「許許可局」と「特」という文字を除いただけです。 なお、どちらも解析対象の文章は、「東京特許許可局」としてます

▼A 許許可局、5001 東京特許許可局、8571

【結果】  東京特許許可局

▼B 特許許可局、5001 東京特許許可局、8571

【結果】  「東京」「特許許可局」

質問

 コストが加味されていない前提では、どちらも「東京特許許可局」となる想定でしたが、
 Bの方は、「東京」「特許許可局」の2つの単語に分かれてしまいます。
 この理由についても知りたいです
kazuma-t commented 1 year ago

コスト計算は系列全体でおこなわれます。「東京/特許/許可局」の場合、「東京」「特許」「許可局」それぞれの単語コストとBOS-東京、東京-特許、特許-許可局、許可局-EOS間の接続コストの合計が系列のコストになります。 今回の場合「東京特許許可局」と「許可局」では「許可局」のコストがちいさいですが、「東京」のコストが2816、「特許」のコストが7399あり、また連接コストも勘案すると10431ほど「東京特許許可局」のコストがちいさくなります。

スクリーンショット 2023-03-01 184418
KengoOwaki commented 1 year ago

@kazuma-t ご回答頂き有難うございます! 全体のコストで比較した上で最小コストを選択する、こと理解しました。

あと1点教えてください。 「接続コスト」については、どう計算されるのでしょうか?予め決められているのでしょうか?

eiennohito commented 1 year ago

単語コストや接続コストはもともと、機械学習のCRFモデルによって学習して、量子化されるものです。 Sudachiのコストはもともと 書き言葉用のUnidic 2.1.2から使用しています。

kazuma-t commented 1 year ago

具体的な値は上記の unidic-mecab-2.1.2_src.zip にふくまれている、matrix.def および right-id.def (left-id.def も同内容) をごらんください。(matrix.def の読み方はこちら https://taku910.github.io/mecab/dic-detail.html)

これらの値の算出方法や背景にあるアルゴリズムについては以下の資料が参考になります。

KengoOwaki commented 1 year ago

@kazuma-t @eiennohito コストは機械学習で算出されていること、理解しました

また以下ドキュメントについても内容確認したいと思います お忙しいところ丁寧な回答、感謝いたします。有難うございます また、不明点などあれば質問させてください。

具体的な値は上記の unidic-mecab-2.1.2_src.zip にふくまれている、matrix.def および right-id.def (left-id.def も同内容) をごらんください。(matrix.def の読み方はこちら https://taku910.github.io/mecab/dic-detail.html)