ウェブコーパスの作成方法と内容,現状での課題

先月から作成中のウェブコーパスAmazon EC2 を使ってウェブコーパスを作成中 - やた@はてな日記)について,現状でのまとめです.

はじめに

統計的言語処理の研究において,大規模な言語資源(コーパス)はとても貴重なデータです.特に,ウェブコーパスは規模や多様性の面で魅力的であり,いろいろな研究で利用されています.しかし,現状では共有資源として利用できるウェブコーパスがなく,各組織・研究者が個別にウェブコーパスを作成・管理しているため,研究成果を単純に比較できないという問題があります.また,ウェブページの収集方法や排除ルールなど,詳細が明らかにされていないことも問題だと思います.

そこで,共有資源として利用可能なウェブコーパスの作成を目的として,ウェブページを収集しています.現在,進捗は 25% くらいで,ウェブコーパスの規模は 3000 万ページを超える程度です.完成までには,後 2 ヶ月近くかかる予定です.

以下,ウェブコーパスの作成方法と内容,現状での課題について説明しています.

ウェブコーパスの作成方法

ウェブコーパスの作成には,Yahoo! 検索 Web APIhttp://developer.yahoo.co.jp/webapi/search/websearch/v1/websearch.html)と ipadic-2.7.0(IPAdic legacy プロジェクト日本語トップページ - OSDN)を利用しています.

作成方法はとても単純で,ipadic-2.7.0 の見出し語をクエリとして,Yahoo! 検索 Web API により検索結果を取得し,得られた URL にアクセスするだけです.

  • Yahoo! 検索 Web API の使い方
    • 検索結果の上位 1000 件を取得しています.
    • format(検索するファイルの種類)には html を指定しています.
  • ウェブページの取得方法
    • Python の urllib.FancyURLopener を使用しています.
    • User-Agent は "Mozilla/4.0 (compatible; WebCorpusBuilder)" です.
    • タイムアウトまでの時間は 30 秒にしています.
    • 10,000,000 bytes を超えるウェブページは取得しません.
    • フレームのリンク先は取得しません.

ウェブコーパスの内容

ウェブコーパスでは,1 つのファイルに複数のウェブページを保存し,xz で圧縮することによりサイズを抑えています.各ファイルのサイズは,圧縮前のサイズが 2GB を超えないようにしています.各ウェブページについては,URL,HTTP ステータスコード,HTTP ヘッダ,HTML 文書を以下のフォーマットで保存しています.

http://www.example.com/(URL)
200(HTTP ステータスコード)
119(HTTP ヘッダのサイズ)
Transfer-Encoding: chunked
 ...
2304(HTML 文書のサイズ)
<html>
 ...

進捗状況から予想すると,ウェブコーパスの最終的な規模は,1 億ページ程度(※)になりそうです.(ブロック単位あるいはコーパス全体で)URL 順に整列してから xz で圧縮することにより,500GB 以下に収まると思います.

※ 後半では重複 URL の割合が高くなることや,あまり使わなさそうな見出し語が多いことから,もっと少なくなるかもしれません.

ウェブコーパスの共有に関する課題

ウェブページの収集は順調に進んでいますが,ウェブコーパスの共有について,何を共有するのか,どうやって共有するのかという 2 点を決める必要があります.

共有資源の内容

言語処理への応用を考えると,ウェブコーパスの内容として説明したファイル(未加工の HTML 文書)以外に何を共有するのかが重要になります.理由は,大量の HTML 文書を処理するのがとても面倒だからです.それなりに大規模なコーパスに慣れている人でも,1TB を超える HTML 文書の山を渡されれば難儀することでしょう.慣れていない人であれば,途方に暮れそうです.

単純に,処理に時間がかかることも問題です.例えば,100 件の HTML 文書を 1 秒で処理する場合,1 億件の HTML 文書を処理するのに 12 日間かかります.途中で間違いに気づいてやり直すことになるかもしれません.うんざりです.

というわけで,文字コードの統一やテキスト・コンテンツの抽出などを施した結果や,形態素解析係り受け解析の結果なども欲しいところです.さらに,TF・IDF や N-gram 頻度などの統計情報もあると便利だろうと思います.それぞれの詳細については,このブログで確認を取りながら進めるつもりです.とはいえ,費用の問題があるので,アレもコレもというのは無理っぽいです.

後,一人で思いつくことやできることには限界があるので,アイデアのある人には参加してもらいたいと考えています.

共有の方法

ウェブコーパスはサイズが大きいので,共有の方法が重要になります.ウェブコーパスのサイズは 100GB を軽く超えることから,インターネットを介した配布は無茶ですし,CD/DVD/Blu-ray などの媒体もネタにしかなりません.現実的な媒体は HDD しかないと思います.

そんな風に考えていた時期がありました.

現在は,Amazon EC2Amazon EC2)上での共有を考えています.具体的には,Amazon EBS(Amazon Elastic Block Store (EBS) - Amazon Web Services)のスナップショットを共有する機能を使うことを考えています.Amazon Web ServicesAmazon Web Services (AWS) - Cloud Computing Services)のアカウントがないと使えないとか,ウェブコーパスをローカルで使えない(※)という欠点はありますが,Account Number によるアクセス制御が可能で,ウェブコーパスを更新・修正できるという利点もあります.Amazon のボロ儲けっぽいところは少し癪ですが,HDD をやり取りする煩わしさと比べればマシだろうと思います.

Amazon S3Cloud Object Storage | Store & Retrieve Data Anywhere | Amazon Simple Storage Service)に移動してから Amazon Import/Export(Data Migration | AWS Snowball - 郵送した HDD にファイルを格納・返送してもらうサービス)で取得するという手間をかければ,ローカルで使うこともできます.

サイズの小さい統計情報については,ウェブ上で公開するつもりです.

おわりに

ウェブページの収集・整理が完了するまでに 2 ヶ月くらいはかかるので,いろいろと考えたり試したりという段階です.