まとまっていないタイトルで申し訳ございません。同じことをしようとしている方の助けになれば幸いです。基本的に以下の記事をつぎはぎさせていただいております。個人のメモ程度という認識で見てもらえればと思います。
(参考記事)
- 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$
としたときに以下の式で定義されます。
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