質問応答システムの実装と考察:構想からデータの用意まで
趣味で質問応答システムを作っています。
構想から構築までの道筋を書いておくことで、今後なにかの役に立つかもしれないと思うため、履歴として残しておきます。
構想
まずは一問一答で単語を回答する、ファクトイド質問形式で正答率を上げることを目標とします。
それの進捗具合に依りますが、ノンファクトイドや対話といったシステムに拡張していければと思います。
環境
主に次の環境で作業を行っています。
- CentOS7
- 2.5 GHz 4 Core CPU
- 4 GB Memory
- 400 GB Storage
言語
当面は日本語で行こうと思っています。英語にも拡張できたらしたいので、一部の共通化を意識しながら実装していきます。
コーパス
Wikipedia:データベースダウンロード - Wikipedia
定期的に記事のデータがバックアップとしてxmlファイルに保存されています。
wget ダンプファイルのURL
私は現在2019-06-01のデータを使っています。
データの前処理
XMLファイルの分割
展開したXMLファイルはファイルサイズが大きいため、いくつかのXMLファイルに分割しました。
238ファイルできたので、237~238万記事くらいあるということになります。
DBへの保存
全データをメモリに蓄えられないことから、DBへの保存をするようにしました。キーを付けておけばタイトルで検索をすることもできます。
文字コード関連でテーブルに付けた情報は defalut charset utf8 collate utf8_bin で、utf8外の文字はロード前に排除しました。
本文の存在する記事と、リダイレクションのタイトルが混在しているため、それは別々のテーブルに保存しています。
次にやること
DBに保存した記事は、Wikipediaの記法に従って書かれているため、平文を抽出する必要があります。