HeSearchAbout He

Open algorithm

順位の付け方は、全部見せる。

HeSearch は検索アルゴリズムを公開します。以下は現行の実装そのままの説明です。 検索画面の「HiRank(新)/標準/学習」から、いつでも切り替えられます。

  1. 候補
  2. 標準
  3. HiRank
  4. 学習
  5. 多様性
  6. 運用

01

候補生成

形態素索引から一致ページを抽出

→

02

スコア

classic / HiRank / 学習で点数化

→

03

多様性

同一サイトの埋め尽くしを制限

→

04

表示

公式・言語・鮮度を整えて提示

01Retrieval

候補の作り方

本文・タイトル・説明を PGroonga(TokenMecab)で全文索引しています。本文は先頭 8,000 文字までを索引対象にしています。クエリ語ごとに同義語を OR 拡張し、グループ間は AND で絞ります。

検索演算子として -除外語(除外)、"フレーズ"(完全一致)、OR(いずれかを含む)に対応しています。例:ラーメン -つけ麺 や "君の名は" 映画 のように書けます。

タイトル全体にクエリを含むページは優遇し、質問文(〜とは・〜とは何か・?など)では FAQ の構造化データを持つ Q&A ページを優遇します。 「〜とは」付きで0件のときは核(「君の名はとは」→「君の名は」)で再検索し、 それでも0件なら語を1つずつ外して緩和します(緩和時は「○○で検索しました」と表示)。 英数・和文の境界(「日本におけるGoogle」など)は空白補完した変種も OR で混ぜ、原文を主として評価します。タイトルの空白有無は同一視します。

キーワードスコアは各列の PGroonga スコアの最大値を使い、ln(1 + kw) で飽和させます。 本文・JSONB などの重い列は、上位に絞ってからだけ読みます。 総件数は別途正確に数え、スコア付けの対象はキーワード上位 5,000 件に絞っています(各列の上位1万件までを寄せ集めるため、大量ヒットでも破綻しません)。

02Classic score

標準スコア(線形和)

classic.sql
score = bias + ln(1+kw)×bm25 + title + desc
  + pagerank×pr + freshness×fr + authority×au + ctr×ctr
  + navigational + homepage + landing − wiki非記事
bias基準点0
bm25本文の一致 ln(1+kw)1.0
titleタイトル一致2.0
desc説明一致0.5
pagerank被リンクの信頼4.0
freshness新しさ1.5
authorityドメイン権威3.0
ctrクリック率1.0
navigational公式一致6.0
homepage公式のトップ1.5
landingブランド直下ホーム10.0

ブランド名クエリで、その登録可能ドメイン直下(www 含む)のホームが見つかった場合は landing 加点に加え、TLD 別の上乗せ(.com +2.0/.co.jp +1.6/.jp +1.2/.net +1.0/.org +0.4)があります。

03HiRank score

HiRank(信頼の乗算)

信頼の低いページは、関連度が高くても上位に来にくくします。信頼係数 T を関連度に掛け算し、公式・ブランド加点はその後に足します。

hirank.sql
T = 1 + 0.6·ln(1+pagerank·2000) + 0.4·ln(1+authority·2000) + 0.8·CTR
score = T × BM25F(本文/タイトル/説明/鮮度) + 公式・ブランド加点
04Learning

学習は、検証に通ったものだけ。

クリック集計からロジスティック回帰で重みを学習します。特徴量は bm25 / title / desc / pagerank / freshness / authority の6つで、スケール差を吸収するため標準化して学習し、生特徴量の重みに変換し直します。

データは決定的に4分割してホールドアウト検証し、訓練データ 400 エポック(学習率 0.1、L2 1e-3)で学習します。検証 AUC が 0.55 未満、またはサンプルが 200 件未満のモデルは有効化しません。 配信時も AUC 0.52 未満のモデルは無視し、既定の重みに戻ります。 過去には精度のないモデルが順位を逆転させたことがあり、この仕組みで再発を防いでいます。

05Diversity

埋め尽くしを許さない。

同一サイト(登録可能ドメイン単位)からの表示数に上限を設けます。Wikipedia は全言語を1サイトとして扱い1件まで。単一語のブランドクエリはブランド系列で1件、 複数語なら2件まで。その他のサイトは2件までです。

クエリ言語の Wikipedia を優先し、英語版が出た場合は言語間リンク(langlinks)で 日本語版が索引にあれば差し替えます。Wikipedia のプロジェクト名前空間(Wikipedia: や Portal: など)は大幅に降格します。

06Operations

運用も公開する。

ランキングの全再計算は6時間ごと(変更の無い行は更新しない)、学習は1日1回です。 同一クエリの再実行は60秒だけキャッシュします。robots.txt と noindex は尊重し、オプトアウト・ブロックの申告は検索から除外します。

← About He に戻る

ホームAbout Heヘルプ設定標準にする協力する利用規約プライバシーポリシー