noteで書くペンギンアップデートなどの対応として大量の被リンクを「質の良いリンク」「削除・否認すべきリンク」に分類する作業に、「ベイジアンフィルタ」や「ロジスティック回帰」といった「機械学習」を使った人工知能的なアプローチを試した記録をお届けする。技術的な部分に踏み込む内容なので、エンジニアではない読者には難しく感じられるかもしれないが、テクノロジーを使ってSEOを進めるということの一端を知るという意味で、読んでみてほしい。この記事はもともとMozのYOUmozセクションに掲載したものですが、われわれのコミュニティにとって非常に興味深く、大きな価値をもたらしてくれるのでこちらのブログに格上げしました。筆者の意見は筆者独自のものであり、Mozの考え方を示すものではありませんもしあなたの身近に「自分は賢い」とうぬぼれている人がいたら、機械学習のツールを作らせてみよう。大学で歴史を専攻した人だったら、30分も経たずに、膝を抱えて丸くなり、体を前後に揺らしながらハミングでもして現実逃避していることだろう。「機械学習」は、データから特徴を抽出したり、データに隠れた法則を見つけたり、データから予測したりするための技術。はじめよう」という連載があるので、その第1回を読むとわかりやすいだろう。はじめよう(gihyo.jp)しかし時には、グーグルのサービス利用規約(TOS)に準拠しているかをチェックするために、機械学習のツールを作るか、または25万のWebページを手作業で確認して回るかのニ者択一を迫られる場合がある。手作業を選べば、「体を揺らしながらハミング」の状況は確かになくせるが、幼稚で生産性の上がらない作業に突入することになる。した2つの選択肢は、まさに僕自身が6か月前に直面したものだった。僕がCEOを務めるPortentは、いくつかの企業からペンギンアップデートなどに起因するペナルティへの対処を手伝ってほしいという依頼を受けた。各社とも、さまざまな理由でリンクプロファイルが汚れていた。リンク分析という苦行。僕が未熟だった頃......僕が最初に手がけたリンクプロファイルの見直しは、以下のように手作業で行った。SEO、そしてGoogleウェブマスターツールから、すべての外部リンクページのリストをダウンロードする。URLを分析して、明らかによくないリンクは削除する。リンクページが「FreeLinksDirectory.com」や「ArticleSuccess.com」といったドメイン名にあれば、容赦なく縁を切る。ドメイン名とページのトラストランクとトラストフローを分析する。ゼロがあるものは、「ホワイトリスト」ドメイン名のリストにあるものを除き、すべて捨てる。Python、Selenium、PhantomJSを使って、残っている各リンクページのサムネイルを自動取得する。このステップは必須ではないが、他者の力を借りるつもりなら、やっておくと役に立つ。恵まれない下働きの誰かを信頼できるPortentチームの仲間に引き入れてそのサムネイルを調べさせ、それらが投稿掲示板か、露骨なリンクスパムか、それとも別のものなのか、手早く見分けさせる。した準備作業は手間のかかる面倒なことだと思うだろう。そのうえ、これらの作業をすべて行った後であっても、僕が受け持った最終的な点検では、目玉が腐りそうな作業を10時間以上しなければいけなかった。ペンギンアップデートなどのペナルティへの対応は大切だ。古くからSEOを積極的に行っていたならば、やらなければいけない。それにしても、もっと手間のかからない良い方法があったはずだ。Learning)はより良い解決策となる可能性があるのではないかと。僕は機械学習について詳しいわけではないが、可能性があることを理解するくらいには知っていたので、挑戦してみることにした。詰まるところ、どれだけ大変になるとしても、手作業よりはマシだろうから。機械学習の基本的な概念と流れ機械学習の概念を把握することは、それほど難しくない。一般的な機械学習の流れと、今回のテーマである「大量の被リンクを、スパム的なリンクとそうでないリンクに自動的に判断する」という場合にどうしたかを、順番に解説する。分類する必要がある大きなデータセットを準備する。一般的な機械学習で使われるのは、書籍名、人名、Facebookの投稿などが考えられるだろう。僕の場合は、リンクを張っているWebページ群を使った。今回の例では、その被リンクを削除してもらうべきかを判断するために、リンク元ページが「スパム」ページと、「優良」ページを分けたい。少数のデータを取り出して、手作業で分類することで、機械学習のベースとなる分類ヒントを与えられるサンプル分類を作る。これがトレーニングセットになる。本当に幸運な人なら、他人が分類してくれたものを見つけられるだろう。Toolkit(NLTK)には、感情の分析に使える映画レビューの資料群がある。適切な機械学習ツールを選ぶ(笑)。ツールを正確に設定する(笑......ううぅ......大丈夫......のはず)。特徴(分類に使う項目属性)をあらかじめ選択して、トレーニングセットを機械学習ツールに取り込む。うまくいけば、ツールがパターンを見つけ出すだろう。ツールを使い、データセットにある各項目をトレーニングセットと比較する。ツールは、各項目の分類と、加えて、その分類の信頼度を返す。本当に賢いツールなら、その分類において最も重要だった特徴を返してくれる。一部、実際には面倒なだがさらっと表現している部分(笑)を除けば、このプロセスは至って単純に思える。実際には、その(笑)の部分がすべてを物語っている。この7ステップは、「月まで飛び、月に着陸し、飛んで地球に戻る」が3ステップで簡単だというのと同じ意味で、簡単だ。APIといった既存のツールセットの利用に向かうこともできる。すべてを手作りすると決めるのもいい。僕がやったのは後者だ。それだけ時間があったからね。どちらとも決められないなら、読み続けてほしい。この記事を読んでみて、(叫び声を上げ)既製のツールに助けを求めようと思えなければ、コーディングを開始するといい。僕から祝福の言葉を贈ろう。使用するツールは、Python、NLTK、scikit-learnここまでで説明したのは、機械学習の一般的な話だ。Spam」、すなわち「スパム判定」のこと)の具体的な工程を概説しよう。SEO、そしてGoogleウェブマスターツールから、外部のリンクページすべてのリストをダウンロードする。Pythonの小さなスクリプトを使って、それらのページの内容をスクレーピングする。SEOの指標を入手する。使いたいと思う特徴は追加して作る。僕の場合、たとえば、読みやすさのレベルと、ワードあたりのリンク数を算出しようと思った。重要なワードすべてと、そのワードの数も取り出したくなった。最後に、それぞれの結果とトレーニングセットとを比較する。これをすべて行うために僕が必要としたのは、プログラム言語、ある種の自然言語処理(重要な言葉の発見、HTMLの掃除など)、プログラム言語につなげられる機械学習のアルゴリズムなどだ。僕はすでにちょっとしたPythonハッカーなので(プログラマではない。僕のコードはプログラマ泣かせだ)、プログラミング言語はPythonが自然な選択だった。Toolkit(NLTK)はすこしかじったことがあった。Python向けに作られており、ストップワードの除去やHTMLの掃除など、必要なことすべてを簡単にやってくれた。機械学習のツールセットには、scikit-learnというPythonのライブラリを選んだ。理由は、自分でも読めるチュートリアルが公開されていたのが大きい。これらを、あまり美しくないPythonのコードを使ってまとめ、さらに、保管のためにデータベースのMongoDBにつないだ。この記事は前後編の2回に分けてお届けする。次回は、今回に引き続き筆者が挑戦した機械学習によるリンクスパム判定ツールの顛末を見ていく。掲載された以下の記事を日本語訳したものです。最近(過去90日間)の記事で、Facebookの「いいね!」が多かった記事をお見逃し無く。ネット広告への強い嫌悪感、テレビや新聞の倍以上に。いいね!伝説のTwitter企業アカウント“中の人”の先駆け。いいね!私は変人コレクター。ポータルサイト運営企業にてマーケティング担当の募集です。ビジネス成果に貢献する5つのTips売上が伸びるECサイトの必須条件。行動ターゲティングネット広告の種類の1つ。Patterns』を3名様にプレゼント!【受付終了】企業がDXに向かう取り組み方を考える『デジタルファースト・ソサエティ』を3名様にプレゼント!すべて見るインフォメーションWeb担のメルマガを購読しませんか?Web担の記事がコンパクトに毎週届くメールマガジン「Web担ウィークリー」は、10万人が読んでいる人気メルマガ。忙しいあなたの情報収集力をアップさせる強い味方で、お得な情報もいち早く入手できます。編集後記サイトマップFAQ(よくある質問とその答)Web担に広告を掲載しませんか?購読者数10万人のメールマガジン広告をはじめとする広告サービスで、御社の認知向上やセミナー集客を強力にお手伝いいたします。