解決できる悩み
自然言語処理の要約モデルについて調べていると、lexrankやtextrankのアルゴリズムでは 「グラフベース」での要約 が使われていることが分かる。
ただし、初学者向けにわかりやすくグラフベースの解説について書かれた文章が少ない。
- 要約モデルのアルゴリズムを知りたい
- グラフベースの要約について知りたい
- lexrankとtextrankの元となるアルゴリズムについて知りたい
という要望に答えられればと思います。
要約の種類
まず、要約は 抽象的要約と抽出的要約 の2つに分けられる。
- 抽象的要約 : 複数の文章から サマリー化した文章を生成 すること。文の長さを短くでき、偏りの少ない文章になる
例)
・BART
・T5
・BERTSUM
- 抽出的要約 : 複数の文章をまとめている文章を、 元の文章からピックアップ すること。簡単に素早く生成できるのがメリット
例)
・TextRank→グラフベースのアルゴリズム
・LexRank→グラフベースのアルゴリズム
・LSA
・SVM
グラフベースとは?
文章をグラフ構造で表現し各ノード(=文や単語)の関係性を元に要約を作成するという手法です。
そもそも、グラフというのは以下の二つの要素で成り立っています。
-
ノード(頂点):文章中の 重要な要素(例:単語、フレーズ、文) を表します。今回の要約モデルではノードは「要約前の文章を分割したもの」を示す
-
エッジ(辺): ノード間の関係性 を表す。ここでいう関係性とは、因果関係・類似度・具体と抽象といった関係のこと
例えば、以下の例でいえば
- ノード : 五島美術館、紫式部、東京、日本、浅草
- エッジ : 場所、展示美術内容、生誕地、首都、場所
を示しており、モノと関係性を表すのが「グラフベース」の特徴です。
参照元)
https://jpn.nec.com/techrep/journal/g19/n01/190121.html
グラフベースはどのように使われるのか?
次に、このグラフベースでどのように抽出的要約がされるのか解説する。今回は旅行のブログ記事の文章にある以下の文章の要約を作成することにする。
「私は先週京都を訪れました。京都では有名な寺を訪ね、美味しい食べ物を楽しみました。特に、清水寺が印象的でした。また、地元の料理も堪能できました。」
1.ノードへ文章を割り振る
まず、それぞれのノードへ文章を割り当てます。文へ分割し、 それぞれの文をノードに割り当てます 。
- 文1: 「私は先週京都を訪れました。」
- 文2: 「京都では有名な寺を訪ね、美味しい食べ物を楽しみました。」
- 文3: 「特に、清水寺が印象的でした。」
- 文4: 「また、地元の料理も堪能できました。」
2.テキスト解析
入力テキストを解析し、 重要な要素(単語、フレーズ、文など) を特定する。
例えば、tf-idfで大切な単語を出力、bertにて文脈のベクトルを作る、単語の共起に関するベクトルといった方法が考えられます。
今回tf-idfで大切な単語を抜き出すと以下のようになる
- 文1: 「京都」、「訪れる」
- 文2: 「京都」、「寺」、「食べ物」
- 文3: 「清水寺」、「印象」
- 文4: 「地元」、「料理」
3.エッジを表現しグラフ構築
特定された要素をノードとし、それらの 関係性(意味的類似性や共起性)をエッジとして表現する。 これにより、テキストの構造や内容の関連性が視覚化される。
例えば、コサイン類似度を使ってベクトル化された文章・単語同士の関係性を計算にて求めるといった方法が考えられます。
今回の例で言えば、
- 文1と文2は「京都」という単語が共通しているため、エッジを引く
- 文2と文3は「寺」という要素が関連しているため、エッジを引く
4.ノード重要度計算
求められた関係性のベクテルから、Pagerank(※)などの方法を使って、 各ノード(文章)の重要度 を計算する。これにより、テキスト中の最も重要な情報が特定される
今回の例で言えば、
文2は複数のノード(文や単語)と強く関連しているため、重要度が高いと評価されます
※Pagerankとは?
Pagerankとは 「他のノードと関連性が高いノードの方が高い評価を得られる」 という考え方です。つまり、数値の高いエッジが多いノードはPagerankが高く、関連度が高いとできる。Webページの検索順位をつけるために使われている。
参照元)
https://ferret-plus.com/631
5.重要度から要約生成:
重要度の高いノードを選択し、要約として生成する。
今回で言えば、
- 文2: 「京都では有名な寺を訪ね、美味しい食べ物を楽しみました。」
今回は文章要約で使われる手法のグラフベースについて解説をしました。気になる点があればご意見いただけますと幸いです!