はじめようテキスト自動要約 - @Tokyo.R #41

@yamano357
2014.08.30 Sat.

自己紹介

  • Twitter: @yamano357
  • 背景: 自然言語処理
    • テキスト自動要約、機械学習
  • 仕事: とある不動産ポータル運営会社でデータ周りを
  • 業務: 分析環境構築、最適化、可視化、分析
  • 趣味: 読書、紅茶、いい音
  • 興味: 言語情報、位置情報、時系列情報
  • GitHub: https://github.com/yamano357/
  • RPubs: http://rpubs.com/yamano357/
  • Blog: Coming Soon…

免責コメント(または言い訳)

  • 内容は個人の見解であり、所属する組織・団体の公式見解ではありません

  • 2009年に作成した資料をベースにしているので内容が古いですが、ご了承ください(残りはいろいろなところから継ぎ足し)

  • 言語処理研究から離れて数年経っているので最新の話題には触れておりません

  • 資料はテキスト自動要約の概要をざっくりと通したので、少し踏み込んだ話は適宜口頭で補足します

  • R言語の勉強会ですが、Rの話はほとんどでてきません

  • 図を描くセンスが皆無なので文字が多くなっており、この資料を要約するシステムが欲しい

  • 先人の方々の業績に感謝(『参考』に明記した資料が非常に役に立ちました)

目次

  • テキスト自動要約とは
  • テキスト自動要約の歴史
  • 要約の分類
  • 人の要約生成過程と自動要約過程
  • 重要文抽出
  • 文短縮
  • 冗長性除去
  • 並べ替え
  • いろいろな要約研究
  • 評価方法と評価尺度
  • テキスト自動要約システム構築に関わる要素
  • Rによるテキスト自動要約システム
  • まとめ
  • 参考・推奨

はじめに

  • テキスト自動要約の概要について
    – 自動要約の歴史
    – 要約の種類
    – 人と機械の要約生成過程

テキスト自動要約とは

  • 『与えられた文書に記述された情報を簡潔にまとめた短い文書を、自動的に生成すること』
  • 自然言語処理の応用事例のひとつ(他には機械翻訳、質問応答、日本語入力など)

  • なぜ必要か?
    => 全部に目を通すなんて時間的に無理
    => 必要なところだけ欲しい
    => 手早くかつ安く(むしろタダで)

テキスト自動要約(想像と現実)

「なんかテキストを入力すると、人が作成したような感じでまとめてくれるんだよね?」

=> 「人の要約と同じような出力を要求するのは、現在の研究状況で無理がある」

「小説とか入力したら、あらすじになって返ってくるんだよね?」

=> 「生成型要約とかハードル高い。抽出型要約でさえも研究レベル。ましてや小説なんかは人でも難しい」

「書類が多すぎて全部読んでられないから、要約システム作ってなんとかまとめられない?」

=> 「秘書を雇って頼んだ方が断然に安い」

閑話

ひとり歩きしたキーワードから夢想する内容と関係者が抱く現実との埋まらない乖離

いやはや、どこかで聞いたような話ですね

それなんて、でーたなんたら(略)

閑話休題

“Summly"や"Wavii"といったニュース要約アプリが大企業に買収されるなど、社会的ニーズは高まっている

しかしながら、できることとできないことがある

「データ分析すればなんか凄い発見ができるんだろ」と言われたことはないですか

「機械学習すればなんか凄いことができるんじゃないか」と考えたことはないですか

『機械学習は苦しい』

「自然言語処理を応用すればなんか凄いシステムが作れるんじゃないか」と思ったことはないですか

人の方が凄いです

知らないとバラ色の夢ばかり広がるので、これくらいなら個人でも始められるという現実的なテキスト自動要約の話が今日の資料です

(「西川さんの資料」を一読していれば充分な内容ですが)

テキスト自動要約の歴史

大昔: 専門的な文献(学術論文など)を対象にした文献抄録
1958 語の出現頻度を手がかりに重要文抽出した研究(H.P.Luhn)
1969 素性の重み付け線形総和をスコアとした研究(H.P.Edmundson)

199X Web文書の増大により新聞記事以外の多様な入力文書へ
1998 TIPSTER Text Summarization Evaluation Conference (SUMMAC)が開始(テキスト自動要約に関する評価型プロジェクトとしては最初)
2001 TIDESプロジェクトの一貫として、Document Understanding Conference (DUC)が開始
2001 NIIが主導するNTCIRのタスクのひとつとして、Text Summarization Challenge (TSC)が日本で開始
2005 質問に焦点を当てた要約生成がDUCのメインタスクとなる
2008 DUCがTREC(Text Retrieval Conference)のQAトラックと統合され、Text Analysis Conference (TAC)のトラックのひとつとなる
– TACではQuestion AnsweringやRecognizing Textual Entailmentなど、要約と関連性が高い新しい研究のトラックも行われている

2000年初期から機械学習ベースで重要文抽出する研究が増加
2000年中期以降から要約生成を数理最適化で表現する試み

要約の種類:利用目的

  • 指示的要約(indicative): 原文を参照する前に用いる要約
    – 原文の重要な情報を全て含んでいる必要はなく、人にとって読みやすい文章が望ましい(難易度:低-中)
    – 検索システムのスニペットやニュースサイトのトピックスなど

  • 報知的要約(informative): 原文の代わりとして短くまとめたものを用いる要約
    – 原文の重要な情報を全て含み、なおかつ人間が読みやすい(可読性が高い)文章が望ましい(難易度:高)
    – ニュース番組の字幕放送や新幹線の電光掲示板で使用されるニュース記事など

要約の分類:オプション

  • 制約:
    – generic: 特定の情報に依らない要約
    – クエリ指向(query-biased or user-forcused ): 特定の情報に焦点を当てた要約
    (このほかに条件が加わるタスクにUpdateやGuidedといったもある)
  • 入力テキスト:
    – 単一テキスト or 複数テキスト
  • 生成アプローチ:
    – 抽出型要約(Extract): 原テキストから抜き出すことで要約を生成
    – 生成型要約(Abstract): それ以外
  • ジャンル: テキストの種類(新聞記事、論文、レビュー、ブログなど)
  • カテゴリ・ドメイン: テキストの分類(科学、スポーツ、芸能、などなど)
  • 要約率: 要約として出力するテキストの圧縮率

人の自由作成要約の生成過程

自由作成要約: 原文をもとに制約を与えずに、自由に作成した要約

自由作成要約を分析した結果、人は単に重要な文を抽出したり、単語を削ったりするだけでなく、それらを編集する操作を行って要約を生成 

  • 不要な句の削除
  • 文同士の結合
  • 構文的変形
  • 語彙的言い替え
  • 抽象化・具体化
  • 並び替え

これらの編集操作を用いる以外に、原文にない文を自ら作り出す(「生成型要約」と言える。難易度:高)

専門家の抄録作成者の場合は、「自ら文を作り出してはいけない」という制約があり、「切り貼り操作」で要約生成(「抽出型要約」と言える。難易度:低-中)

テキスト自動要約の方法論

  1. テキスト理解(テキスト中の文解析と解析結果の生成)
  2. テキスト解析結果の要約の内部表現へ変形
  3. 要約の内部表現を要約テキストとしての生成

– 「理解-変形-生成」のシステム化は困難(仕組みが明確でない)

計算機上で実現可能なテキスト自動要約の方法として、下記のステップをシステム化(「切り貼り操作」による「抽出型要約」の生成)

  • 文同定: 文章から文を特定
  • 重要文抽出: テキスト中から「重要な文」を抜き出す
  • 文短縮: 各文を短く圧縮
  • 並べ替え: 適切な順序に並び替える
  • 推敲: 出来上がった要約のドラフトを読みやすく修正

* 「重要文抽出」と「文短縮」と「並べ替え」のみを説明

テキスト自動要約の中身

難易度が高い「報知的要約」、「生成型要約」については深く触れません

  • 重要文抽出: テキスト中から「重要な文」を抜き出す
  • 文短縮: 各文を短く圧縮
  • 並べ替え: 適切な順序に並び替える

重要文抽出: テキスト中から「重要な文」を抜き出す

テキスト中から重要な文を抜き出し、テキスト中での出現順に並べて出力する要約手法

  1. 「何らかの情報」をもとにして、各文の重要度(スコア)を計算
  2. 重要度が上位の文から順に、指定された要約率(要約の長さ)に達するまで、文を選択

重要文抽出では、算出する重要度の計算方法により、出力結果が大きく変化

