Moz - SEOとインバウンドマーケティングの実践情報

リンクスパム判別は人工知能で? 機械学習での判別に挑戦したSEOマンの記録(前編)

大量の被リンクの判別に「ベイジアンフィルタ」や「ロジスティック回帰」といった「機械学習」を使った記録

ペンギンアップデートなどの対応として大量の被リンクを「質の良いリンク」「削除・否認すべきリンク」に分類する作業に、「ベイジアンフィルタ」や「ロジスティック回帰」といった「機械学習」を使った人工知能的なアプローチを試した記録をお届けする。
技術的な部分に踏み込む内容なので、エンジニアではない読者には難しく感じられるかもしれないが、テクノロジーを使ってSEOを進めるということの一端を知るという意味で、読んでみてほしい。

この記事はもともとMozのYOUmozセクションに掲載したものですが、われわれのコミュニティにとって非常に興味深く、大きな価値をもたらしてくれるのでこちらのブログに格上げしました。筆者の意見は筆者独自のものであり、Mozの考え方を示すものではありません
お願い、ロジスティック回帰の話はこれっきりにしてね。

もしあなたの身近に「自分は賢い」とうぬぼれている人がいたら、機械学習のツールを作らせてみよう。たとえば大学で歴史を専攻した人だったら、30分も経たずに、膝を抱えて丸くなり、体を前後に揺らしながらハミングでもして現実逃避していることだろう。

※Web担編注 「機械学習」は、データから特徴を抽出したり、データに隠れた法則を見つけたり、データから予測したりするための技術。
機械学習がどんなものでどんな風に役立つのかをもっと知りたい方は、gihyo.jpに「機械学習 はじめよう」という連載があるので、その第1回を読むとわかりやすいだろう。

しかし時には、グーグルのサービス利用規約(TOS)に準拠しているかをチェックするために、機械学習のツールを作るか、または25万のWebページを手作業で確認して回るかのニ者択一を迫られる場合がある。手作業を選べば、「体を揺らしながらハミング」の状況は確かになくせるが、幼稚で生産性の上がらない作業に突入することになる。

こうした2つの選択肢は、まさに僕自身が6か月前に直面したものだった。僕がCEOを務めるPortentは、いくつかの企業からペンギンアップデートなどに起因するペナルティへの対処を手伝ってほしいという依頼を受けた。各社とも、さまざまな理由でリンクプロファイルが汚れていた。

リンク分析という苦行。僕が未熟だった頃……

僕が最初に手がけたリンクプロファイルの見直しは、以下のように手作業で行った。

  1. SEOmoz、Majestic SEO、そしてGoogleウェブマスターツールから、すべての外部リンクページのリストをダウンロードする。

  2. URLを分析して、明らかによくないリンクは削除する。リンクページが「FreeLinksDirectory.com」や「ArticleSuccess.com」といったドメイン名にあれば、容赦なく縁を切る。

  3. ドメイン名とページのトラストランクとトラストフローを分析する。ゼロがあるものは、「ホワイトリスト」ドメイン名のリストにあるものを除き、すべて捨てる。

  4. Python、SeleniumPhantomJSを使って、残っている各リンクページのサムネイルを自動取得する。このステップは必須ではないが、他者の力を借りるつもりなら、やっておくと役に立つ。

  5. 恵まれない下働きの誰かを信頼できるPortentチームの仲間に引き入れてそのサムネイルを調べさせ、それらが投稿掲示板か、露骨なリンクスパムか、それとも別のものなのか、手早く見分けさせる。

こうした準備作業は手間のかかる面倒なことだと思うだろう。そのうえ、これらの作業をすべて行った後であっても、僕が受け持った最終的な点検では、目玉が腐りそうな作業を10時間以上しなければいけなかった。

ペンギンアップデートなどのペナルティへの対応は大切だ。古くからSEOを積極的に行っていたならば、やらなければいけない。

しかし、それにしても、もっと手間のかからない良い方法があったはずだ。

そこで僕は考えた。リンクスパムの対処に、機械学習(Machine Learning)はより良い解決策となる可能性があるのではないかと。

僕は機械学習について詳しいわけではないが、可能性があることを理解するくらいには知っていたので、挑戦してみることにした。

詰まるところ、どれだけ大変になるとしても、手作業よりはマシだろうから。

機械学習の基本的な概念と流れ

機械学習の概念を把握することは、それほど難しくない。

