株式会社スマレジの開発部でスマレジのサーバサイドを作っています

チケットの見える化にチャレンジしてみる(2-5: 準備編 tf-idf)

こんばんは!株式会社スマレジ 、開発部のmasaです。

最近ふと振り返ってみると、僕がスマレジ に入ってもう二年半が経っていて、ちょっとびっくりしました。もうそんなに経っていたのか・・・。

年々時間の流れが早くなっている気がしますが、きっと気のせいですね(違

では、今日も続きをやっていきます。

単語の出現頻度から類似性を見つけるのがTF-IDF

前回のブログで紹介したコサイン類似度は単語の出現・非出現のみで2文書間の文書の類似度を決めていました。

masa2019.hatenablog.com

masa2019.hatenablog.com

ただ、これだとredmineのように「複数のチケットの中の2つのチケットの類似度」を知りたいケースでは不十分になることが多いです。 なぜなら、「比較したい文書全体(ここでいうところのredmineのissue」の中で二つがどれくらい似ているのかという観点が盛り込まれていないからです。

それを盛り込んだものにtf-idfがあります。

TF (term frequency)

読んで字のごとく、そのワードの出現頻度です。

計算式もシンプルで、ある単語Xの文書AにおけるTF=文書AのXの出現回数÷文書Aの全ワード数となります。 通例、文書Aの全ワードにはブロックリストで除外した単語は含めません。特に日本語の場合、「てにおは」は人によって使い方の違いがあるので、除外して影響を与えないようにするのが無難だと思います。

また、TFも値は0~1を取ります。(0は出現なし、1はその単語のみ出現)コサイン類似度と同じですね。

IDF (Inverse Document Frequency)

比較したい文書全体での単語の出現頻度の逆になります。つまり出現がレアなものほどIDFの数値は高くなります。

算出方法は


単語Xのidf = \log{\frac{比較したい文書の数}{単語Xの出現した文書数}}

になります。

参考

今回の説明ですが、僕のブログの流れに書き下して載せて説明はしていますが、他のブログでもっと詳細な解説をしてくれています汗 (このブログはmasaの勉強のために書いている部分も多いので、それはそれでいいんですが汗)

dev.classmethod.jp

こちらの記事が非常に直感的に分かりやすい説明でした!(内容ほぼ被ってます。。。そしてBM25の紹介くらいまではクラメソさんの記事に似通っちゃいます。)

今後の流れですが、テキストの類似度のお話が終わったら、見える化するためのJSライブラリ(D3.jsを考えてます)と見える化の実装、 もし余裕があったら、物理モデルを掛け合わせて使用したAppendixに挑戦する予定です。