重要文抽出: 重要度計算の基準(例1)

(1) テキスト中の単語の重要度
– 出現頻度(Term Frequency, TF)を単語重要度と考えるTF法や、これに合わせて単語の出現するテキスト数(Document Frequency, DF)の逆数を考慮したTF*IDF法が広く使われる

(2) テキスト中あるいは段落中での文の位置情報
– テキストの位置に重要な情報を含む傾向がある。最初の段落だけを要約として抜き出す手法(リード手法)は新聞記事で優れたメソッド

(3) テキストのタイトルなどの情報
– タイトルや見出し自体が本文の簡潔な要約になっているという仮定。タイトルや見出しに現れる内容語を含む文が重要であると考え、タイトルや見出し中の単語を要約文に用いる

(4) テキスト中の手がかり表現
– 重要な文を直接明示する手かがり表現(Cue Phrase)を利用。論文では、「本研究(で)は」、「まとめると」、「本稿では-述べる」など。逆に「例えば」や「つまり」などの例示の接続詞で始まる文は、理解の補助として重要度が低いという負の手がかり表現とも考えられる

重要文抽出: 重要度計算の基準(例2)

(5) テキスト中の文あるいは単語間の繋がり – テキスト中の他の多くの文と強い関連がある文は、テキスト中で中心的な役割。この関連性には、反復表現、同義性、シソーラスでの意味的関連(例えば、「川」と「橋」など)がある

(6) 文間の関係を解析したテキスト構造
– テキスト中の接続詞などを基にテキスト構造を解析し、得られた情報を利用

* 上記は後述する「グラフベースの要約生成」にも利用される基準

重要文抽出: 重要度統合

  • 重要度計算の基準を単独あるいは組み合わせて重要度を算出し、重要度の高い文を要約として抽出
    – Edmundsonによる初期の要約研究では、文のスコアを重み付き線形総和から算出(各パラメータは人手で調整)

\[ W(s) = \alpha C(s) + \beta K(s) + \gamma L(s) + \delta T(s) \]

W(s): 文sの総合的な重み  
C(s): 手がかり語による文sの重み((4) に相当)  
K(s): キーワードによる文sの重み((1) に相当)  
L(s): 位置情報による文sの重み((2) に相当)  
T(s): タイトルによる文sの重み((3) に相当)  
  • 現在は学習・正解データを用意し、各重みを最適化

重要文抽出:問題点

  • 重要文抽出では出力結果が一貫性を欠くケースが存在

  • 代名詞が指し示す先行詞が消失してしまう場合
    (1) 『エイブラハム・リンカーンは1809年2月12日にトーマス・リンカーンおよびナンシー・ハンクス夫妻の息子として生まれた』
    (2) 『彼の誕生日はチャールズ・ダーウィンと同じ日である』

    • 2番目の文のみが要約として選ばれた場合は「彼」が指すものがわからなくなってしまう
  • 連文の欠落によって話題が飛躍する場合
    – 「10個の文テキストから半分程度の要約(要約率50%)を出力」
    => 重要文抽出では重要と判断される約5文を抜き出す
    後半部分のみから抜き出されると、内容を正しく把握しにくくなる

  • 非常に短く圧縮しようとすると、文が歯抜けになりすぎて内容の捉えにくくなる

重要文抽出:問題点の解決案

  • 代名詞の先行詞への置換、照応詞を含む文の前の数文の追加や、接続詞を削除、動詞の時制や態は調和がとれた流れへ書き換えることで部分的な解決
  • 重要文抽出と文短縮を組み合わせる構成
  • 技術的に無理と諦める

文短縮: 各文を短く圧縮

  • 一文ごとになるべく情報を減らさずに、かつ文法性を保ったまま重要でない個所を削って(あるいは重要な部分を抽出し)、テキストを短く表現
    – 体言止めや抽象化して言い換える(生成型要約に近い)
    — 「7月中に解散します」 => 「7月中に解散」
    – 「お腹が空いたので、パンと牛乳を買った」 => 「空腹だったので、食料を買った」

  • 構文解析木から重要な個所を抽出(あるいは不要な個所の枝刈り)する手法
    – 重要性の判定には重要文抽出で利用した基準や枝刈りにより構文構造が破壊される要素を重要と判断
    – 英語では文中の要素に関する重要度の指標として以下を用いた研究もある
    「固有名詞 > 普通名詞」 「名詞 > 形容詞 > 冠詞」
    「否定は重要」 「主節 > 従属節」

  • 構文解析木の枝刈りの例
    西川さんの資料が秀逸すぎて参照