一般的な機械学習の流れと、今回のテーマである「大量の被リンクを、スパム的なリンクとそうでないリンクに自動的に判断する」という場合にどうしたかを、順番に解説する。

  1. 分類する必要がある大きなデータセットを準備する。

    一般的な機械学習で使われるのは、書籍名、人名、Facebookの投稿などが考えられるだろう。僕の場合は、リンクを張っているWebページ群を使った。

  2. カテゴリを定義する。

    今回の例では、その被リンクを削除してもらうべきかを判断するために、リンク元ページが「スパム」ページと、「優良」ページを分けたい。

  3. 少数のデータを取り出して、手作業で分類することで、機械学習のベースとなる分類ヒントを与えられるサンプル分類を作る。これがトレーニングセットになる。

    本当に幸運な人なら、他人が分類してくれたものを見つけられるだろう。たとえば、Natural Language Toolkit(NLTK)には、感情の分析に使える映画レビューの資料群がある。

  4. 適切な機械学習ツールを選ぶ(笑)。

  5. ツールを正確に設定する(笑……ううぅ……大丈夫……のはず)。

  6. 特徴(分類に使う項目属性)をあらかじめ選択して、トレーニングセットを機械学習ツールに取り込む。うまくいけば、ツールがパターンを見つけ出すだろう。

  7. ツールを使い、データセットにある各項目をトレーニングセットと比較する。

  8. ツールは、各項目の分類と、加えて、その分類の信頼度を返す。そして、本当に賢いツールなら、その分類において最も重要だった特徴を返してくれる。

一部、実際には面倒なだがさらっと表現している部分(笑)を除けば、このプロセスは至って単純に思える。

しかし実際には、その(笑)の部分がすべてを物語っている。この7ステップは、「月まで飛び、月に着陸し、飛んで地球に戻る」が3ステップで簡単だというのと同じ意味で、簡単だ。

注記:ここで、BigMLDatameerグーグルのPrediction APIといった既存のツールセットの利用に向かうこともできる。あるいは、すべてを手作りすると決めるのもいい。僕がやったのは後者だ。まあ、それだけ時間があったからね。まだどちらとも決められないなら、読み続けてほしい。この記事を読んでみて、(叫び声を上げ)既製のツールに助けを求めようと思えなければ、コーディングを開始するといい。僕から祝福の言葉を贈ろう。

使用するツールは、Python、NLTK、scikit-learn

ここまでで説明したのは、機械学習の一般的な話だ。

ここからは、IIS(「Is It Spam」、すなわち「スパム判定」のこと)の具体的な工程を概説しよう。次のようになる。

  1. SEOmoz、Majestic SEO、そしてGoogleウェブマスターツールから、外部のリンクページすべてのリストをダウンロードする。

  2. Pythonの小さなスクリプトを使って、それらのページの内容をスクレーピングする。

  3. 各リンクページについて、SEOmozとMajestic SEOの指標を入手する。

  4. 使いたいと思う特徴は追加して作る。僕の場合、たとえば、読みやすさのレベルと、ワードあたりのリンク数を算出しようと思った。また、重要なワードすべてと、そのワードの数も取り出したくなった。

  5. 最後に、それぞれの結果とトレーニングセットとを比較する。

これをすべて行うために僕が必要としたのは、プログラム言語、ある種の自然言語処理(重要な言葉の発見、HTMLの掃除など)、プログラム言語につなげられる機械学習のアルゴリズムなどだ。

僕はすでにちょっとしたPythonハッカーなので(プログラマではない。僕のコードはプログラマ泣かせだ)、プログラミング言語はPythonが自然な選択だった。

Natural Language Toolkit(NLTK)はすこしかじったことがあった。Python向けに作られており、ストップワードの除去やHTMLの掃除など、必要なことすべてを簡単にやってくれた。

機械学習のツールセットには、scikit-learnというPythonのライブラリを選んだ。理由は、自分でも読めるチュートリアルが公開されていたのが大きい。

これらを、あまり美しくないPythonのコードを使ってまとめ、さらに、保管のためにデータベースのMongoDBにつないだ。

この記事は前後編の2回に分けてお届けする。次回は、今回に引き続き筆者が挑戦した機械学習によるリンクスパム判定ツールの顛末を見ていく。

用語集
Facebook / Googleウェブマスターツール / HTML / Python / SEO / ストップワード / ダウンロード / ドメイン名 / リンク / 外部リンク / 被リンク
この記事が役に立ったらシェア!
メルマガの登録はこちら Web担当者に役立つ情報をサクッとゲット!

人気記事トップ10(過去7日間)

今日の用語

LPO
リンクや広告をクリックしてユーザーが最初に着地(ランディング)するページの内容を ...→用語集へ

インフォメーション

RSSフィード


Web担を応援して支えてくださっている企業さま [各サービス/製品の紹介はこちらから]