LITERALLYスマートフォン用の表示で見るLITERALLY知っておくと楽しい知識をまとめて紹介2016-11-21【グーグル創業者の論文要約】SEO対策の前に知っておきたいGoogle検索エンジンの仕組みSEOGoogle検索エンジン初期の仕組みは論文で書かれているGoogleの創業者はご存知の通り「ラリー・ペイジ」と「セルゲイ・ブリン」の2人である。2人はスタンフォード大学での博士課程在籍中に知り合い『検索エンジン』について共通の関心があったことから、1998年に共著で論文を執筆した。Engine(大規模なハイパーテキスト的なウェブ検索エンジンに関する解剖)』。この論文では、Googleの検索エンジンのインデックスや検索順位決定のベースとなった考え方が詳しく解説されている。「こんなに載せてしまっていいの?」と不安になるレベルで詳しく書かれている。SEO対策の前に論文を読んでおこうこの論文は、スタンフォード大学の情報研究室のWebサイトから参照することができる。名論文であるのに関わらず、ネットで探しても日本語で読める要約等は見つからなかった。この論文内容を読むことにより、検索エンジンの理解、さらにはWebサイトの正しいSEO対策の理解にもつながるかもしれない。この記事では、論文の要約と、簡単な解説・考察をまとめる。意訳した部分が多くあること、個人的な判断で重要だと思われる部分を太字等で強調していることにご留意ください。Introductionより)1998年当初の、ラリー・ペイジとセルゲイ・ブリンの検索エンジンに対する問題意識が書かれています。検索エンジンを欺くようなSEO対策をする人は(随分減ったものの)未だにいますね。Qualityより)1998年当時は「検索エンジンは、より多数のページをインデックスし、結果表示できるモノこそが最強」という考え方がメジャーだったようです。そんな中、グーグルは「いや、検索の"規模"よりも"精度"を高めることが大事やろ」と考えていたわけですね。Researchより)Googleはもともと研究室のプロジェクトから生まれたこともあるでしょうが、学術研究のサポートすることを大きな目標としています。Scholarなんかは、まさにこの目標から生まれたものでしょう。Introductionより)googolとは極めて大きい数字の単位のことであり、1googol=「10の100乗」です。実際には、ラリー・ペイジがgoogolの綴りを間違えたことから「google」になったというのは有名な話です。Page同士のリンクの繋がりや、リンクのテキストにより関連度を計算できる」と考えました。Webより)※クロールとは:ソフトウェアなどが自動でWebページを巡回してデータ収集する作業のこと※クエリとは:データベース管理システムに対する処理要求のこと。ここでいうクエリは、ユーザーが『検索したいキーワードの組み合わせを入力』することで『このキーワードに関するページ結果を表示してください』というリクエストのことですね。ここからは少し技術的な話になります。Webページを高速で巡回し、保管スペースを効率的に利用して、ユーザーが検索したら迅速に検索結果を返すことが検索エンジンには欠かせないということですね。して検索結果に優先順位をつけるか検索結果の精度を高めるためのGoogleの2つの大きな特徴ウェブのリンク構造を利用して、各ページの品質を計算すること。Webより)ページランクの考え方もともとGoogleは、各ページのページランクを公表していましたが、2016年になってその機能を完全に廃止しました。いえ、公表がされなくなっただけで、ページランクの考え方は、今も検索順位に大きな影響を与えていると考えられます。そのため、ページランクがどのような仕組みで動いていたのか知っておくのは有用でしょう。ページを決めるのに利用するということですね。Calculationより)学術研究の世界では「掲載論文が特定の期間内にどれくらい頻繁に引用されたか」を平均値で計算することで、ジャーナルの影響度を測ります。Googleでは「1リンク=1引用」と単純にカウントするのではなく、同じリンクでも状況に応じてリンクの重み付けを変えることで、より精度を高めています。Tnのページから引用されていると仮定する・パラメータdは減衰係数で、0〜1の間で設定(通常はd=0.85に設定)・また、C(A)は、ページAから出て行くリンクの数として定義される・ページAのページランクは、以下のように求められる。Justificationより)つまるところ・ページランクの高いWebページからリンクされる方が、ページランクは高くなる・貼ってあるリンク数が少ないWebページからリンクされる方が、ページランクは高くなる(リンクがベタベタ貼ってあるページからリンクされることの効果は薄い)・引用してくれているページが多数あるほどページランクは高くなる・引用してくれているページのページランクが高いほど、引用されたページのページランクは高くなるということですね。怪しげなサイトよりもYahooに引用された方がページランクが高くなるのは合理的なことでしょう。Textより)たとえば、『検索順位を上げるSEO対策をイチから図解』というタイトルの記事があります。この記事に対して、あるページから『検索エンジンのアルゴリズムについてはこちら記事が参考になります』というリンクを貼れば、"検索エンジン"、"アルゴリズム"というキーワードもこの記事に関連しているのだとGoogleは認識するわけです。Featuresより)より大きな見出しに含まれているキーワードや、太文字に強調されたキーワードを、Googleは重要だと判断します。SEO対策としては、上位表示したいキーワードを見出しに入れたり、太字化することは有効だと言えるでしょう(過度に実行すると逆効果の可能性もあります)。リポジトリ:データや情報などが体系立てられた上で保管されている場所ここまでは、イメージがしやすいですね。リポジトリには「docID」「ページURL」「ページのテキスト」「ダウンロード日時」などが記憶されます。つけて辞書(レキシコン)を作成するさらにインデクサは単語情報(「単語」「その単語のドキュメント内の位置」「おおよそのフォントサイズ」「大文字小文字の使用」など)をバレルに保存するバレルでは、これらの単語情報を持つフォーワードインデックス※が作成されるソータは、バレルを読み込み、文書IDによりソートされているものを、単語IDにより再ソートし、転置インデックス※を生成するソータは、転置インデックス内に、単語IDリストとオフセットリストを生成インデクサは、すべてのWebページのすべてのリンクを解析し、その情報をアンカーファイルに保存する(このファイルには「リンクのテキスト」と「どのリンクがどこを指しているのか」を判断するための情報が入っている)URLリゾルバは、アンカーファイルを読み取り、相対URLを絶対URLに変換した上で、文書IDへと変換URLリゾルバは、さらにアンカーテキストを、アンカーが指し示す文書IDと結びつけた上で、フォーワードインデックスに送るまた、URLリゾルバは「文書IDのペアであるリンク」のデータベースを生成する。Overviewより)※フォーワードインデックス:説明をするとかなり長くなりそうなので、こちらのページを参照すると良いと思います。このページの説明では、転置インデックスにするために表をひっくり返していますが、そのひっくり返す前の状態がフォーワードインデックスにあたりますね。転置インデックス:転置インデックスとは、全文検索を行う対象となるドキュメント群から単語の位置情報を格納するための索引構造のことです。イメージとしては、本の巻末にある索引のようなものですね。複雑になってきました。整理すると、インデクサは、色んな働きをします。重要な働きは次の2つ。1ドキュメントの解析をして辞書(レキシコン)を作成します。このレキシコンというのは、単語が並んだ語彙表のようなイメージです。2リンク情報を解析します。バレルにおいて、フォーワードインデックスが作成されます。ソータは、フォーワードインデックスから転置インデックスを作成します。フォーワードインデックスというのは文書IDをキーとして、ページ情報が保存されています。一方で、転置インデックスは、単語IDをキーとして情報が保存されています。実際に検索が行われるときには単語が入力されて行われますので、検索がしやすいように、フォーワードインデックスから転置インデックスを作成するわけです。このあたりの流れについては、以下のWebサイトで非常に分かりやすく説明されています。上記の説明より理解しやすいと思うので、いまいちよく分からなかった方は一度読んでみると良いでしょう。構文解析、バレルへのインデックス、ソータの働きについては詳細も書かれていたので載せておきます。妥当な速度で動作し、かつ非常に堅牢なパーサーを開発するのはかなり大変パーサとは複雑な構造のテキスト文書を解析し、プログラムで扱えるようなデータ構造の集合体に変換するプログラムのことです。無数のバリエーションを持つWebページを解析するのが大変というのは、想像に難くないですね。バレルへのインデックスについてパースされたドキュメントは、多数のバレルにエンコードされるすべての単語は、インメモリハッシュテーブルを使用することにより、単語IDに変換されるレキシコンハッシュテーブルへの新規追加は、ファイルに記録される単語が単語IDに変換されると、ドキュメント内の各単語の出現がヒットリストに変換され、フォーワードバレルに書き込まれるインデックスフェーズを並列化する上での大きな難点は、レキシコンを共有する必要があることだったGoogleでは「レキシコンを共有するのではなく、1400万語に固定されたベースのレキシコン上には無い単語を全てログを書き込む」というアプローチを取ることにしたそれにより、複数のインデクサを並行して実行することができ、追加単語が書き込まれた小さなログファイルを、1つインデクサで処理することができるレキシコンというのは、先程もちょっと説明しましたが、辞書であり語彙表のことです。単語がひたすら並んでいるイメージですね。複数のインデクサを同時に実行しようとすると、それらの複数のインデクサからレキシコンに書き込めるように共有する必要があります。これは効率が悪いということで、Googleではベースとなる語彙を一定数決めておき、そこには載っていない単語をそれぞれのインデクサが新しく追加していく、という方法をとったのですね。ソータの働きについて転置インデックスを生成するために、ソータはそれぞれのフォーワードバレルを取り込み、単語IDでソートして、タイトルとアンカーヒットとフルテキストの転置バレルを作成するこのプロセスは、同時には1バレルしか発生しないため、一時的な保管はほとんど必要ないまた、Googleでは、異なるバケットを同時に処理できるよう複数のソータを利用して並行的にソートフェーズを実行するバレルはメインメモリに収まらないため、ソータは単語IDと文書IDに基づいてメモリに収まるバスケットにさらに細分化する。その後、ソータは、各バスケットをメモリにロードした上でソートし、その内容を転置バレルに書き込む転置インデックスが作成されるイメージについては「転置索引とは何か?」を読むとよく分かります。主なデータ構造についての詳細ここはやや複雑なので、読み飛ばしても良いでしょう。Googleのデータ構造は最適化されているため、大規模なドキュメント群をわずかなコストでクロール、インデックス、検索することができるディスクシークを完了するのには未だに約10ミリ秒が必要になってしまう。Listsより)ヒットリストとレキシコンの関係について、少し噛み砕いて説明すると、レキシコン(辞書)には「単語」情報が入っており、ヒットリストには「どこのドキュメントのどこに、どんな装飾状態でその単語が入っているか」という情報が入っています。レキシコンには「この単語は、どのヒットリストに対応しているか」という情報も入っているので、2つをつなぎ合わせることができます。「SEO」というキーワードを探す場合、まずレキシコン内で「SEO」という単語を見つけます。それから「SEO」に対応するヒットリストを見つけ「SEOという単語はこのドキュメントの、何文字目に、このくらいのフォントサイズで含まれている」ということが分かるのですね。Indexより)転置インデックス単語一覧の辞書(レキシコン)には、単語IDの対応するバレルへのポインタが含まれているこのポインタは、対応するヒットリストと共に、文書IDの文書リストを指す(この文書リストは、全ドキュメントにおける全単語の出現を示す)重要な問題は、文書IDが文書リストにおいてどのような順序で表されるべきか、ということ。1つめの方法は、文書IDによりソートして格納する方法。これにより、複数の単語クエリに対して異なる文書リストを迅速にマージすることができる。2つめの方法は、各ドキュメント内の単語出現のランキングによりソートして格納する方法。これにより、1語のクエリに対する回答が簡単になる上、複数単語の組み合わせのクエリに対する回答がリストの始まりに近くになる。この方法ではマージが困難で、ランキング機能を変更するにはインデックスを再構築する必要があるGoogleでは、これらの選択肢の中で妥協点を選び、2セットの転置バレルを保持。1つは、タイトルやアンカーヒットを含むヒットリスト向けのセット。1つは全ヒットリスト向けのセット。Index)クロールの仕組み膨大な数のWebページに対応するために、Googleは高速分散クロールシステムを持っている1つのURLサーバーは、複数のクローラーにURLのリストを提供するURLサーバーとクローラーはどちらもPythonで実装されており、各クローラーは一度におよそ300もの接続を保つクロールにおいて、主にパフォーマンスの負荷となるのはDNSルックアップGoogleでは、各クローラーは独自のDNSキャッシュを保持しているため、各ドキュメントをクロールする前にDNSルックアップを行う必要はないWebページおよびサーバーは、多種多様であるため、インターネットの大部分で実際に実行することなしに、クローラーをテストすることは事実上不可能Web全体のうち1ページだけで発生するかもしれない曖昧な問題が常に数多くあり、クローラーがクラッシュしたり、予測できない不正な動作が発生したりしてしまう可能性が常にあるクローラーにように、インターネットの多くの部分にアクセスするシステムは、この上なく堅牢に設計されなければならない。Webより)GoogleのWebページの巡回システムについてちょっと詳しく書かれています。膨大な数の、それも様々なタイプのWebページを読みにいくので、当然、予測のできないようなエラーが発生してしまうのですね。Googleクエリの評価)ざっくりというと、単語を単語IDに変換した上で、保存されていた文書リストからマッチするものを探すという流れです。応答時間に制限を設けるために、特定の数の一致するドキュメントが見つかると、サーチャーは自動的に図4のステップ8に進むこれは、最適ではない結果が返される可能性があるため、この問題を解決する方法を検討中(当時)。Googleでは、一般的な検索エンジンよりもWebドキュメントに関する情報を多く利用して検索順位を決定する(単語の出現位置、フォント、および大文字表記情報、アンカーテキスト、ページランクなど)。Searchingより)様々な指標をバランス良くみることで、検索順位を決めているということですが、この指標の種類はこの論文が書かれた頃から、また随分と増えていることでしょう。複数のヒットリストを一度にスキャン。ドキュメント内で近接して出現するヒットは、離れて出現するヒットよりも高く重み付けする複数のヒットリストからのヒットは、近接するヒットが一緒になるようにマッチングされるマッチングされた全ヒットのセットに対しては、近接度が計算される。Statisticsより)システムパフォーマンスを上げるための試みGoogleの主な作業はいわば、クロール、インデックス作成、ソートの3つクロールに要する時間を予測することは困難です。ディスクがいっぱいになったり、ネームサーバーがクラッシュしたり、その他にもシステムを停止させるような問題が発生するためインデクサがボトルネックにならないように、Googleでは十分に最適化を行った。(ドキュメントインデックスへの一括更新と、重要なデータ構造のローカルディスク上への配置など)。Conclusionsより)これからやるべきこと(当時)大規模Web検索エンジンは、複雑なシステムであり、まだやるべきことがたくさんある目下の目標は、検索効率を向上させ、およそ1億のWebページに対応すること簡単に効率改善する方法には、クエリキャッシング、スマートディスクの割り当て、サブインデックスなどがあるまた「更新」については、まだ多くの研究をする必要がある。Workより)このあたりは論文執筆当初のことなので、現在ではその多くが対応されています。ここに載っていない取り組みも多く行われていますね。研究ツールというGoogleのビジョン高品質の検索エンジンであることに加えて、Googleは研究ツールでもあります。Googleが収集したデータは、すでに他の多くの論文が会議などに提出されています。Googleは有用な研究ツールだけではなく、幅広いアプリケーションに欠かせないツールです。私たちは、Googleが世界中の検索者と研究者のためのリソースとなり、次世代の検索エンジンテクノロジーを呼び起こすことを願っています。Toolより)最後にリンクは重要ここまで、論文の内容をまとめてきましたが、とにかく強調されていたのが「Googleはリンクの繋がりや、リンクのアンカーテキストをよく見ていますよ」ということ。いえ、この論文はGoogleが生まれた初期のもので、そのアルゴリズムは大きく変わっているはずです。検索順位に影響する指標の数も増えているでしょうし、インデックスの仕組みもより効率的になっていることでしょう。質の高いコンテンツを作ることが長期的に有効なSEO対策になるとはいえ、ラリー・ペイジとセルゲイ・ブリンは、Googleを作った当初から「ユーザーにとって有益な、質の高い検索エンジンを作ること」が何より大事だと論文中でしつこく主張しています。Googleを信じるなら、Webサイト運営者やライターにとって、最も持続的かつ効率的なSEO対策は「ユーザーが求めている、ユーザーのためになるコンテンツを作ること」でしょう。Googleはこれからも高品質な情報がユーザーに届くように進化し続けていくはずです。詳しく検索エンジンの仕組みについて知りたければ「検索エンジン自作入門」を読んで見るとよく分かると思います。»SEARCHスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。