ITエンジニアのブログ

IT企業でエンジニアやってる人間の日常について

質問応答システムの実装と考察:構想からデータの用意まで

趣味で質問応答システムを作っています。

構想から構築までの道筋を書いておくことで、今後なにかの役に立つかもしれないと思うため、履歴として残しておきます。

構想

まずは一問一答で単語を回答する、ファクトイド質問形式で正答率を上げることを目標とします。

それの進捗具合に依りますが、ノンファクトイドや対話といったシステムに拡張していければと思います。

環境

主に次の環境で作業を行っています。

  • CentOS7
  • 2.5 GHz 4 Core CPU
  • 4 GB Memory
  • 400 GB Storage

リポジトリ

GitHubに上げています。

github.com

言語

当面は日本語で行こうと思っています。英語にも拡張できたらしたいので、一部の共通化を意識しながら実装していきます。

コーパス

入手しやすいコーパスとしてはWikipediaがあります。

Wikipedia:データベースダウンロード - Wikipedia

定期的に記事のデータがバックアップとしてxmlファイルに保存されています。

wget ダンプファイルのURL

私は現在2019-06-01のデータを使っています。

データの前処理

XMLファイルの分割

展開したXMLファイルはファイルサイズが大きいため、いくつかのXMLファイルに分割しました。
というタグとその閉じタグがあるので、それをカウントしながら、特定の個数(10000)になると、前後にというタグを付けて一つのファイルに保存するという操作を繰り返しました。

238ファイルできたので、237~238万記事くらいあるということになります。

DBへの保存

全データをメモリに蓄えられないことから、DBへの保存をするようにしました。キーを付けておけばタイトルで検索をすることもできます。

文字コード関連でテーブルに付けた情報は defalut charset utf8 collate utf8_bin で、utf8外の文字はロード前に排除しました。

本文の存在する記事と、リダイレクションのタイトルが混在しているため、それは別々のテーブルに保存しています。

その他

ディレクトリや環境変数名で使うための名前が必要だったのですが、Erica(エリカ)という花の名前を用いました。
初代ポケモンのジムリーダーやシャドウバースのリーダーでも好きなキャラなので。

次にやること

DBに保存した記事は、Wikipediaの記法に従って書かれているため、平文を抽出する必要があります。