リクルートテクノロジーズが公開している文章要約ツールsummpyを試してみました。
summpy
https://github.com/recruit-tech/summpy
環境はUbuntu16.4です。
動作にはPython 2.7が必要。デフォルトでは入ってないのでanacondaで2.7の環境を整備します。
$ conda create -n 2.7 python=2.7 anaconda
ちゃんとインストールできたか確認
$ source activate 2.7
(2.7)$
(2.7)$ conda info -e
# conda environments:
#
base /home/croso/anaconda3
2.7 * /home/croso/anaconda3/envs/2.7
3.5 /home/croso/anaconda3/envs/3.5
3.6 /home/croso/anaconda3/envs/3.6
形態素解析にMeCabまたはjanomeが必要ということでMecab-pythonをインストール
(2.7)$ pip install mecab-python
続いてpipでsummpyをインストールします
(2.7)$ pip install summpy
サンプルスクリプトを作成
# -*- coding: utf-8 -*-
from summpy.lexrank import summarize
text=u'''
総務省が1日発表した9月の完全失業率(季節調整値)は2.4%となり、前月から0.2ポイント悪化した。
ロイターの調査では2.3%が予想されていた。
完全失業率は2018年1月以降、2.5%以下の水準で推移している。
総務省は「失業率は上昇したが、水準としては約26年ぶりの低い水準で推移しており、雇用情勢は着実に改善している」(幹部)と総括した。
就業者数(季節調整値)は6730万人と前月に比べ5万人減少。
完全失業者数(同)は167万人と前月から13万人増加した。
完全失業者数の増加は6カ月ぶり。
内訳をみると、非自発的な離職は前月と同数だったが、自発的な離職(自己都合)は同1万人増、新たな求職は同9万人増となっており、総務省は「新たに働きたいという人が増えている」とみている。
原数値では、就業者数は前年同月比53万人増の6768万人だった。
81カ月連続で増加し、比較可能な1953年以降過去最多となった。
15―64歳の就業率は77.9%と過去最高タイ。
厚生労働省が発表した9月の有効求人倍率(季節調整値)は1.57倍で、前月から低下した。
ロイターの調査では1.59倍が見込まれていた。
'''
sentences, debug_info = summarize(
text, sent_limit=2
)
for sent in sentences:
print sent.strip().encode('utf-8')
ニュースサイトから適当に抜粋した記事を解析してみます。
sent_limitは結果を何行にまとめるか?
みたいです。
ここまではsummpyのREADME.mdをそのままなぞった形です。
動作させるとエラーとなりました。
"error": "add_edge() takes exactly 3 arguments (4 given)"
調べてみるとnetworkxとやらのバージョン不一致とのこと。
https://teratail.com/questions/114565
バージョンを合わせることにします。
(2.7)$ pip install multiqc==1.2
(2.7)$ pip install networkx==1.11
初めにmultiqcをインストール
してください。multiqcをインストールすると自動でnetworkxも2.2をインストールしちゃうので、その上からnetworkxの1.11を上書きしてあげないと上手く環境を再現できません。
出来上がった文章が以下です
就業者数(季節調整値)は6730万人と前月に比べ5万人減少。
完全失業者数(同)は167万人と前月から13万人増加した。
どんなもんでしょうか。就業者数は減少、失業者数は増加、ということで日本の景気が冷え込みましたと要約文から読み取れます。ただ「前月から0.2ポイント悪化した」という主題ともいえる文章を見逃している気もします。
あと勘違いしていたのですが「文章の要約」はしてくれないみたいです。文章のなかから重要な行だけを抽出するツール
というのが正しいみたい。
ちなみにmecabはインストールしてそのまま利用している人はほとんどいないと思います。辞書を追加しないと使い物になりません。というわけで、以下をインストール。
最新ワード対応しているmecab辞書です。インストール後に以下に辞書情報が入っているはず。
(2.7)$ ls /usr/local/lib/mecab/dic/mecab-ipadic-neologd
char.bin dicrc left-id.def matrix.bin pos-id.def rewrite.def right-id.def sys.dic unk.dic
辞書を自動で読んでほしいのですが、summpyにはそんな機能ありませんでしたので、ソースの一部を書き換えて対応しました。(mecab-pythonのほうに手を入れるほうが正しいかも...)
(2.7)$ vi ~/anaconda3/envs/2.7/lib/python2.7/site-packages/summpy/misc/mecab_segmenter.py
8行目
_mecab = MeCab.Tagger()
を
_mecab = MeCab.Tagger('-d /usr/local/lib/mecab/dic/mecab-ipadic-neologd')
に差し替え。これで多少精度は良くなっているはず...
関係ない話になってしまいますが、機械学習には膨大な量の学習データが必要です。そのなかで文章要約というのは学習データを比較的集めやすい課題だと思いました。数多あるニュースサイトから正解データは記事タイトル、学習データを記事本文にすれば、いくらでもネットにサンプルが転がっているわけで、勉強にはよい題材かもしれないと思いました。