UniDic ユーザー向け辞書生成

注意:この作業は数時間から数日かかる可能性があります。

ベースになる NEologd 辞書の準備

NEologd 辞書ファイルをダウンロード

まず、以下のようなコマンドで NEologd の辞書をダウンロードしてください。

WORKDIR=/path/to/your/work/dir
cd $WORKDIR # move to the working directory
git clone --depth 1 https://github.com/neologd/mecab-unidic-neologd/

NEologd 辞書ファイルの抽出と、パッチによる微修正

次に unxz コマンドで、NEologd の単語リスト(CSVファイル)を抽出します。

# if your system has the unxz command
unxz -k `ls mecab-unidic-neologd/seed/*.xz | tail -n 1`
# otherwise
docker run --rm -v $(pwd):/root/workspace tdmelodic:latest \
    unxz -k `ls mecab-unidic-neologd/seed/*.xz | tail -n 1`

これにより、mecab-unidic-user-dict-seed.yyyymmdd.csv といったファイル名の CSV ファイルが生成されます。次に、ここで抽出した CSV ファイルにパッチを当てます。これにより作業ディレクトリ配下に neologd_modified.csv というファイルが作られます。

docker run --rm -v $(pwd):/root/workspace tdmelodic:latest \
    tdmelodic-neologd-preprocess \
    --input `ls mecab-unidic-neologd/seed/mecab-unidic-user-dict-seed*.csv | tail -n 1` \
    --output neologd_modified.csv \
    --no-rmdups --no-rm_wrong_yomi

--no-rmdups, --no-rm_wrong_yomi などのオプションは、あるカテゴリーに属する単語を辞書から除去するかどうかを指定するためのものです。これらのオプションは以下のコマンドにより確認できます。

docker run --rm tdmelodic:latest tdmelodic-neologd-preprocess -h

推論

注意: この処理はかなりの時間がかかります! (参考までに、筆者の MacBookPro では2時間半、Linux サーバーでは5時間かかりました。)

では、アクセント辞書を生成しましょう。ここでは、NEologd の辞書ファイルに掲載されている全ての単語について、機械学習ベースの手法により、アクセント情報を推定します。以下のコマンドにより、各単語にアクセント情報を付与した新しい辞書が生成されます。

docker run --rm -v $(pwd):/root/workspace tdmelodic:latest \
    tdmelodic-convert \
    -m unidic \
    --input neologd_modified.csv \
    --output ${WORKDIR}/tdmelodic_original.csv
cp ${WORKDIR}/tdmelodic_original.csv ${WORKDIR}/tdmelodic.csv # backup

後処理

以下のスクリプトにより、単語生起確率(条件付確率場におけるユニグラム・コスト)の微修正などの後処理を行います。

cp ${WORKDIR}/tdmelodic.csv ${WORKDIR}/tdmelodic.csv.bak
docker run --rm -v $(pwd):/root/workspace tdmelodic:latest \
    tdmelodic-modify-unigram-cost \
    -i tdmelodic.csv.bak \
    -o tdmelodic.csv