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」が生成されます。
(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」があります。ただし、利用許諾料が必要です。
この記事が気に入ったらサポートをしてみませんか?