Twitter検索によるひま虐を許すな / Twitterの検索と形態素解析についての考察
はじめに
「餅月ひまり[1]」というYouTuberをご存じでしょうか。私は存じ上げています。
その餅月ひまりさんについてTwitterで検索した際にあまり嬉しくない挙動を示したため、それに関する調査、見解、対処についてまとめます。
本記事には全文検索および自然言語処理に関連する用語が前置きなく使用されるため、適宜情報を補って読んでいただけますと幸いです。
問題
端的に言うと、検索クエリ「餅月ひまり」でテキスト「餅月ひまりちゃん」がヒットしません。
ファンの方が餅月ひまりさんについて言及するツイートを行う際、熱心な方であればあるほど「ちゃん」を付与するケースが増える傾向にある(要出典)ため、これはエゴサを行う場合の課題となります。
なお、「餅月ひまりちゃん」でも検索すればよいのでは、という意見については「餅月ひまりさん」も同様の問題がある、という反論があります。
より詳細に言えば、「餅月ひまり」で検索した場合に「餅月ひまり(敬称)」が全てヒットしません。
原因
結論としては「ひまり」がTwitter上では1単語として扱われておらず、状況によって形態素解析結果が変化するためです。
具体的には、「餅月ひまり」のTwitter上での形態素解析結果は「餅/月/ひま/り」となり、「餅月ひまりちゃん」は「餅/月/ひ/まり/ちゃん」となります。
以下、「餅月ひまり」「餅月ひまりちゃん」でそれぞれ検索した場合のTwitter上の検索結果のハイライトです。
「餅月ひまり」のケースでは「ひま り」がハイライトされ、「餅月ひまりちゃん」のケースでは「ひ まり」がハイライトされており、先に述べた形態素解析結果と一致していることがわかります。
「餅月ひまり」での検索結果ハイライト
「餅月ひまりちゃん」での検索結果ハイライト
これに気付く方法
形態素解析結果を推測する際の有名テクニックとして、1文字ずつ追加して変化を観察する方法が知られています(要出典)。
今回のケースですと、「餅月ひ」「餅月ひま」「餅月ひまり」「餅月ひまりち」「餅月ひまりちゃ」「餅月ひまりちゃん」のように試すとよいです。
考察
さて、なぜこのように形態素解析の結果が異なるのかについてですが、下記の推測ができます。
- 「ひまり」の場合、「暇」のかな表記「ひま」が頻出するため事前確率が高くなり、「ひま/り」となる確率が高くなる。
- 「ひまりちゃん」の場合、人名「まり」と敬称「ちゃん」が連続する条件付き確率が高くなり、「ひ/まり/ちゃん」となる確率が高くなる。
残念ながらTwitterの日本語検索エンジンの詳細については不明のため(仮説で暗に前提としたベイズ識別に基づいているかどうかすら不明)上記は推測の域は超えませんが、比較的納得感のある仮説ではないかと考えています。
補足
本件の本質ではないため折りたたみます1
一般に、全文検索は難易度が高いです。
様々な理由があるのですが、そのうちの一つは本件のように形態素解析結果が希望通りの挙動をしないことがあることです。
一方で、ハッシュタグ(ラベル)による検索は非常に難易度が低いです。
理由としては、単純な完全一致として振舞えばよいためです。
そのため、世の検索サービスはできるだけラベルに基づいた検索に落とし込めないかを考える方が、性能向上に寄与しやすいと言われています(要出典)
本件で取り上げた餅月ひまりさんは公式ハッシュタグとして「#餅月ひまり[2]」を使用するように案内されているため、餅月ひまりさんに届けたい場合はテキストで言及するだけではなくハッシュタグを併用することが推奨されます。
これはTwitterに限らず、一般的な検索においても検索対象に上手にラベルを付与することで検索品質向上の達成難易度を下げられることを意味しています。
本件の本質ではないため折りたたみます2
Twitter検索にはフレーズ検索機能があります。
フレーズ検索とは、指定したキーワードの順番に形態素が並んでいる場合のみヒットするようにする検索方法です。
具体的にいうと、「餅月ひまり」で検索した場合は「餅月ひま〜〜り」のように形態素の間に他の形態素が出現していたり、「り〜〜餅月ひま」のように形態素の出現順が逆転していてもヒットします。
一方で、「"餅月ひまり"」のようにフレーズ検索("で囲む)すると、「餅月ひまり」と厳密に出現している場合のみヒットし、「餅月ひま〜〜り」「り〜〜餅月ひま」のようなケースはヒットしなくなります。
さらに厳密な話をすると、「~」はTwitter上では記号として検索時に無視されるようで、「"餅月ひまり"」で「餅月ひま〜〜り」はヒットします。
フレーズ検索の本当の挙動を確かめたい場合は「~」を適当な単語に置き換え(例えば「餅月ひま餅月り」)るとその挙動がテストできます。
解決方法
本件を解決するクエリはこちらです。[3]
餅月 ((ひま り) OR (ひ まり))
意味することを一言で言うと形態素解析結果のバリエーションをあらかじめ全て記述するとなります。
Twitter検索では半角スペースがAND条件、「OR」がOR条件を表し、結合の優先度を「()」で厳密に指定することができます。
上記の記述で「ひま り」もしくは「ひ まり」
を実現しています。
さらにハッシュタグも同時に指定することもできます。[4]
(餅月 ((ひま り) OR (ひ まり))) OR #餅月ひまり
意味することを一言で言うと前述のクエリもしくはハッシュタグとなります。
このクエリを使用することで、かなり網羅度は高くなります。
検索クエリに関する補足
餅月ひまりさんについて検索する場合「ひまり」や「ひまりちゃん」で検索をするのは非常に困難です。
その理由は、「ひまり」という名前が非常に一般的で、餅月ひまりさん以外の方に対する言及が非常に多くヒットするためです。
これを解消する方法の一つに、推しマークを検索に添えるという方法があります。
餅月ひまりさんの推しマークは「🌕」のため、これを検索ワードに含めることで、ユーザ名に推しマークを入れているファンの方のみに検索対象を絞ることができます(厳密には本文に出現する場合もヒットしますが、稀なため許容とする方針を取ります)
これは、Recall(再現率)の低下を呑むことでPrecision(適合率)を大きく向上させ、Accuracy(正答率)向上を狙う戦略といえます。
これを前述の考え方のクエリに組み込むと下記のようになります。[5]
🌕 ((ひま り) OR (ひ まり))
これと前述のクエリを組み合わせることで、最強の欲張りセットクエリも作成できます。[6]
((餅月 OR 🌕) ((ひま り) OR (ひ まり))) OR #餅月ひまり
さらに公式ファンアートタグ「#ひまりアート」を添えることもできます。[7]
((餅月 OR 🌕) ((ひま り) OR (ひ まり))) OR (#餅月ひまり OR #ひまりアート)
結論
- 結局ハッシュタグが最強。
- Twitterは「ひまり」を1単語として登録するべき。
- Twitterくんはひま虐[8]をやめろ。
謝辞
本記事を作成するに当たり、下記の方々の名前を使用いたしました(敬称略)
謹んで御礼を申し上げます。
- 餅月ひまり, ライヴラリ所属, 株式会社ゆにクリエイト
本記事を作成するに当たり、下記のサービスを取り扱いました。
謹んで御礼を申し上げます。
- Twitter, Twitter Inc.
Discussion