Open1

日本語wikipediaコーパスを用いたbertの事前学習

schnellschnell

wikiデータのダウンロード

wget https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2
bzip2 -d jawiki-latest-pages-articles.xml.bz2

wikiデータの処理

pip install wikiextractor
python -m wikiextractor.WikiExtractor --processes `nproc` jawiki-latest-pages-articles.xml
find text/ | grep wiki | awk '{system("cat "$0" >> wiki.txt")}'

# mac
sed -i '' '/^<[^>]*>$/d' wiki.txt
# Linux
sed -ie 's/<[^>]*>//g' wiki.txt

mecab with neologdを用いる前の正規化およびクリーニング処理

import argparse
import re
from pathlib import Path
import unicodedata

from tqdm import tqdm
import neologdn


def parse_args():
    parser = argparse.ArgumentParser()
    parser.add_argument("-i", "--input")
    parser.add_argument("-o", "--output")
    args = parser.parse_args()
    return args

def main():
    args = parse_args()
    input = Path(args.input)
    output = Path(args.output)
    basic = re.compile(r"[\u00a1-\u301f]")
    hangle = re.compile(r"[\uac00-\ud7ff]")
   
    with input.open() as fin, output.open("w") as fout:
        for line in tqdm(fin, total=24863065):
            line = neologdn.normalize(line)
            line = unicodedata.normalize("NFKC", line)
            # 不要そうな記号を除去(要検証)
            line = basic.sub("", line)
            # ハングルを削除
            line = hangle.sub("", line)
            # 短い行は除去
            if len(line) < 50:
                continue
            fout.write(line)

# python clean_wiki.py -i wiki.txt -o out.txt
if __name__ == "__main__":
    main()

mecabによる分かち書き

cat out.txt | parallel --blocksize 5061291 -L 10000 --pipe mecab -d /home/share/lib/mecab/dic/mecab-ipadic-neologd -Owakati > wiki_tmp.txt
cat wiki_tmp.txt | parallel --pipe --L 10000 --blocksize 6579680 iconv > wiki_mecab.txt
rm -rf wiki_tmp.txt

mecab -F"%Mア" -E"\n" -b 100000 < wiki_norm.txt  > wiki.txt.tok