仕事をするうえで重要な能力の一つが、わかりやすく端的に伝えることだと思います。
これってAI技術を使えませんか?
このような疑問にお答えします。
近年、AIは様々な分野で成果を出しています。
そのなかには、文書の要約もAI技術と自然言語処理技術を用いて実現されています。
今回は、自然言語処理とニューラルネットワーク言語モデルを用いた文書自動要約を行います。
文書要約の手法は様々な手法が提案されていますが、今回はLSTMをベースとしたSequence-to-Sequence(Seq2Seq)学習による文書自動要約を行います。
文書要約手法について整理します。
文書要約について
文書要約手法は抽出型と生成型に分けられます。
- 抽出型要約・・・原文書の一部を抽出して要約を生成。文書内から代表的な文を抽出し、要約として抜き出す手法
- 生成型要約・・・原文書の内容に基づき、新たな要約文を生成する方法
今回使用するLSTMベースのモデルは生成型の手法になります。
Pythonライブラリpysummarizationを用いて文書要約を実現します。
pysummarizationでは、pydbmを応用して、LSTMをベースとしたエンコーダ/デコーダを実装し、Seq2Seq学習により要約の精度を向上させています。
それでは、文書要約ツールの準備を行います。
文書要約ツールの準備
日本語文書の処理にMeCabを使用します。
今回は、開発環境としてwindows osでAnacondaを使用します。
Anacondaについては、下記の記事を参照ください。
日本語処理のためのライブラリ準備
こちらからMeCabをインストールします。
- https://github.com/ikegami-yukino/mecab/releases/tag/v0.996
「mecab-0.996-64.exe」を選択してダウンロードしました。
MeCabをインストールした場所を環境変数に設定します。
本稿では、C:\Program Filesにインストールしています。
- C:\Program Files\MeCab\bin
コマンドプロンプトを起動し、以下のコマンドを実行します。
1 |
mecab |
文章を入力してみてください。入力文章の形態素解析の結果が出力された場合は、MeCabのインストール成功です。
次に、Anacondaプロンプトを起動し、以下のコマンドを実行します。
1 |
pip install MeCab |
先程のMeCabをインストールしたフォルダ内(C:\Program Files\MeCab\bin)の「libmecab.dll」をコピーして、Anacondaのインストール先/Lib/site-packagesに配置します。
起動したAnacondaプロンプトに対して、下記のコマンドを実行して、pythonインタプリタを起動します。
1 |
python |
下記のコマンドを実行して、MeCabが使用できるか否かを確認します。
1 |
import MeCab |
このコマンドを実行して、エラーが発生しなければ、pythonでも利用可能になっています。
さらに、Pythonライブラリnumpy, nltkをインストールします。numpy: v1.13.3 or higher. nltk: v3.2.3 or higher.
本稿では、numpy 1.18.1, nltk 3.4.5をインストールしています。
1 2 |
pip install numpy pip install nltk |
次に、文書要約で使用するpysummarizationをインストールします。
1 |
pip install pysummarization |
これで準備は完了です。文書要約のプログラムは以下になります。
文書要約プログラム
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 32 33 34 35 |
from pysummarization.nlpbase.auto_abstractor import AutoAbstractor from pysummarization.tokenizabledoc.mecab_tokenizer import MeCabTokenizer from pysummarization.abstractabledoc.top_n_rank_abstractor import TopNRankAbstractor def fn_start_document_summarize(): file = input("filename input->") with open(file) as f: contents = f.readlines() document = ''.join(contents) print(u'[原文書]') print(document) # Object of automatic summarization. auto_abstractor = AutoAbstractor() # Set tokenizer for Japanese. auto_abstractor.tokenizable_doc = MeCabTokenizer() # Set delimiter for making a list of sentence. auto_abstractor.delimiter_list = ["。", "\n"] # Object of abstracting and filtering document. abstractable_doc = TopNRankAbstractor() # Summarize document. result_dict = auto_abstractor.summarize(document, abstractable_doc) print(u'[文書要約結果]') # Output result. for sentence in result_dict["summarize_result"]: print(sentence) if __name__ == '__main__': fn_start_document_summarize() |
出力結果
入力は、Pythonに関するWikipedia記事の一部を使用しました。
- https://ja.wikipedia.org/wiki/Python
[原文書]
文法を極力単純化してコードの可読性を高め、読みやすく、また書きやすくしてプログラマの作業性とコードの信頼性を高めることを重視してデザインされた、汎用の高水準言語である。
核となる本体部分は必要最小限に抑えられている。一方で標準ライブラリやサードパーティ製のライブラリ、関数など、さまざまな領域に特化した豊富で大規模なツール群が用意され、インターネット上から無料で入手でき、自らの使用目的に応じて機能を拡張していくことができる。
またPythonは多くのハードウェアとOS (プラットフォーム) に対応しており、複数のプログラミングパラダイムに対応している。Pythonはオブジェクト指向・命令型・手続き型・関数型などの形式でプログラムを書くことができる。動的型付け言語であり、参照カウントベースの自動メモリ管理(ガベージコレクタ)を持つ。
これらの特性によりPythonは広い支持を獲得し、Webアプリケーションやデスクトップアプリケーションなどの開発はもとより、システム用の記述 (script) や、各種の自動処理、理工学や統計・解析など、幅広い領域における有力なプログラム言語となった。プログラミング作業が容易で能率的であることは、ソフトウェア企業にとっては投入人員の節約、開発時間の短縮、ひいてはコスト削減に有益であることから、産業分野でも広く利用されている。Googleなど主要言語に採用している企業も多い。
Pythonのリファレンス実装であるCPythonは、フリーかつオープンソースのソフトウェアであり、コミュニティベースの開発モデルを採用している。CPythonは、非営利団体であるPythonソフトウェア財団が管理している。その他の実装としては、PyPyやIronPythonなどが有名である。
Pythonは、オランダ人のグイド・ヴァンロッサムが開発した。名前の由来は、イギリスのテレビ局 BBC が製作したコメディ番組『空飛ぶモンティ・パイソン (Monty Python’s Flying Circus)』である。Pythonという英単語が意味する爬虫類のニシキヘビがPython言語のマスコットやアイコンとして使われている。
[文書要約結果]
文法を極力単純化してコードの可読性を高め、読みやすく、また書きやすくしてプログラマの作業性とコードの信頼性を高めることを重視してデザインされた、汎用の高水準言語である。
核となる本体部分は必要最小限に抑えられている。
一方で標準ライブラリやサードパーティ製のライブラリ、関数など、さまざまな領域に特化した豊富で大規模なツール群が用意され、インターネット上から無料で入手でき、自らの使用目的に応じて機能を拡張していくことができる。
Pythonはオブジェクト指向・命令型・手続き型・関数型などの形式でプログラムを書くことができる。
これらの特性によりPythonは広い支持を獲得し、Webアプリケーションやデスクトップアプリケーションなどの開発はもとより、システム用の記述 (script) や、各種の自動処理、理工学や統計・解析など、幅広い領域における有力なプログラム言語となった。
プログラミング作業が容易で能率的であることは、ソフトウェア企業にとっては投入人員の節約、開発時間の短縮、ひいてはコスト削減に有益であることから、産業分野でも広く利用されている。
Pythonのリファレンス実装であるCPythonは、フリーかつオープンソースのソフトウェアであり、コミュニティベースの開発モデルを採用している。
CPythonは、非営利団体であるPythonソフトウェア財団が管理している。
その他の実装としては、PyPyやIronPythonなどが有名である。
Pythonは、オランダ人のグイド・ヴァンロッサムが開発した。
======================================================
今回は、pysummarizationを用いてLSTMベースの文書要約を行いました。
文書要約の手法は、様々な手法が提案されていますから、試してみるのもいいかもしれませんね。
こちらを参考にさせていただきました。
- https://pypi.org/project/pysummarization/
- https://github.com/ikegami-yukino/mecab/releases/tag/v0.996
- https://qiita.com/menon/items/f041b7c46543f38f78f7