How to Install pyrouge

要約

pyrouge を入れるのに手間取ったのでメモ

pyrouge とは文書要約タスクで利用される評価指標である ROUGE を Python で計算するモジュールです.今回は Docker で環境構築しております.

最初に答えを述べておくと,以下の Dockerfile で pyrouge がインストールできます. ベースが pytorch/pytorch:0.4.1-cuda9-cudnn7-devel なのは私の都合です.

FROM pytorch/pytorch:0.4.1-cuda9-cudnn7-devel

RUN apt-get update && apt-get install -y libxml-parser-perl && apt-get clean
RUN git clone https://github.com/bheinzerling/pyrouge /opt/pyrouge && cd /opt/pyrouge && python setup.py install
RUN git clone https://github.com/andersjo/pyrouge.git /opt/rouge && pyrouge_set_rouge_path /opt/rouge/tools/ROUGE-1.5.5
RUN cd /opt/rouge/tools/ROUGE-1.5.5/data/ && rm WordNet-2.0.exc.db  && ./WordNet-2.0-Exceptions/buildExeptionDB.pl ./WordNet-2.0-Exceptions ./smart_common_words.txt ./WordNet-2.0.exc.db

解説

第一章:始まり

最初は pip install pyrouge しかしていませんでしたが,

FileNotFoundError: [Errno 2] No such file or directory: '/root/.pyrouge/settings.ini'

が出て怒られました.

instllation をよく読むと, pyrouge_set_rouge_path /absolute/path/to/ROUGE-1.5.5/directory とあります.ROUGE-1.5.5 てなんや?と思ってググると,どうやら これ のことで,pyrouge はその Python ラッパーのようです. ということで,

$ git clone https://github.com/andersjo/pyrouge.git /opt/rouge
$ pyrouge_set_rouge_path /opt/rouge/tools/ROUGE-1.5.5

しました. 結果はダメで,

FileNotFoundError: [Errno 2] No such file or directory: 'pyrouge_write_config_file.py': 'pyrouge_write_config_file.py'

と怒られました.

第二章:ソースからインストール

困りながらググっていると,この記事に出会いました.どうやらソースからインストールすればいいようです.pip で入れた pyrouge を消して,以下のようにしてみました.

$ git clone https://github.com/bheinzerling/pyrouge /opt/pyrouge
$ cd /opt/pyrouge
$ python setup.py install
$ pyrouge_set_rouge_path /opt/rouge/tools/ROUGE-1.5.5

結果はダメで,エラーをよく読むと

Can't locate XML/Parser.pm in @INC (you may need to install the XML::Parser module) (@INC contains: /opt/rouge/tools/ROUGE-1.5.5 /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.22.1 /usr/local/share/perl/5.22.1 /usr/lib/x86_64-linux-gnu/perl5/5.22 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.22 /usr/share/perl/5.22 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base .) at /opt/rouge/tools/ROUGE-1.5.5/XML/DOM.pm line 41.

とありました.どうやら perlXML::Parser モジュールがないようです.

第三章:xml パーサのインストール

XML::parser のインストールは ここ を参考にしました.

$ apt-get update
$ apt-get install -y libxml-parser-perl

結果はまたダメで,

Cannot open exception db file for reading: /opt/rouge/tools/ROUGE-1.5.5/data/WordNet-2.0.exc.db

と怒られました.

最終章:WordNet-2.0.exc.db 作り直し

この issue を参考に,もともとある WordNet-2.0.exc.db を消して作り直しました.

$ cd /opt/rouge/tools/ROUGE-1.5.5/data/
$ rm WordNet-2.0.exc.db
$ ./WordNet-2.0-Exceptions/buildExeptionDB.pl ./WordNet-2.0-Exceptions ./smart_common_words.txt ./WordNet-2.0.exc.db

結果,ようやく python -m pyrouge.test が通りました.長い戦いだった.

終わりに

エラーから何が問題かわかりにくいやつは特に解決するのに手間取りました. 今回はどうしても pyrouge を使いたかったので環境構築を頑張りましたが,ROUGE スコアは n-gram の Recall ベースのスコアで複雑な処理はなさげなので,自分で実装してしまってもいいかもしれないです.