SharePoint エンタープライズ検索 (3) : 検索精度のチューニング (関連性とランキング)


(このポストでは、書籍「VSTO と SharePoint Server 2007 による開発技術」(8章 : エンタープライズ検索と BDC) の補足情報を記載しています。基本的な内容 / 全体は、書籍を参照してください。) 

環境:
Office SharePoint Server 2007 (インフラストラクチャー更新プログラム含む)
または Search Server 2008

SharePoint エンタープライズ検索 (4回シリーズ)

こんにちは。

飛ばしたデモシリーズの 3 つ目として、相関性・関連性 (Relevance) と評価・ランキング (Ranking) のチューニング方法について補足します。
このデモは、ある程度お見せして (デモして) 理解して頂くことができたと思っていますが、時間があれば、サイトへの権限付与、タイトル変更、などなど、細かな動きを見て (数値なども変えてみて) 理解を深めて頂く予定でした。今回は、ランキングパラメータとシソーラスのデモまでしか実施できなかったので、以下に、その他の設定方法や数値目安などをまとめておきたいと思います。
(デモ / 動きはセミナーの中の実施しましたので、今回は省略します。)

シソーラス (設定箇所 : サーバー定義ファイル)

SharePoint のシソーラス (thesaurus) とは、例えば、「エンタープライズ検索 と エンタープライズサーチ は用語として同等に扱う」、「MOSS, WSS というキーワードが見つかったら、SharePoint で代用する」など、同義語 (類義語)、代替語の設定を意味します。
設定はサーバー上のファイルを編集します。日本語環境をお使いの皆さんは、%programfiles%Microsoft Office Servers12.0DataOffice ServerApplications[GUID]Config 下の tsjpn.xml を編集します。(記述方法、構文は、デモでお見せしたので省略します。) シソーラスの反映は、デモでお見せしたように、クエリ実行時に読み込まれるため、クエリサーバー上の Office SharePoint Server Search サービス の再起動 (net stop osearch & net start osearch) をおこなうことで反映されます。(再クロールは必要ありません。)

%programfiles%Microsoft Office Servers12.0Data の下に同様のファイル (tsjpn.xml など) が存在しますが、このファイルは、ファーム上のクエリーサーバーが追加される際に使用されるコピー元のファイルです。このため、この中のファイルを変更しても、該当のサーバーには直接反映されませんので注意してください。(ただし、新しくクエリーサーバーを作成する際にはこの設定が使用されますので、念のためこちらも変更しておくと良いでしょう。また、%programfiles%Microsoft Office Servers12.0DataApplications[GUID]Config にも同じファイルが存在していますので、編集場所には充分注意してください。)
尚、シソーラスの設定ファイルのうち、tsneu.xml は、すべての言語に適用されます。