統計的文短縮: Noisy Channel Model

  • 原文と人間が作成した自由作成要約(正解)のパラレルコーパスから、人間の要約生成過程のモデルを学習して要約

  • 原文の情報を維持したまま文法的に正しく要約する統計的な文短縮手法として、Noisy Channel Modelを用いた研究(クエリ依存要約に拡張した研究もある)
    – 自動要約を「冗長な原文」と「簡潔な要約」の翻訳と見なし、「簡潔な要約」が雑音のある通信路を経由して「原」文書の形で改竄された「冗長な原文」が得られたとする。この「冗長な原文」から「簡潔な要約」へ復号するモデルの構築が目的

確率的言語モデルの読んでおきたい資料

冗長性除去: より冗長性の少ない要約を目指して

  • 重要文抽出は「重要」な文を独立に抜き出しているため、抽出された結果に似た文ばかりが集まる可能性がある
    – 特に複数テキスト要約における重要文抽出では、複数入力の内容を適切に網羅した要約が望ましい

  • 冗長な情報を除去することで他の有用な情報を追加し、要約中の情報量を増やすことが可能

  • 単純な冗長性判定は、文間の類似度を計算し、ある閾値以上の文同士は冗長と判断
    – クラスタリングして各クラスタから代表の一文のみを抽出

冗長性除去: Maximal Marginal Relevance(MMR)

  • 重要文抽出の際に文の新規性を考慮して重要度を「逐次」計算して、文を抽出する手法

\[ \newcommand{\argmax}{\mathop{\rm arg~max}\limits} MMR = \argmax_{D_{i} \in T} [\lambda Sim_{1}(D_{i}, Q) - (1- \lambda) max_{D_{j} \in S} Sim_{2}(D_{i}, D_{j}))] \]

Q:検索クエリ   S:すでに要約として選ばれている文集合  
T:まだ要約として選ばれていない文集合  
  • 抽出候補文をすでに要約に選択した文と比較し、類似した文が要約中に存在すれば候補文の重要度を下げる
  • λは0から1の間の値で、1に近いとクエリQとの適合度を重要視し、逆に0に近いと情報の新規性を重視

MMR参照資料

並べ替え: 定義

  • 単一テキスト要約では原文での出現順に出力すればいい
  • 複数テキスト要約では抽出された重要文の順番も考慮すべき点である(時系列が崩壊した要約は可読性が乏しく、最悪の場合は内容を読み違える)
    – 新聞報道記事から要約を生成する場合は、テキストの書かれた日付順に並べれば、ある程度の結束性が保たれた要約が出力されると考えられるが、独立した内容のテキスト集合から要約を作成する場合は最適とは限らない

並べ替え: 統計的手法

  • 文の持つ言語的特徴から文の順序を決定する手法として、統計的な確率モデル(文間の連接スコア)を用いた研究
  1. 順序付け対象から動詞と名詞を抽出し、これらの名詞や動詞と係り受け関係にある語を抜き出す
    – 一般に文中の動詞は命題間の談話関係の決定に重要な役割を果たす、名詞の反復はテキストの一般性を維持する働きがある
  2. テキスト中のある文の出現確率は直前の文によって決まると考え、ある文が次に出現する確率を算出
  3. 1-2を事前に算出し、実際に順序を決定するときはまず各文が先頭になる確率を計算
  4. 残りの文から先頭文の次に順序付けされる確率の最も高い文を選択し、同様の操作を繰り返して全ての文の順序を決定

いろいろな要約研究:グラフベース

  • 「他の文章と関連性が高い文は重要」という仮定。「テキスト中の文あるいは単語間の繋がり」と「文間の関係を解析したテキスト構造」の重要度計算基準に該当

  • グラフベースの重要文抽出プロセス

    1. 入力テキストから文間の類似度を算出
    2. 文をノードに類似度をリンクの強さとして文書グラフを作成
    3. PageRankやHITSなどのランキングアルゴリズムを適用したり、中心性などのネットワーク分析で用いられる指標を計算したりして文のスコアを計算
    4. スコアの高い文を要約率を満たすまで抽出

