2
0

More than 3 years have passed since last update.

Ubuntu18.04に mecab+mecab-ipadic-NEeologd をインストールし、pythonスクリプトでWERを算出するまで

Last updated at Posted at 2021-02-04

 まとまっていないタイトルで申し訳ございません。同じことをしようとしている方の助けになれば幸いです。基本的に以下の記事をつぎはぎさせていただいております。個人のメモ程度という認識で見てもらえればと思います。

(参考記事)
- Ubuntu 18.04 LTSのPythonでMeCabを動かす方法
- ubuntu 18.10 に mecab をインストール
- Custom Speech の精度の評価と向上

MeCab & mecab-ipadic-NEeologd のインストール

まずはMeCab本体のインストールです。pipをインストールしている前提です。

$ sudo apt-get install mecab mecab-ipadic-utf8 libmecab-dev swig
$ pip install mecab-python3

この時点で以下を試してみます。

$ mecab
新世紀エヴァンゲリオン
新      接頭詞,名詞接続,*,*,*,*,新,シン,シン
世紀    名詞,一般,*,*,*,*,世紀,セイキ,セイキ
エヴァンゲリオン        名詞,一般,*,*,*,*,*
EOS

次に辞書としてmecab-ipadic-NEeologdをインストールします。

$ git clone https://github.com/neologd/mecab-ipadic-neologd.git
$ cd mecab-ipadic-neologd
$ sudo bin/install-mecab-ipadic-neologdv

辞書の使用方法は以下の二つのうちどれか好きな方を

方法1
MeCabの引数に該当辞書のパスを与えます。自分の環境では以下のパスでした。

# 通常の辞書を使用する場合
$ mecab -d /var/lib/mecab/dic/debian

# インストールした辞書を使用
$ mecab -d /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd

方法2
mecabrcを編集する。こうする事で、デフォルトの辞書が変更されます。
dicdir = /var/lib/mecab/dic/debianとなっている部分をdicdir = /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologdに変更します。

新しい辞書で先ほどのワードを調べてみると、確かに固有名詞として『新世紀エヴァンゲリオン』が登録されていることが確認できます。

$ mecab
新世紀エヴァンゲリオン
新世紀エヴァンゲリオン  名詞,固有名詞,一般,*,*,*,新世紀エヴァンゲリオン,シンセイキエヴァンゲリオン,シンセイキエヴァンゲリオン
EOS

pythonでmecabを使う

いざpythonでmecabを使おうとすると、RuntimeErrorが発生、エラーメッセージを確認してみると

error message: [ifs] no such file or directory: /usr/local/etc/mecabrc

とのこと、自分がインストールするとデフォルトで/etc/mecabrcにインストールされていたので、ここにパスを通すことで解消されました。

$ echo "export MECABRC='/etc/mecabrc'" >> ~/.bashrc
$ source .bashrc

WERの算出

WER(文字誤り率)はSST(Speach to Text)、いわゆる音声認識の分野で使われる評価指標です。発話をどれだけ正確に文字起こしできているか評価します。(図はCustom Speech の精度の評価と向上より抜粋)

実際に発話された単語総数:$N$
本当は発話されていないのに誤って挿入された単語数:$I$
発話されたのにテキスト化されなかった単語数:$D$
置き換えられた単語数:$S$

スクリーンショット 2021-02-04 150422.png

としたときに以下の式で定義されます。

WER = \frac{I + D + S}{N}

算出法1

GitHubリンク に、日本語対応したWER計算スクリプトがあるのでこちらを使用すると簡単に計算できます。(使用するにはmecab-python3以外にnumpyも必要)

$ git clone git@github.com:kchan7/WER-CER.git
$ cd WER-CER
$ python wer.py original_file.txt target_file.txt

結果

REF: 吾輩は猫である
HYP: 吾輩は猫である
EVA:
WER: 0.00%
REF: 名前 は まだ 無い
HYP: 名前 は まだ ない
EVA:         S
WER: 25.00%
REF: どこ で 生れ  た かとん と 見当 が つか ぬ
HYP: どこ で 生まれ た かとん と 見当 が つか ぬ
EVA:      S
WER: 10.00%
REF: 何 でも 薄暗い じめじめ した 所     で ニャーニャー 泣い て いた事 だけ は 記憶 し て いる
HYP: 何 でも 薄暗い じめじめ し  た ところ で ニヤニヤ   泣い て いた事 だけ は 記憶 し て いる
EVA:               S  S I     S
WER: 23.53%
REF: 吾輩 は ここ で 始め て   人間 という もの を 見 た
HYP: 吾輩 は ここ で    初めて 人間 という もの を 見 た
EVA:           D  S
WER: 16.67%
REF: しかも あと で  聞く と それ は 書生 という 人間   中 で 一番 獰悪 な 種族 で あっ た そうだ
HYP: しかも    後で 聞く と それ は 小生 という 人間 の 中 で 一番 当惑 な 種族 で あっ た そうだ
EVA:     D  S            S         I        S
WER: 25.00%

算出法2

jiwerライブラリを使用します。

$ pip install jiwer

# 以下はPythonスクリプト
from jiwer import wer

ground_truth = "hello world"
hypothesis = "hello duck"

error = wer(ground_truth, hypothesis)
print(error)   # -> 0.5
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0