見出し画像

Wikipediaの日本語コーパスの準備

Wikipediaの日本語コーパスを準備する方法をまとめました。

1. Wikipediaダンプファイルの取得

はじめに、https://dumps.wikimedia.org/jawiki/latest/ から、Wikipediaの日本語のダンプファイル「jawiki-latest-pages-articles.xml.bz2」をダウンロードおよび解凍します。

・解凍前 : jawiki-latest-pages-articles.xml.bz2 (3.2GB)
・解凍後 : jawiki-latest-pages-articles.xml : (13.47GB)

2. Wikipediaの日本語コーパスの作成

WikipediaのダンプファイルはXML形式なので、記事を抽出するツール
WikiExtractor」を使って、XMLタグを削除します。

(1) AnacondaでPythonの仮想環境を作成。

$ conda create -n wiki python=3.7
$ conda activate wiki

(2) WikiExtractorのインストールと実行。

$ pip install wikiextractor
$ python -m wikiextractor.WikiExtractor jawiki-latest-pages-articles.xml

textフォルダに「AA, AB, ...」フォルダが生成され、その下にテキストファイル「wiki_00〜wiki_99」が生成されます。

画像1

(3) 以下のコマンドで、テキストファイルを wiki.txt にまとめる。

$ find text/ | grep wiki | awk '{system("cat "$0" >> wiki.txt")}'

wiki.txt のサイズは3.16GBになります。

(4) 以下のコマンドで、先頭100行を確認。

$ head -n100 wiki.txt
    :
<doc id="2910512" url="https://ja.wikipedia.org/wiki?curid=2910512" title="艦隊これくしょん -艦これ-">
艦隊これくしょん -艦これ-

『艦隊これくしょん -艦これ-』(かんたいこれくしょん かんこれ)は、角川ゲームス(2015年頃まで)、「艦これ」運営鎮守府こと株式会社C2プレパラートが開発しDMM.comがブラウザゲームとして配信している日本の育成シミュレーションゲームおよび、そのメディアミックス作品群。
    :
</doc>
    :

余分なdocタグ空行があることがわかります。

(5) 以下のコマンドで、docタグ空行を削除。

$ sed -i '' '/^<[^>]*>$/d' wiki.txt
$ sed -i '' '/^$/d' wiki.txt 

(6) 以下のコマンドで、先頭100行を確認。

$ head -n100 wiki.txt
    :
艦隊これくしょん -艦これ-
『艦隊これくしょん -艦これ-』(かんたいこれくしょん かんこれ)は、角川ゲームス(2015年頃まで)、「艦これ」運営鎮守府こと株式会社C2プレパラートが開発しDMM.comがブラウザゲームとして配信している日本の育成シミュレーションゲームおよび、そのメディアミックス作品群。
    :

docタグ空行が削除されていることがわかります。

(7) 以下のコマンドで、行数文字数を確認。

$ wc -ml wiki.txt
 10168829 1085935564 wiki.txt

1016万行 で 10億文字 あることがわかります。サイズは 3.1GB です。

3. Wikipediaの日本語コーパスの利用

SentencePieceの学習を行います。「Google Colab」はRAMが足りなかったので、ローカルマシンのAnacondaで学習しました。

(1) SentencePieceのインストール。

$ pip install sentencepiece

(2) train.pyを実行して学習。
「MacBook Pro」で2時間ほどかかりました。

# train.py
import sentencepiece as spm

# 学習
spm.SentencePieceTrainer.Train(
    '--input=wiki.txt, --model_prefix=sentencepiece --character_coverage=1.0 --vocab_size=32000')
$ python train.py

(3) predict.pyを実行して予測。

import sentencepiece as spm

# モデルの作成
sp = spm.SentencePieceProcessor()
sp.Load("sentencepiece.model")

# テキストを語彙列に分割
text = '中島敦(なかじまあつし、1909年(明治42年)5月5日-1942年(昭和17年)12月4日)は、日本の小説家。代表作は『山月記』『光と風と夢』『弟子』『李陵』など。第一高等学校、東京帝国大学を卒業後、横浜高等女学校の教員勤務のかたわら小説執筆を続け、パラオ南洋庁の官吏(教科書編修書記)を経て専業作家になるも、同年中に持病の喘息悪化のため33歳で病没。死後に出版された全集は毎日出版文化賞を受賞した。'
print(text)
print(sp.EncodeAsPieces(text))
['▁', '中島', '敦', '(', 'なか', 'じま', 'あつ', 'し', '、', '1909', '年', '(', '明治', '42', '年', ')5', '月', '5', '日', '-', '1942', '年', '(', '昭和', '17', '年', ')12', '月', '4', '日', ')', 'は', '、', '日本の', '小説家', '。', '代表作', 'は', '『', '山', '月', '記', '』『', '光', 'と', '風', 'と', '夢', '』『', '弟子', '』『', '李', '陵', '』', 'など', '。', '第一', '高等学校', '、', '東京帝国大学', 'を卒業後', '、', '横浜', '高等', '女', '学校の', '教員', '勤務', 'の', 'かた', 'わら', '小説', '執筆', 'を続け', '、', 'パラ', 'オ', '南', '洋', '庁', 'の', '官', '吏', '(', '教科書', '編', '修', '書記', ')', 'を経て', '専', '業', '作家', 'になる', 'も', '、', '同年', '中に', '持', '病', 'の', '喘', '息', '悪化', 'のため', '33', '歳で', '病', '没', '。', '死後', 'に', '出版された', '全集', 'は', '毎日', '出版', '文化', '賞を受賞した', '。']

【おまけ】 BCCWJ

日本語の大規模なコーパスとしては、Wikipedia以外に「BCCWJ」があります。ただし、利用許諾料が必要です。


この記事が気に入ったらサポートをしてみませんか?