単語や句などをノードの単位にスコアを計算し、文に含まれるそれらの合計を文の重要度にして抽出したり、単語や句などを単位に抽出することで文短縮したりも可能

  • 似た文が集まりやすくなるので単一テキスト要約向き
    LexRankTextRankのように、冗長性を抑えて複数テキスト要約に適用するケースも(関連性と冗長性のバランスを取る必要あり)

  • グラフベースの手法では関連性と冗長性を最適化してはいるが、要約生成過程をモデル化しているわけではない

いろいろな要約研究:機械学習ベース

  • 重要文抽出を「重要・非重要」の二値分類に定式化
    – Naive Bayes分類器を構築した研究が最初
    – 決定木(C5.0?)によるシステムがDUCにおいて高い評価結果(うろおぼえ)

  • 教師あり・教師なし学習、半教師あり学習、転移学習、強化学習などのさまざまなアルゴリズムを使った研究が多種存在
    – しかしながら、機械翻訳に比べると学習データ不足が否めない
    — 機械翻訳のための対訳コーパスならば古典的なHansardsコーパスでも約130万文ペア
    — 例えばDUC2004の場合は約4000文の要約文
    => 要約文の構造を活かすような大域的学習手法が効果を充分に発揮できない

  • (機械学習ではないが、参照要約中の高頻度単語に着目して文をスコアリングしたSumBasicは高い評価値を得ている)

いろいろな要約研究:数理最適化(1)

  • 重要文抽出を数式で表現すると下記の通り

\[ \newcommand{\argmax}{\mathop{\rm arg~max}\limits} \hat{S} = \argmax_{S \in D} \{ f(S):length(S) \leq K \} \]

D: 原テキスト集合         S: テキスト集合の要素となる文
f(S): Sの重要度を返す関数 length(S): Sの長さ
K: 要約サイズ
  • 要約サイズK以下で目的関数fを最大化する文集合\( \hat{S} \) を求める
    => あるサイズのナップサックに価値を最大化する品物を詰めるにはどう選べばいいか(= ナップサック問題として求解可能)

  • 文の並び替えを巡回セールスマン問題として扱った研究もある

いろいろな要約研究:数理最適化(2)

  • 複数テキスト要約を「最大被覆問題」として解く研究もある

\[ max. \sum_{j} b_{j} z_{j} \hspace{1.0cm} s.t \sum_{i} c_{i} x_{i} \leq K \hspace{1.0cm} \forall_{j}, \sum_{i} a_{ij} x_{i} \geq z_{j} \hspace{1.0cm} \forall_{i}, x_{i} \in \{0, 1\} \hspace{0.5cm} \forall_{j}, z_{j} \in \{0, 1\} \]

aij: 文iが単語jを含むか bj: 単語jの重要度
ci: 文iの長さ         xi: 文iが選択されたか
zj: 単語jが被覆されたか  K: 最大要約長

