Basic Summarization Modelで文書要約 Python

Introduction

必要に迫られて文書要約をやることになりました.
自然言語処理には1年携わっていましたが素人同然です,どうしましょう.
とりあえず文書要約とGoogleで調べて,
「へぇDocument Summarizationっていうんだ」ということを知りました.
まぁ当然次はツールを探すわけですが,うーんいいのないなあ.
でも論文はあるはずだ,ということでNIPSへ.ああ,お門違いだった.
ということでACL Anthologyを除きにいきました.
そこで見つけたのがMulti-document Summarizationという言葉.
N個の文書をまとめて一つの要約を作る,のがMultiだそうです.
ああ,僕は違うや,
ということで僕が探しているのは普通のDocument Summarizationの論文なんだということを知りました.
そして見つけました,良さそうな論文.今日はツイている予感.

よく使われるのは文の位置らしい.でもここでは単語の位置を使うんです!とおっしゃっていました.
機械学習の論文は全く頭が付いて行かないので,久しぶりに言っていることが割とわかる内容で,僕はうれしかったです.

Basic Summarization Model (Theory)

この論文の3章にBasic Summarization Modelというのが紹介されていました.ここからが本題です.前置き,長いですね.とりあえず初心者だからこの基礎っぽいものを習得しようと思い読んだら割とストレートな感じでした.素晴らしい.理論はこんな感じです.画像2枚.

Implement

さてここからコードを書いてみました.
いつもクラスを定義しようか迷うのですが,だいたい関数で事足りるんですよね.
僕みたいな小規模なことしかやらない場合はクラスをめったにかかない.
コードはこんな感じです.summarizeというのがそれです.

特にめぼしいことはしていません.あ,僕は日本人なのでとりあえず日本語を対象にしています.
まず文書を文に区切ります.MeCabを使ってますが,単に”.”が来たら区切るというだけのことをしています.
次にfreqを算出するためにfreqdictというのを作ってます.おなじみの処理ですね.
ちなみにnltk.FreqDistという素晴らしいものがあるのですが,
なぜか処理が重かったので自分で書きました.
次にscoreですね.そのままです.
そしてここ,文をscoreでランキングして上位からとっていくところ.ここかっこよくないですか?
あるリストをソートしてそのインデックスを得るにはどうしたら良いか調べたらここにクールなコードが.

というわけでそれを使っています.今回は降順なのでreverse=True.
あとは普通です.そんな感じです.眠いですね.

Experiment

実験してみました.いやあ,実験は楽しい.
ターゲットは僕の大好きなサイト,Lifehacker.jp様の記事です.

これを要約してみます.ちなみにタイトルは要約対象から外してます.
ちなみに生だとこんな感じです.

真に「使える」手書きメモアプリだと思わせてくれた『DioNote』
====================================================================================================
Android:手書きメモアプリが使えないのは過去の話になったかも。
「手書きメモアプリ」と聞くだけで、筆者は敬遠するところがありました。
今までいくつかのアプリを試してきて、うまく文字が書けたり、正しく反映されたためしがなかったのです。
大人しくキーボードから入力するメモが一番だ、と。
ですが、今回紹介する『DioNote』は、手書き反映の機敏さといい、認識力の高さといい、
かなりの実力を持っていて、久々に「いいね!」と言いたくなるアプリでした。
加えて、画像の挿入や文字入力、メモのショートカットをホームに置けるなど、
細かな機能も実装されており、あらゆる点からなかなか使える仕上がりとなっています。
早速、トップ画面右上のプラスマークからメモを作ってみます。
ノートのようなデザインです。画面下部の領域に文字を手書きで入力していきます。
一文字書いてみると、反応の正確さにビックリします。
すぐさま一文字書いたことが認識され、新たな文字、さらに新たな文字...と、そのテンポの良さも素晴らしい。
ちなみに、一文字ずつだけでなく、横に連続で書いていくことも可能です。
画面右上のメニューから「キャンパス作成」をタップすると、真っさらな自由帳のような画面になります。
ここでは画像の貼り付けも自由にでき、より気ままなメモを作成できます。

Result

Basic Summarization Modelによる実験結果は以下のようになりました.
タイトルと一緒に出せばいい感じじゃないですか?

真に「使える」手書きメモアプリだと思わせてくれた『DioNote』
====================================================================================================
大人しくキーボードから入力するメモが一番だ、と。
ノートのようなデザインです。
画面下部の領域に文字を手書きで入力していきます。
一文字書いてみると、反応の正確さにビックリします。
すぐさま一文字書いたことが認識され、新たな文字、さらに新たな文字...と、そのテンポの良さも素晴らしい。

Summary

Basic Summarization Modelで僕の文書要約の旅を出発することができた.
基礎的ながらなかなかの威力が証明された.
引き続き上の論文を読み,理解を深めたいと思う.

Basic Summarization Modelで文書要約 Python」への5件のフィードバック

  1. […] 前回,BasicSummarizationModelで文書要約(Python) というのをやりました. 簡単に言うと,これは文をスコア付けして,スコアの高いものから要約として採用するというものでした. このモデルでは,各文は, 最初の文は最も重要であり,終わりに近づくにつれて文の重要度は減少していく , というsentence position hypothesisに基づいてスコア付けされる. […]

  2. はじめまして。Pythonでの文章要約方法について調べていたところ、この記事に辿り着きました。

    githubのリンクが存在していないようですが、もし宜しければBasic Summarization Modelで書かれたコードを参考にさせていただけませんでしょうか?

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中