Pythonによる自然言語処理技法をふんだんに使用した文書要約

python

わかりやすく端的に伝えることって、割と難しいですよね。
これってAI技術を使えませんか。
つまり、長文から意味を抜き出す要約を機械的な処理で実現できるのではないでしょうか?

このような要望にお応えします。

近年、AIは様々な分野で成果を出しています。
そのなかには、文書の要約も自然言語処理技術を用いて実現されています。

今回は、自然言語処理技術を用いた文書要約ツールを作成してみます。文書要約の手法は、様々な手法が提案されていますが、今回はLexRankを使用します。

LexRank: Graph-based Lexical Centrality as Salience in Text Summarization

  • https://arxiv.org/pdf/1109.2128.pdf

文書要約手法について整理します。

文書要約について

文書要約手法は抽出型と生成型に分けられます。

  • 抽出型要約・・・原文書の一部を抽出して要約を生成。文書内から代表的な文を抽出し、要約として抜き出す手法
  • 生成型要約・・・原文書の内容に基づき、新たな要約文を生成する方法

今回使用するLexRankは抽出型の手法になります。

ざっくり手法の説明をします。

文章をnode、文章間のedgeを類似度で表現した無向グラフを作成します。

各文章をTF-IDFを用いて特徴ベクトルとして表現し、コサイン類似度を用いて文章間(node間)の類似度を計算します。

類似度に基づいて、多くの文章nodeと類似度が高い場合、その文章は重要であると判断して、それを代表的な文章として要約として抜き出します。PageRank手法に類似する考え方ですね。

それでは、LexRankによる文書要約を行います。LexRank手法については、Pythonライブラリsumyで提供されているものを使用します。文書要約の入力は、日本語文書を対象としています。その他の言語で利用したい場合は、Pythonライブラリsumyのgithubページなどで情報が公開されていますので、興味のある方は参照ください。

  • https://github.com/miso-belica/sumy

sumyは、下記のコマンドでインストールしました。

sumyに入力するための日本語文書の前処理については、janomeを使用しました。

これで準備完了です。文書要約のプログラムは、以下になります。

出力結果

入力は、Pythonに関するwikipedia記事の一部を抜粋した文書を使用しました。

  • https://ja.wikipedia.org/wiki/Python

filename input->sample.txt
[‘文法を極力単純化してコードの可読性を高め、読みやすく、また書きやすくしてプログラマの作業性とコードの信頼性を高めることを重視してデザインされた、汎用の高水準言語である。’, ‘核となる本体部分は必要最小限に抑えられている。’, ‘一方で標準ライブラリやサードパーティ製のライブラリ、関数など、さまざまな領域に特化した豊富で大規模なツール群が用意され、インターネット上から無料で入手でき、自らの使用目的に応じて機能を拡張していくことができる。’, ‘またPythonは多くのハードウェアとOS (プラットフォーム) に対応しており、複数のプログラミングパラダイムに対応している。’, ‘Pythonはオブジェクト指向・命令型・手続き型・関数型などの形式でプログラムを書くことができる。’, ‘動的型付け言語であり、参照カウントベースの自動メモリ管理(ガベージコレクタ)を持つ。’, ‘これらの特性によりPythonは広い支持を獲得し、Webアプリケーションやデスクトップアプリケーションなどの開発はもとより、システム用の記述 (script) や、各種の自動処理、理工学や統計・解析など、幅広い領域における有力なプログラム言語となった。’, ‘プログラミング作業が容易で能率的であることは、ソフトウェア企業にとっては投入人員の節約、開発時間の短縮、ひいてはコスト削減に有益であることから、産業分野でも広く利用されている。’, ‘Googleなど主要言語に採用している企業も多い。’, ‘Pythonのリファレンス実装であるCPythonは、フリーかつオープンソースのソフトウェアであり、コミュニティベースの開発モデルを採用している。’, ‘CPythonは、非営利団体であるPythonソフトウェア財団が管理している。’, ‘その他の実装としては、PyPyやIronPythonなどが有名である。’, ‘Pythonは、オランダ人のグイド・ヴァンロッサムが開発した。’, “名前の由来は、イギリスのテレビ局 BBC が製作したコメディ番組『空飛ぶモンティ・パイソン (Monty Python’s Flying Circus)』である。”, ‘Pythonという英単語が意味する爬虫類のニシキヘビがPython言語のマスコットやアイコンとして使われている。’]
[‘文法 極力 単純 化 する コード 可読性 高め 読む やすい 書く やすい する プログラマ 作業 性 コード 信頼 性 高める こと 重視 する デザイン する れる 汎用 高水準 言語。’, ‘核 なる 本体 部分 必要 最小限 抑える られる いる。’, ‘標準 ライブラリ サード パーティ 製 ライブラリ 関数 さまざま 領域 特 化 する 豊富 規模 ツール 群 用意 する れる インターネット 上 無料 入手 できる 自ら 使用 目的 応じる 機能 拡張 する いく こと できる。’, ‘Python 多く ハードウェア OS プラットフォーム 対応 する おる 複数 プログラミングパラダイム 対応 する いる。’, ‘Python オブジェクト 指向 命令 型 手続き 型 関数 型 形式 プログラム 書く こと できる。’, ‘動的 型付け 言語 参照 カウント ベース 自動 メモリ 管理 ガベージコレクタ 持つ。’, ‘これら 特性 Python 広い 支持 獲得 する Web アプリケーション デスク トップ アプリケーション 開発 もとより システム 用 記述 script 各種 自動 処理 理工 学 統計 解析 幅広い 領域 有力 プログラム 言語 なる。’, ‘プログラミング 作業 容易 能率 的 こと ソフトウェア 企業 投入 人員 節約 開発 時間 短縮 ひいては コスト 削減 有益 こと 産業 分野 広い 利用 する れる いる。’, ‘Google 主要 言語 採用 する いる 企業 多い。’, ‘Python リファレンス 実装 CPython フリー オープン ソース ソフトウェア コミュニティ ベース 開発 モデル 採用 する いる。’, ‘CPython 営利 団体 Python ソフトウェア 財団 管理 する いる。’, ‘その他 実装 PyPy IronPython 有名。’, ‘Python オランダ 人 グイド・ヴァンロッサム 開発 する。’, “名前 由来 イギリス テレビ局 BBC 製作 する コメディ 番組 空 飛ぶ モンティ・パイソン Monty Python ‘ s Flying Circus。”, ‘Python 英単語 意味 する 爬虫類 ニシキヘビ Python 言語 マスコット アイコン 使う れる いる。’]
15

文書要約結果
文法を極力単純化してコードの可読性を高め、読みやすく、また書きやすくしてプログラマの作業性とコードの信頼性を高めることを重視してデザインされた、汎用の高水準言語である。
核となる本体部分は必要最小限に抑えられている。
一方で標準ライブラリやサードパーティ製のライブラリ、関数など、さまざまな領域に特化した豊富で大規模なツール群が用意され、インターネット上から無料で入手でき、自らの使用目的に応じて機能を拡張していくことができる。
Pythonのリファレンス実装であるCPythonは、フリーかつオープンソースのソフトウェアであり、コミュニティベースの開発モデルを採用している。

=======================================================

今回は、LexRankを使用して文書要約を行いました。
文書要約の手法は、LexRank以外にも提案されていますから、他の手法に関しても試してみるのもいいかもしれませんね。

こちらを参考にさせていただきました。

  • https://arxiv.org/pdf/1109.2128.pdf
  • https://ohke.hateblo.jp/entry/2018/11/17/230000
  • https://github.com/miso-belica/sumy

タイトルとURLをコピーしました