– 「被覆」しているかどうかを「含意関係」で判定することも

  • 既に含まれている要素を追加しても効用が小さくなる性質( => 劣モジュラ性
    – 要約は冗長性を抑えて関連性を最大化したいため、劣モジュラ関数を目的関数としてモデル化しやすい(参考リンク

テキスト自動要約を数理モデルで定式化する話については、 NLP2014のチュートリアルにおいて『文書要約への数理的アプローチ』という題目で、東工大の高村先生が詳しくまとめております

  • 『最適化問題として要約モデルを表そう』 、『モデル、パラメータ推定、デコーディングのどこに貢献しているのかを考えよう』

テキスト自動要約システムの評価

  • 内容評価
    – F-measure
    – ROUGE
    – Pyramid
    – Basic Elements
  • 可読性評価
  • 評価型ワークショップ

評価方法:分類

  • 被験者
    – オンライン: 人間の被験者がシステムを評価
    – オフライン: 人間の被験者なしでシステムを評価

  • 手法
    – 内的な評価: 生成された要約自体を評価
    – 外的な評価: 何かしらのタスクに生成された要約を用いて、効果的だったかを評価(検索エンジンの結果に提示して、人的コストが軽減されたか判定。ほとんどやられていない)

  • 側面
    – 内容: 原文書の内容を反映した要約になっているかを評価
    – 可読性: 読みやすい要約になっているかを評価

* 内容と可読性のオフラインで内的な評価について主に説明

内容評価の手法:F-measure

F-measure(F値): Precision(精度)とRecall(再現率)の調和平均で、情報検索システムの評価に用いられる評価尺度。重要文抽出のシステムを評価可能

\[ F-measure = \frac{2 \times Precision \times Recall}{Precision + Recall}, \hspace{1.0em} Precision = \frac{|M \cap H|}{|M|}, \hspace{1.0em} Recall = \frac{|M \cap H|}{|H|} \]

M: システムによる要約文集合  H: 参照要約文集合  
M <- c(1, 2, 3, 4, 7); H <- c(1, 2, 5, 7)
P <- length(intersect(M, H)) / length(M)
R <- length(intersect(M, H)) / length(H)
F <- (2 * P * R) / (P + R)
# Confusion Matrix
confusion.mat <- table(
  c(1, 1, 1, 1, 0, 0, 1), c(1, 1, 0, 0, 1, 0, 1)
)
R.cf <- confusion.mat["1", "1"] / sum(confusion.mat["1", ]) 
P.cf <- confusion.mat["1", "1"] / sum(confusion.mat[, "1"]) 
F.cf <- (2 * P.cf * R.cf) / (P.cf + R.cf)
identical(F, F.cf)
[1] TRUE

内容評価の手法:ROUGE

ROUGE(Recall-Oriented Understudy for Gisting Evaluation): システムが作成した要約と人間による参照要約(正解)との類似度を算出

  • Chin-Yew Linによって提案された自動要約システムの評価尺度
  • BLEUと呼ばれる機械翻訳の評価尺度を要約用に改良

N-gram頻度を用いるROUGE-Nは下記の通り

\[ ROUGE-N = \frac{\sum_{S \in RefSummaries} \sum_{gram_{n} \in S Count_{match}(gram_{n})}}{\sum_{S \in RefSummaries} \sum_{gram_{n} \in S Count(gram_{n})}} \]

  • 最長共通列(Longest Common Subsequence)一致を用いるROUGE-Lや、重み付き部分文字列最長一致(部分的に一致する場合よりも連続した一致により高い評価を与える)を用いるROUGE-Wや、Skip-bigramを用いるROUGE-Sなども

  • DUC2001からDUC2003のデータで検証した結果、「ROUGE-2, ROUGE-L. ROUGE-W, ROUGE-S」が良い結果(ROUGE-1, ROUGE-L, ROUGE-W, ROUGE-SU4は非常に短い要約の評価で優れているとも)

内容評価の手法: PyramidとBasic Elements

Pyramid: Summarization Content Units(SCUs)を単位したピラミッドモデルによる評価法
– 複数の人手による正解要約からSCUsに重みづけ
– SCUsは各正解要約の単語列から構成されたフレーズ以下の要素
– SCUs内の単語を含む文の数(複数カウントせず)がSCUsの重み。重みが高いSCUsは少なく、低いSCUsは多くなる

Basic Elements: 最小の意味的単位として「Basic Elements(BEs)」を定義し、BEを単位にした要約の内容に関する内的評価法。BEの抽出には構文解析などから得られる単語と関係を利用

– 日本では構文片(係り受け解析後の「係り」と「受け」をセットにした言語処理単位)という要素を提案した研究も

可読性の評価手法

  • テキストの可読性尺度としてはFOG indexやKincaid indexなどがあるが、単語や文字の長さを軸に評価しているため、要約評価に向いていない

  • Quariry Questionというチェック項目を用いたり、DUC2005では以下の5つを人手で5段階評価(A(very good)- E(Very poor))

    1. 文法性(Grammaticality): 文法的でない文が含まれていないか(非文法的な文は読みにくい)
    2. 非冗長性(Non-redundancy):全く同じ情報が繰り返されていないか(要約中に不必要な繰り返しは含むべきではない)
    3. 指示詞の明解さ(Referential clarity):先行詞のない指示詞が含まれていないか(要約中の代名詞や名詞句が指す語は容易に特定できるべき)
    4. 焦点(Focus):要約全体と無関係な情報が含まれていないか
    5. 構造と一貫性(Structure and Coherence):接続詞を補ったり削除したりする必要のある箇所はないか

自動要約の評価型ワークショップ

  • 海外ではSUMMACやDUC, TACがあり、日本ではNIIが主導しているNTCIRでTSCが2000年初期に開催
  • DUCにより作成された自動要約のロードマップでは下記のように進むことが提唱
    – 簡単なジャンルから複雑なジャンルへ
    – 内的な評価から外的な評価へ
    – シンプルなタスクから要求型タスクへ

    抽出からアブストラクトへ  
    単一テキストから複数テキストへ
    英語から多言語へ
    一般的な要約から焦点を当てた要約へ  
    

システム化

  • システム化に関わる周辺技術
  • 素性構築のアプローチ
  • デモ

テキスト自動要約の周辺技術

言語処理

  • 形態素解析
    – 分かち書き
    – 原形化
    – 品詞タグ付け
  • 統語解析
    固有表現抽出
  • 意味解析
    – 感情分析
    – テンス、アスペクト、モダリティ – 述語項構造解析
    – 含意関係認識
  • 文脈・談話解析
    – 共参照解析

統計処理

  • 機械学習
  • 数理最適化
  • マイニング
  • ネットワーク分析

実装

  • テキストデータ収集
  • 言語資源作成
  • 本文抽出
  • 日本語処理
  • システム評価

テキスト自動要約システム構築アプローチ

テキストからどういう素性を抽出するか

  • 知識ベース:論理形式(logical forms)やオントロジーなどを用いた意味表現を利用した手法
    – 深い意味レベルの解析による高精度なシステムが期待できる
    – 特定領域で特化される傾向による頑健性・汎用性を欠く

  • 特徴ベース:原文の位置情報や特徴的なターム、手がかり句などの表層的な特徴を利用した手法
    – 解析レベルが浅く精度は低めであり補正などの処理が必要
    – 手軽にシステム作成でき、様々な場面で活用できる

* 体系が似た欧米の言語の汎用解析器は存在するものの日本語までカバーしたものはない

Rによるテキスト自動要約例:処理概要

  • グラフベースの単一テキスト要約システムを構築

    1. 入力テキストを改行を単位で文に区切って前処理
    2. 入力テキストから単語頻度行列を作成
    3. コサイン類似度を算出して、文書グラフを構築
    4. HITSアルゴリズムを適用して文のスコアを算出
    5. 要約率を制約にしてナップサック問題として解を求める
  • Shinyでデモを作ろうとしたら、日本語処理とか常時稼動環境が形態素解析器が使えなくて挫折

  • WikipediaのデータであらかじめLDAのモデルを作成して、トピック確率から文書グラフを作成しようとしたけれど、時間が足りませんでした

  • 誰にでも手軽にできるように、今回はパッケージを多用しました

  • R言語ではないけれど、ちょっと調べたらこういうの

Rによるテキスト自動要約例:定数定義と入力

kSetCompressionRatio <- 0.3
kSetLoadLibName <- c("stringr" ,"SnowballC", "tm", "proxy", "adagio")
is.road.lib <- suppressPackageStartupMessages(
  sapply(kSetLoadLibName, library, character.only = TRUE, logical.return = TRUE)
)
all(is.road.lib)
[1] TRUE
## 1. input text
input.text <- unlist(strsplit(x = "input text", split = "\n"))

入力テキスト

Rによるテキスト自動要約例:入力処理部

input.text <- input.text[as.integer(which(sapply(input.text, stringr::str_length) > 0))]
input.sen.len <- stringr::str_length(string = input.text)

# Stemming
input.text <- stringr::str_trim(
  string = SnowballC::wordStem(
    words = input.text,
    language = "en"
  ),
  side = "both"
)

## 2. crete term-doc matrix
imput.tdm <- tm::TermDocumentMatrix(
  x = tm::Corpus(x = tm::VectorSource(input.text)), 
  control = list(
    removePunctuation = TRUE,
    removeNumbers = TRUE,
    tolower = TRUE
  )
)

Rによるテキスト自動要約例:スコア計算と割り当て

## 3. create sim matrix
sim.mat <- as.matrix(proxy::dist(x = as.matrix(t(imput.tdm)), method = "cosine"))

## 4. HITS Algorithm
auth <- eigen(t(sim.mat) %*% sim.mat)$vectors[, 1]
auth <- auth / sum(auth)
hub <- eigen(sim.mat %*% t(sim.mat))$vectors[, 1]
hub <- hub / sum(hub)

## 5. Knapsack
result.sen <- adagio::knapsack(
  p = (auth + hub),
  w = input.sen.len, 
  cap = as.integer(sum(input.sen.len) * kSetCompressionRatio)
)$indices

Rによるテキスト自動要約例:結果

# the number of lines
length(input.text)
[1] 9
length(result.sen)
[1] 4
# output line number of summarization
result.sen 
[1] 1 2 5 8
# compression ratio
sum(stringr::str_length(input.text[result.sen]))/ sum(stringr::str_length(input.text))
[1] 0.2744

Rによるテキスト自動要約例:表示

input.text[result.sen]
[1] "5 Object-oriented program"                                                                                                                                                                                                                                                                            
[2] "Object-oriented programming is a style of programming that has become popular in recent years. Much of the popularity comes from the fact that it makes it easier to write and maintain complicated systems. It does this through several different mechanisms."                                      
[3] "Another feature of most object-oriented languages is the concept of inheritance. In most programming problems there are usually many objects that are related to one another. The programming is considerably simplified if some components can be reused."                                           
[4] "The greatest use of object oriented programming in R is through print methods, summary methods and plot methods. These methods allow us to have one generic function call, plot say, that dispatches on the type of its argument and calls a plotting function that is specific to the data supplied."

おわりに

  • まとめ
  • 最後に一言

まとめ

  • テキスト自動要約システムに関する研究を、重要文抽出をメインに説明

  • 文にスコアリングする関数を定義して、「いい感じ」に文を選択すれば、重要文抽出なら手軽に可能

  • 文短縮とか並び替えとかは、深く立ち入らないのが懸命

  • システムの評価は参照要約がないと難しいので人手作成を頑張りましょう

  • これであなたもテキスト自動要約システムが構築できます

最後に

テキスト自動要約システムをこれから作ろうと思っている方へ

既存のツールや言語資源を用いてテキストから言語素性を抽出して、グラフベースでスコアリングしたり、最適化問題として解いたりして、始めてみるのがオススメです

感謝

ご清聴、ありがとうございました

次回は『自動要約のための言語処理』という内容をまとめようか、とか思ったり思わなかったり

参考:テキスト自動要約

“テキスト自動要約”: 奥村学, 難波英嗣
http://www.amazon.co.jp/dp/4274200426

“自動要約”: Inderjeet Mani, 奥村学, 植田禎子, 難波英嗣
http://www.amazon.co.jp/dp/4320120736/

“Automatic Summarization”: Ani Nenkova, Kathleen McKeown
http://www.nowpublishers.com/articles/foundations-and-trends-in-information-retrieval/INR-015

“文書要約への数理的アプローチ”: 高村大也
NLP2014チュートリアル資料(『NLP2014チュートリアル資料』は著作権の関係で、言語処理学会からの後日入手は不可。先生に直接問い合わせると)

“文章要約入門”:
http://www.slideshare.net/hitoshin/introduction-to-automatic-summarization

“自動要約技術の研究動向”:
http://www.slideshare.net/hitoshin/automatic-summarization

推薦:自然言語処理を始める人へ

言語情報処理ポータル:
http://www.jaist.ac.jp/project/NLP_Portal/

自然言語処理を学ぶ推薦書籍:
http://cl.sd.tmu.ac.jp/prospective/readings

言語処理100本ノック:
http://www.cl.ecei.tohoku.ac.jp/index.php?NLP%20100%20Drill%20Exercises

“Foundations of Statistical Natural Language Processing”
http://www.amazon.co.jp/dp/0262133601/

“言語と計算 (4) 確率的言語モデル”
http://www.amazon.co.jp/dp/4130654047/

自然言語処理シリーズ:
http://www.coronasha.co.jp/np/result.html?ser_id=98

高速文字列解析の世界:
http://www.amazon.co.jp/dp/4000069748/

テキスト要約研究が継続している研究室

東京工業大学 奥村・高村研究室:
http://lr-www.pi.titech.ac.jp/wp/

お茶の水大学 小林研究室:
http://www.koba.is.ocha.ac.jp/wordpress/

横浜国立大学 森研究室:
http://www.forest.eis.ynu.ac.jp/~mori/