クローリング技術と自然言語処理

Web上の情報を収集することを「クロール」といいます。
そしてWeb上をクロールするロボットのことを総称で「クローラー」と呼びます。

このクローラーには大きく分けて二つの技術が用いられています。

■クローリング(スパイダーとも呼ばれる)
クローリングとはインターネット上でプログラムがWebページのリンクを辿り巡回していく技術です。
リンクからリンクへとハイスピードでクモのように這い回るのでスパイダーとも呼ばれています。
■スクレイピング
スクレイピングは取得したHTMLから任意の情報(文章、ファイル等)を抽出する技術です。

この「クロール」「クローラー」「クローリング」は意味合いが混同されがちですが、このように定義します。

今回卒業研究としてまずこのクローラーの作成を行いました。
具体的に、このクローラーのプログラムとしての処理の流れは

  1. あるWebサイトをクローリングする。
  2. クローリングしたHTMLからタイトルや記事の本文をスクレイピングする。
  3. スクレイピングしたタイトルや記事本文をデータとして保存する。
というようになります。

また、身近でわかりやすいクローラーの例としては、Googleが開発した自動巡回プログラムである「Googlebot」が挙げられます。 このGooglebotも上記のような仕組みでWebページを回遊、解析し、データを収集し、Googleの検索エンジンに活用されています。

クローリング技術のところで述べたスクレイピングでは、機械的にWebページの情報(文章、ファイル等)を取得することしかできません。
人間が見る分にはデータがWebページの記事全文であっても構わないかもしれませんが、このデータを機械的に処理する場合、情報が多すぎて処理しきれません。
したがって、例えばとあるWebページの記事の中にどんな単語が何回使われているのか、そのWebページが何を意図として書かれているのか、といったことがプログラムの中で判定したい場合、クローラーだけでは対応できません。

そこで使用される処理が「自然言語処理」になります。

■自然言語処理
日本語や英語などをはじめとした人間が使っている言語をコンピュータに処理させるための技術やソフトウェアなどの総称であり、人工知能と言語学の一分野です。現在、検索エンジンや多くのWebアプリケーションに活用されています。

さて、一言に自然言語処理といってもその手法は様々です。なので今回卒業研究の際に使用した自然言語処理をいくつかご紹介したいと思います。

■形態素解析
テキストデータから文法や、辞書と呼ばれる単語の品詞等の情報にもとづき、形態素(おおまかにいえば、言語で意味を持つ最小単位)の列に分割し、それぞれの形態素の品詞等を判別する解析手法です。
今回の研究では「MeCab」と呼ばれる形態素解析エンジンを用いました。
■tf-idf則
文章中の単語に関する重み付けを行う解析手法です。そのページにおける単語の出現回数やそのページのみならず選択したページグループの単語の出現回数を加味した上で重みを設定できます。
この重みの設定により機械的にそのページの趣旨を判定できます。
■Word2Vec
Googleの研究者が提案した手法です。
コーパスと呼ばれるテストデータを読み込み、単語を200次元ほどの空間上のベクトルとして表現します。
それにより単語の意味を(ベクトルとしてではありますが)プログラムが理解できるようになります。
結果として、例えば
王子様 ー 男 + 女 と入力すると 王女様 という出力をプログラム上で得ることができます。
Python
採用したプログラミング言語です。採用した理由としてはデータ解析、統計的処理をするモジュールが多彩だったことが挙げられます。

Django
PythonのWebアプリケーションフレームワークの一つ。データベース主体の Web サイトの構築を行うことができます。
CRUD(データの生成、読み取り、更新、削除)インターフェイスが提供されています。

pip,virtualenv
パッケージ管理にはpip、仮想環境にはvirtualenvを使用しました。。

サーバー関連、データベース
Webサーバにはnginx、アプリケーション用インターフェイスにはuWSGI、データベースにはPostgreSQLを使用しました。
  • PHPによる機械学習入門 斉藤 常治 (著), 高橋 佑幸(著)
  • マスタリングNginx Dimitri Aivaliotis (著), 高橋 基信 (翻訳)

  • 参考にさせていただいたWebページ(一部)

  • Django 1.4 documentation

  • Scrapy 1.0 documentation

  • MeCab: Yet Another Part-of-Speech and Morphological Analyzer

  • 米googleの研究者が開発したWord2Vecで自然言語処理(独自データ)

  • その他、様々なWebページに助けていただきました。
    お世話になったすべてのWebページを記載すること割愛しますが、助けていただいたWebページの製作者様に心から感謝申し上げます。