-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
センシティブワード・ミュートワードの誤検出を減らすために、日本語の単語分割(分かち書き)を導入する #10741
Comments
インスンスが日本語だとは限らないから面倒そう |
日本語のインスタンスにしか必要ない機能なので、ビルドか環境構築時にオプションが必要そうという面でたしかに面倒そうではある |
どちらかというと開発におけるメンテナンスと負荷が大変 |
センシティブ機能で全てフィルタするのは無理なので曖昧なものはアンテナを活用して手動でやっていくのが望ましそう |
手動でモデレートしていくのが望ましいというのはそれはそう その上で想定外の巻き込みミュートを予防する需要がありそうだと思ったのだがどうだろうか…(もちろん単語分割を使ったところで巻き込みミュートがゼロになるわけではないがベターな策として) コマンドラインインタフェースは安定している(というかmecabに関してはもう更新されていない)ので、導入するとしたらffmpegのように外部プログラムの扱いにすればメンテナンスも容易かと思う。mecabならubuntuのパッケージもあるのでテスト環境の構築も (個人的には自インスタンス立てるなら検索用の単語分割含め導入したいくらいの気持ちだがコミュニティ的には需要・関心あるのかなという気持ちでIssueを立てている) |
要するにインタフェースだけ用意して、単語分割器の性能やインタフェースへの適合云々はインスタンス運用者が自己責任で管理してねという形にしたい また精度が悪く多くの未知語が生じたとしても、未知語は文字単位で分割するようにすれば単純な文字列マッチにフォールバックされることと同じなので問題にはならないと思われる(そもそも利用者が検索除けするなどすればどのみち検出できないので完璧な精度が求められているわけでもない) まぁでもmecab-ipadicの精度は気になるレベルなのでJuman++がおすすめで、そうなると(少なくとも利用者は)ビルドの手間と(大きなインスタンスでは)運用時の計算負荷が必要という問題はある ところでめいすきーで使われているneologdという辞書は新語の固有名詞を大量に含んでいる関係上、更新が頻繁(だった) |
単語分割(わかち書き)とは
「
これはセンシティブじゃないぞ!ゴールドマンコーポレーション
」という文字列から
「
これ
/は
/センシティブ
/じゃ
/ない
/ぞ
/!
/ゴールドマン
/コーポレーション
」を得る処理のこと。
何が問題なのか
例えば、「クソ」という単語でフィルターしようとすると、「ダークソウル」「ポークソーセージ」「フォークソング」等が誤検出される。
正規表現(#10688)や除外パターン(#10701)により抑制可能だが、
という問題が生じる。
解決策
日本語の単語分割により、マッチの先頭および末尾を単語境界に限定する(オプションを提供する)ことで系統的に誤検出を減らせる。
コスト
CPU資源をそれなりに消費する。(一秒あたり5000文 ~ 50000文/s/CPU 程度) また、モデルや辞書のデータ容量が大きい(50MB~400MB)ので、クライアントサイドで動かすのは現実的ではない。
センシティブワード・ミュートワードの適用のみを目的とする場合は、単純な文字列マッチにひっかかった文のみを対象とすることで適用対象を絞り込むことが可能。
計算量は(ビームサーチにより)O(n)なのでRE-DoSのような極端な速度問題は生じないと考えられる。
単語分割器の候補
コマンドのパイプ入出力でラッパーを書くか、C++のラッパーライブラリを書いて利用する。前者の場合はプロセスを生かしっぱなしにして通信する方が速度的には有利。
未知語の扱い
ユーザーによる造語などは未知語として検出される。未知語は文字単位で分割する処理とすることでセンシティブワードやミュートワードを含む造語にマッチさせることができる。
The text was updated successfully, but these errors were encountered: