SumEvalというPythonのテキスト評価用のライブラリを試すための環境構築です。
環境の構築はCentOS7系でPython3.6で実施しました。
SumEvalの詳しい説明は以下になります。
・ROUGEを訪ねて三千里:より良い要約の評価を求めて
https://qiita.com/icoxfog417/items/65faecbbe27d3c53d212
- ROUGE-Xスコアという様々なテキスト要約の評価が行えます。
- BLEUスコアという同じ値のスコアリング集計をした評価が行えます。
実際には係り受けなど文章としての要約をしたスコアリングなど評価が実施できるので様々な点で利用ができます。
sumEvalのインストール
sumEvalの利用にあたっては以下などが必要になります。
- Basic Elementの実装に必要な構文解析で英語圏はspaCyが必要
- Basic Elementの実装に必要な構文解析で日本語圏はCaboChaが必要
- CaboChaのインストールにMecabやCRF++が必要
- 日本語の解析ではjanomeかMecabが必要
- テストにpythonrougeとrougescoreが必要
今回は全部入れてみました。
spaCyのインストール
・公式サイト
https://githubja.com/explosion/spacy
インストールは以下で実施します。
1 2 3 4 |
# pip install spacy # python -m spacy download en |
Janomeのインストール
・公式サイト
https://github.com/mocobeta/janome
インストールは以下で実施します。
1 2 3 |
# pip install janome |
pythonrougeのインストール
・公式サイト
https://github.com/tagucci/pythonrouge
インストールは以下で実施します。
1 2 3 |
# pip install git+https://github.com/tagucci/pythonrouge.git |
rougescoreeのインストール
・公式サイト
https://github.com/bdusell/rougescore
インストールは以下で実施します。
1 2 3 |
# pip install git+git://github.com/bdusell/rougescore.git |
sumEvalのインストール
・公式サイト
https://github.com/chakki-works/sumeval
インストールは以下で実施します。
1 2 3 |
# pip install sumeval |
ここまででsumEval自体のインストールは完了で、ROUGE-BEの日本語の評価以外は実施できます。
ただ、以下では折角なのでROUGE-BEの日本語の評価に必要なCaboChaのインストールを行います。
CaboChaのインストール
インストールにあたっては以下のサイトを参考にしました。
・Python3で形態素解析エンジンMeCabを使えるようにする(2016年3月版)
https://qiita.com/osyou-create/items/c7864a5200238d8678aa
・python3からcabochaを使ってみる
https://qiita.com/osyou-create/items/4e2f686d82bf9e1166e8
Groongaリポジトリを導入
1 2 3 4 |
# rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm # yum -y makecache |
Mecab本体+その他諸々のインストール
1 2 3 4 5 |
# yum -y install mecab mecab-ipadic # yum -y install mecab-devel # pip install mecab-python3 |
CRF++のインストール
1 2 3 4 5 6 7 8 9 |
# cd /tmp # wget "https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7QVR6VXJ5dWExSTQ" -O CRF++-0.58.tar.gz # tar zxfv CRF++-0.58.tar.gz # cd CRF++-0.58 # ./configure # make # make install |
CaboChaのインストール
こちらから最新版を取得して「/tmp」に保存します。
https://drive.google.com/drive/folders/0B4y35FiV1wh7cGRCUUJHVTNJRnM
1 2 3 4 5 6 7 8 9 10 |
# cd /tmp # tar xvf cabocha-0.69.tar.bz2 # cd cabocha-0.69 # ./configure --with-mecab-config=`which mecab-config` --with-charset=UTF8 # make # make check # make install # cabocha --version |
CaboChaのPythonライブラリのインストール
1 2 3 4 5 |
# cd /tmp/cabocha-0.69/python/ # python setup.py build_ext # python setup.py install |
1 2 3 4 5 6 7 8 |
# vi /etc/ld.so.conf -------------------- 以下を追加 /usr/local/lib ------------------- # ldconfig |
こちらでインストールは完了です。
それでは評価してみます。
SumEvalでの日本語の評価
まず、BLEUでのテストを行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
from sumeval.metrics.bleu import BLEUCalculator bleu_ja = BLEUCalculator(lang="ja") score_ja1 = bleu_ja.bleu("私はビーチで待ってる", "彼がベンチで待ってる") score_ja2 = bleu_ja.bleu("今日の天気は晴れ", "今日の天気は雨") score_ja3 = bleu_ja.bleu("今日の天気は晴れ", "今日の天気は晴れのち曇り") score_ja4 = bleu_ja.bleu("今日の天気は晴れ", "今日も一日元気") score_ja5 = bleu_ja.bleu("今日の天気は晴れ", "彼がベンチで待ってる") score_ja6 = bleu_ja.bleu("今日は天気が晴れ", "今日から俺は") print(score_ja1) print(score_ja2) print(score_ja3) print(score_ja4) print(score_ja5) print(score_ja6) |
以下が結果です。
1 2 3 4 5 6 7 8 9 |
# python test1.py 9.193227152249184 0.2295748846661433 0.16449759298465816 0.2295748846661433 0.19433094436376075 0.2295748846661433 |
正直、ちょっとわかりにくいかなという印象でした。
「score_ja1」だけが飛び抜けてスコアが高くなってしまったので、少し難しいかなという印象です。
次にROUGEでの評価です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
from sumeval.metrics.rouge import RougeCalculator rouge = RougeCalculator(lang="ja") summary="私はビーチで待ってる" references="彼がベンチで待ってる" rouge_1 = rouge.rouge_n( summary=summary, references=references, n=1) rouge_2 = rouge.rouge_n( summary=summary, references=references, n=2) rouge_l = rouge.rouge_l( summary=summary, references=references) rouge_be = rouge.rouge_be( summary=summary, references=references) print("ROUGE-1: {}, ROUGE-2: {}, ROUGE-L: {}, ROUGE-BE: {}".format( rouge_1, rouge_2, rouge_l, rouge_be ).replace(", ", "\n")) |
以下が結果です。
1 2 3 4 5 6 7 |
# python test2.py ROUGE-1: 0.42857142857142855 ROUGE-2: 0.3333333333333333 ROUGE-L: 0.42857142857142855 ROUGE-BE: 0 |
こちらは少し差が出ました。
ただ、ROUGE-BEだと値が0になります。
少し条件を変えての評価です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
from sumeval.metrics.rouge import RougeCalculator rouge = RougeCalculator(lang="ja") summary="今日の天気は晴れのち曇り" references1="今日の天気は晴れ" references2=["今日の天気は晴れ","今日の天気は曇り"] rouge_1 = rouge.rouge_n( summary=summary, references=references1, n=1) rouge_2 = rouge.rouge_n( summary=summary, references=references2, n=2) rouge_l = rouge.rouge_l( summary=summary, references=references2) rouge_be = rouge.rouge_be( summary=summary, references=references2) print("ROUGE-1: {}, ROUGE-2: {}, ROUGE-L: {}, ROUGE-BE: {}".format( rouge_1, rouge_2, rouge_l, rouge_be ).replace(", ", "\n")) |
以下が結果です。
1 2 3 4 5 6 7 |
# python test3.py ROUGE-1: 0 ROUGE-2: 0 ROUGE-L: 0.07142857142857144 ROUGE-BE: 0.4 |
ROUGE-BEでの値はでましたが、ROUGE-Nが値が出ないようで。
評価ももう少し実施していくと値の精度が良いものが出るかもしれません。
このブログは株式会社CoLabMixによる技術ブログです。
GCP、AWSなどでのインフラ構築・運用や、クローリング・分析・検索などを主体とした開発を行なっています。
Ruby on RailsやDjango、Pythonなどの開発依頼などお気軽にお声がけください。
開発パートナーを増やしたいという企業と積極的に繋がっていきたいです。
お問い合わせやご依頼・ご相談など