クラウドコンシェルジュの検索エンジンに挑戦(tf-idf編)
こんにちは。せしょうです。
今回は、クラウドコンシェルジュの検索が賢くなったというご報告と 簡易的な検索システムを作ったので、クラウドコンシェルジュの検索エンジンと性能を比較して 遊んでみたというお話です。
クラウドコンシェルジュについて、軽く補足させていただくと
クラウドコンシェルジュとは、Gluegentシリーズに関するナレッジを入手したり、お問い合わせができるサービスです。
みなさんは、そんなクラウドコンシェルジュの検索機能が 最近、賢くなったのをご存じでしょうか?
クラウドコンシェルジュのトップ画面で検索すると、サイト内の全記事から検索できます。
トップ画面でGluegent Flowをクリックし、そこに表示される検索ボックスでキーワードを入力して検索すると、対象サービスからのみ結果が表示されます。
ただ従来は、検索結果の絞り込みを行おうとして、キーワードを追加して再検索すると、再び全記事からの検索になっていました。
しかし!
検索機能を見直して、キーワードをして追加検索をした場合も最初に選択したサービス内からの検索が出来るようになりました。
より使いやすく(賢く)なった、クラウドコンシェルジュを みなさんもぜひ使ってください!
ということで紹介も終わったので、今回の本題に移ろうと思います。
目次
- 概要
- tf-idfとは
- 条件
- 評価指標
- 結果と考察
- まとめ
概要
クラウドコンシェルジュの検索レベル、もしくはそれ以上の検索システムを作りたいな。
今回は、まず 手始めにお試し程度で tf-idfを用いた検索システムと、クラウドコンシェルジュの検索エンジンの比較をしたいと思います。
tf-idfとは
tf-idfは、(term frequency - inverse document frequency)の略です。
tf(term frequency): 文書における、単語の出現頻度
idf(inverse document frequency): 単語のレア度 (様々な文書に出現する単語はレア度が低い)
tf-idf は この tf と idfの積で表されます。
ここから、 tf-idfはレア度が高い単語が 文書内に沢山出現すると値が高くなるということが言えます。
つまるところ、これを各文書で行うことにより、文書の特徴を取得することができるのです。
この結果を用いて、検索ワードとの近さ(cos類似度)を測って、簡易的な検索システムを作ってみようと思います。
条件
使用するデータ
- Gluegent Flowのマニュアル記事
- 検索内容と 出てきて欲しいマニュアル記事一覧(評価用)
前処理
- クリーニング処理
- 単語の正規化
名詞のみを使用
- MeCabを使用
名詞を抽出した文書例 (自動処理の処理結果の確認)
評価指標
今回、検索エンジンの評価指標として、 MAP(Mean Average Precision)を用いました。
下記の例は、 「豚骨じゃないラーメン」、[東京観光」を検索ワードとして検索した例でMAPを簡単に説明します。
この場合、 豚骨じゃないラーメンを検索した際に、検索結果トップ3に表示されたのは 「豚骨ラーメンおすすめ10選 」, 「豚骨ラーメンの作り方」 など今回の検索で求めていないような結果が出ています。
例
検索結果順 |
豚骨じゃないラーメン ※1 |
東京観光 ※2 |
1番目 |
豚骨ラーメンおすすめ10選 |
新宿観光スポット |
2番目 |
豚骨ラーメンの作り方 |
ディズニーデート |
3番目 |
醤油ラーメンおすすめ3選 |
渋谷観光スポット |
... |
... |
... |
10番目 |
味噌ラーメンおすすめ5選 |
恵比寿おすすめ観光 |
このときに、何となく検索システムとしては良くないよね と判断できると思います。
今回は、この何となく良くないよねを評価するために用いた指標が MAPです。
簡単に計算例を用いると、まず AP(平均適合率)は
※1の場合、 出てきて欲しい結果は、「醤油ラーメンおすすめ3選」であり、こちらが3番目に検索結果として出てきたため (⅓) (また、10番目の「味噌ラーメンおすすめ5選」を表示してほしかったため 分母を2に)
AP =(1/3+0)/2 = 1/6 となります。
※2の場合、出てきて欲しい結果は、「 新宿観光スポット」、「渋谷観光スポット」の2つです。
(補足:ディズニーランドは東京ではない!)
また、他にも 10位に「恵比寿おすすめ観光」を表示してほしかったため (分母が3に)
AP = (1/1 + 2/3 + 0)/3 となります。
上記二点から平均(Mean AP)
MAP = (1/6 + (1/1 + 2/3 + 0)/3 )/ 2 = 0.361111..
となり、MAP = 0.361...という結果になります。
このMAPを用いて、今回は検索ワードとしては10件ほど用意しました。
※ 今回はそこまでガッツリしたものではないので、ご容赦ください。
検索ワード |
||||
モデルの削除 |
マスターデータの作成方法 |
sharepoint |
スクリプトの使い方 |
自動処理 |
ユーザーの削除 |
マスターデータの変更 |
入力フォーム |
管理者 |
組織変更 |
確認する検索結果順としては、第5位の検索結果までを見ていこうと思います。
結果と考察
結果としては、以下のようになりました。
作成した検索システム |
クラウドコンシェルジュ |
|
モデルの削除 |
1 |
1 |
マスターデータの作成方法 |
0.5 |
1 |
sharepoint |
1 |
1 |
スクリプトの使い方 |
0.8 |
0.76 |
自動処理 |
1 |
1 |
ユーザーの削除 |
0.25 |
1 |
マスターデータの変更 |
0.5 |
1 |
入力フォーム |
0.76 |
1 |
管理者 |
0.25 |
1 |
組織変更 |
0.80 |
1 |
MAP値 |
0.686 |
0.976... |
クラウドコンシェルジュに関しては、ほとんど検索して出てきて欲しいマニュアル記事が出てきているという結果でした。 ただ、「スクリプトの使い方」で、「豆知識-スクリプトを利用する」がトップ5入りしなかったこと、また今回関係ないような記事が一部上位に表示されたことが、MAP値が下がった原因となります。(検索内容を 「スクリプト使い方」にすると、一番上に表示されるのですが..)
簡単な考察ですが
「マスターデータの作成 」で検索すると 「マスターデータの削除」のマニュアル記事がトップに来てしまうという結果が出ました。
「マスターデータの新規作成」の記事に置いて「作成」という単語よりも 「マスター」「データ」という単語の方が tf-idf値としては特徴が出ていた点、 記事における「マスター」という単語のtf-idf値が「マスターデータの削除」が高く、「マスターデータの作成」という検索ワードのtf-idf値と似ていたことから以上のような結果が出たと思われます。単語の出現頻度や レア度だけでは、順位まで評価に入れると難しいのかなと思いました。
また、単語の出現頻度だけでなく、 単語の意味に紐づいた近さから検索出来たら、精度がより上がるのではないかと思いました。
まとめ
結果としては、
クラウドコンシェルジュの 勝利!
tf-idfを使った検索システムの MAP値としては、自分の予想以上に高い結果となりましたが、クラウドコンシェルジュの検索エンジンのMAP値には敵わず、今回は残念な結果となりました。
次は 意味解析を使用しての検索システムにも挑戦してみたいと思います。
クラウドコンシェルジュに関しても、今回用意した検索ワードが少ない分、測りきれない部分もあるので、よりこの挑戦を楽しくするためにも より多くのデータを集めようと思います。 (みなさんは、どんなワードで検索してますか?)
また、後で気づいたのですが、 各記事の下に説明部分があるので、こちらを使っての検索システムにも挑戦出来たらなと思います。(こっちをベースにした方がよかったんじゃないか) (;´д`)トホホ...
最後に
tf-idfでこれだけ精度が出たのも、記事それぞれが重複しておらず、各項目毎にマニュアルが書けているからだと思いました。
みなさんも、Gluegent 製品を使っていて困ったことがあった際は、ぜひクラウドコンシェルジュのマニュアル記事を参考にしてください!