注意点として、ファイルは、必ず Unicode で保存をおこなうようにしてください。もともと Unicode で保存されていますが、ファイルを削除して新規作成をした場合などには、必ず、「Unicode」 で新規保存するようにしましょう。
また、シソーラスの定義を 例えばプログラムなどを使って自動作成するような場合にも注意が必要です。定義内に、同一の文字が、別の形式で重複して定義されている場合には、そのシソーラスは無効にされる場合があります。
また検索時に、ダブルクォート (") で括って検索をおこなうと (例 : "MOSS" など)、シソーラスを無視した検索をおこなうことが可能です。

シソーラスのその他の動作・設定などについては Enterprise Search Team Blog が参考になりますので、是非参考にしてください。

Microsoft Enterprise Search Blog : How to: Customize the Thesaurus in SharePoint Search and Search Server
http://blogs.msdn.com/enterprisesearch/archive/2008/09/23/how-to-customize-the-thesaurus-in-sharepoint-search-and-search-server.aspx


ノイズ (設定箇所 : サーバー定義ファイル)

抽出するキーワードとして除外したい文字は、シソーラスファイルと同じ場所のノイズファイル (日本語の場合は、noisejpn.txt) にキーワードを追加することで除外することができます。

注意点などについては、上記のシソーラスファイル同様です。

ワードブレーキング (設定箇所 : サーバー定義ファイル)

こちらは、セミナーの資料では省略していましたが、懇親会でご質問がありましたので記載しておきます (懇親会場でご回答させて頂きました)。

例えば、「ペドロ&カプリシャス」のようなキーワードを検索したい場合、インデックス収集時に、間の記号(アンパサント &)によって、「ペドロ」と「カプリシャス」でキーワードが自動的に区切られます。こうした場合には、カスタムディクショナリー(Custom Dictionary) を設定することで、こうした自動ブレークを阻止し、「ペドロ&カプリシャス」で完全マッチの検索をおこなうことができます。

カスタムディクショナリの設定ファイルを配置する場所は、シソーラスファイルとは異なり、%programfiles%Microsoft Office Servers12binCustomLANG.lex です。(日本語の場合は、Custom0011.lex です。) 設定を反映させるには、インデックスの再収集以外に、クエリー時のブレーク箇所も正しく認識させる必要があるため、ファイル編集後は、 Office SharePoint Server Search サービス (osearch) の再起動と、再クロールの双方をおこなってください。
カスタムディクショナリの作成方法については、以下の記事が参考になります。

TechNet : ユーザー辞書を作成する (Office SharePoint Server 2007)
http://technet.microsoft.com/ja-jp/library/cc263242.aspx

実は、懇親会では、「ワードブレークを阻止したい」 というご質問ではなく、逆に 「ワードを分割して認識させられないか」 というものでした。私は、この回答として、「カスタム辞書 (上記の CustomLANG.lex) を編集することで認識させられる可能性があるかもしれない」 とお答えしてしまいましたが、すみません、動作を確認してみたところ、本来分割されていないワードを分割して認識させることは不可能でした。(この予測は誤っておりました。申し訳ありません . . .)
業界固有の専門用語などで、どうしても意図的に区切りたい場合 (ワードブレークしたい場合) には、以下の要領でシソーラスファイルを編集するという方法が近道でしょう。

例 : 「クラウド」と検索したら、「クラウド」以外に「クラウドコンピューティング」もヒットさせる場合

 . . . 前半省略 . . .
  <replacement>
    <pat>クラウド</pat>
    <sub>クラウド</sub>
    <sub>クラウドコンピューティング</sub>
  </replacement>

 . . . 後半省略 . . .

なお、ワードブレーキングのメカニズムを理解しておくことは重要ですので補足のために記載しておきますと、空白 (日本語の空白も含む) や、「で」、「の」などの接続文字、「&」、「-」 の記号などなどを元に自動でワードがブレークされ、上記ご質問者の方にもお話させて頂きましたが、アンカー (<A …>…</A>) の箇所も 1 語と見なします。(特に、アンカーでは、リンク先にもキーワードが含まれる場合、そこを評価・ランキングの高いキーワードであると認識します。)

尚、空白文字は抑制 (ブレーク箇所として認識しないように抑制) できないので注意してください。


「権限のあるページ」と「権限のないサイト」 (設定箇所 : 共有サービスプロバイダの管理)

登録されているドキュメントの優先順位が "サイトなどによって明確に異なる" 場合、共有サービスプロバイダの [検索の設定] 画面の [権限のあるページ] (authoritative page) の設定を使ってランキングの優先度を変えることができます。
この設定ページには上位 3 つまで権限のあるページを設定可能で、ここに設定したページからのクリック数が近いドキュメントほど高いランキングで表示されるようになりますので、重要なサイト (例 : 完成ドキュメントを入れるサイト、など) はここに URL を設定しておくと良いでしょう。
「権限のあるページ」 だけでなく、評価・ランキングを下げるための 「権限のないサイト 」(non-authoritative site) を指定することもできます。
(いずれも、設定はすぐに反映されます。)

ランキングパラメータ (設定方法 : API)

こちらは、デモでお見せした内容です。
Web ページ、Word 文書、Excel ファイル、など、"ファイルの種類" によって優先度を決めるためのパラメータで、内部の検索アルゴリズム (Okapi BM25) で使用されています。このパラメータは API (プログラミング) でのみ設定・変更できます。(海外には、こうした値を編集するためのツール・ユーティリティなども存在しています。)
変更方法については、デモでお見せしたので省略します。。。と言いたかったのですが、コードをお配りしていなかったので再掲しておきます。(下記では、pptx のパラメータを 150 に下げています)

static void Main(string[] args)
{
    SearchContext context;
    using (SPSite site = new SPSite(@"http://localhost/"))
    {
        context = SearchContext.GetContext(site);
    }
    Ranking rnk = new Ranking(context);
    RankParamCollection rnkParmCol = rnk.RankingParameters;
    foreach (RankingParameter rnkParm in rnkParmCol)
    {
        if (String.Compare(rnkParm.Name, "filetypepriorppt", true) == 0)
            rnkParm.Value = 150;
    }
}

このランキングパラメータですが、デフォルトでは、Webページ、ppt、doc、xml、xls、txt、リストアイテム の順番で下がっていきます。各値の詳細は上記のように API を使って確認することができますが、だいたいの目安として、Web パージが 166.983、txt が 153.051 といった具合に小刻みに低下していきます。

設定後は、再クロールが必要です。

管理プロパティの重み付け (設定方法 : API)

書籍でも記載している「管理プロパティ」ですが、実は、管理画面上に表示されていない "Weight" という属性を内部で持っており、この値が検索アルゴリズムで使用されています。優先度を上げたい管理プロパティがある場合には、API を使用してこのプロパティ値を変更することが可能です。
セミナーでもご説明したように、このプロパティ値は、実は、非常に影響が大きいので変更時は注意してください。

管理プロパティの Weight 値 は、0 以上の値を指定可能で、大きいほど優先されます。デフォルトでは、Author (8.215), Filename (29.43), Title (75.855) 以外は 0 が設定されています。つまり、検索エンジンでは、タイトルや URL にキーワードが含まれる場合は、よりランキングが高く評価 されますのでおぼえておきましょう。

管理プロパティの Length Normalization (設定方法 : API)

「管理プロパティ」には、Length Normalization というもう 1 つの属性も隠れています。
例えば、書籍の「本文」(body) と「タイトル」を比べた場合、キーワードの出現回数だけを見て評価・ランキングしてしまうと、「本文」のほうがヒットする数が当然多くなるでしょう。この調整をおこなうのが、この Length Normalization (日本語で書くなら、文字列長に応じた正規化 ?) です。
この値も、ランキングパラメータや Weight 同様に、API を使った変更が必要です。

精度の高い検索 (設定方法 : Web パーツ、共有サービスプロバイダの管理)

こちらはセミナーの資料に記載していましたが、(時間の関係で) 完全に説明を飛ばしてしまい失礼致しました。(設定に関し、いろいろと話すべきことが多く、時間がかかるので説明を省略してしまいました。)
Web パーツに [精度の高い検索結果] Web パーツがありますが、こちらを使用して表示結果のランキングをカスタマイズすることが可能です。検索センターと共に使用すると、おすすめコンテンツ (Best Bets) の設定などいろいろな設定が可能ですが、ここではランキングに関連する内容のみ記載します。

管理プロパティ (メタデータプロパティ) の設定画面に HightConfidenceMatching や、HightConfidenceDisplayProperty1, HightConfidenceDisplayProperty2, . . . , HightConfidenceDisplayProperty15 という名前のプロパティが入っていますが、[精度の高い検索結果] Web パーツを使用すると、クエリー時に、この HightConfidenceMatching に設定されている管理プロパティの内容とキーワードがマッチしている場合、その結果は優先的に上位に表示されるようになります。また、その際に表示される結果フィールドとして、管理プロパティのHightConfidenceDisplayProperty1 - HightConfidenceDisplayProperty15 が使用されます。

このように記載すると「なーんだ、これ、使えるじゃん!」と思われるかもしれませんが、1 つ大切な落とし穴があります。配布資料の中にも記載していたのですが、この「精度の高い検索」という仕組は、デフォルトでは People Search 用の設定になっています。つまり、People Search 以外で使用するには、Web パーツの側もデモでお見せしたように、難解な xslt の変更などをおこなう必要があるので注意してください。

検索用語のステミング (設定箇所 : Web パーツ)

検索用語のステミングとは、例えば、「走る」、「走った」、「走れ」などを同一のキーワードとして扱って検索する方法のことです。(こうした設定をシソーラスを使って設定すると、すべての動詞を登録することになり大変です。) この機能は言語によっては使用できませんが、「日本語」ではちゃんと使用できますので安心してください。
この設定は、[主要な検索結果] Web パーツの [検索用語のステミングの有効化/無効化] を設定することで有効にできます。日本語環境ではデフォルト「オフ」になっています。
なお、この設定を「オン」にした際は、上記のシソーラスの設定などと相性が良くない場合がありますので注意してください。 

 

以上がチューニングの各要素になりますが、この他にも、利用者にとっての「検索性」を司る設定として、共有サービスプロバイダにおけるクロールスケジュール (特に、頻度です) や [検索結果の削除] の設定なども影響してくるでしょう。
また、懇親会でもご質問がありましたが、検索結果の Web パーツにおける [重複した結果を削除する] をチェックすると、コピーされた結果など、"同じ" (とみなされる) コンテンツが丸めて表示されますので、こういった細かな点もハマるポイントです。(注意しないと、「ほしいものが出て来ない !」という結果になります。)
また、上記でもふれていますが、タイトル、URL、ファイル名のつけ方など、コンテンツの作成方法にも大きく影響しますし、実は URL の深さも影響しています (一般に深いほど評価は低くなります)。こうした点は、一般のインターネット検索における評価でも重要な要素となっていますので、コンテンツクリエーターの方もこうした仕組みを知っておいて損はないでしょう。(ご説明したように、一般のインターネット検索エンジンでは、さらに多くの指標が使われています。)

 

Comments (4)

  1. (このポストでは、書籍「 VSTO と SharePoint Server 2007 による開発技術 」(8章 : エンタープライズ検索と BDC) の補足情報を記載しています。基本的な内容 / 全体は、書籍を参照してください。)

  2. Tadashi Sekiguchi says:

    SharePoint2010のシソーラス辞書を作成中ですが困っていることがあります。

    辞書ファイルの中に例えば、「メイジ」と「メージ」を記述すると、用語が重複しているとみなされエラーとなってしまいます。恐らく「イ」と「ー」が同じコードとして処理され用語が重複しているとみなされていると思います。他にも「ヴァ」と「バ」が同一視されているようです。

    シソーラス辞書を作成するためには他にどんなパターンがあるかわからないと辞書が作れません。何か情報はありませんでしょうか。

  3. カタカナの揺らぎについては SharePoint のバージョンアップと共に改善されており、2003 については以下のドキュメントで軽く触れられておりますが、すみません、以降のバージョン (2007、2010) については、探してみましたが、(この揺らぎの処理の詳細仕様は) 明記されておりませんでした。

    technet.microsoft.com/…/cc984211.aspx

    ご指摘の通り、シソーラス作成の際など配慮が必要となってしまいますが、上記の内容などを参考に、ぶつかりそうなパターンがないかご確認ください。(「フェース」と「フェイス」などの長音のパターン、「ヴァイオリン」と「バイオリン」のパターンなど、いくつか記載されておりますので、都度都度の対応となりお手数ですが、ヒントとしてお使いください。。。)

Skip to main content