Automatically Generating Wikipedia Artciles: A Structure-Aware Approach (Sauper+, 2009)

自然言語処理 自然言語生成 wikipedia 順序学習

repo

Goal

タイトルを入れると完全なWikipedia記事を生成する:

"3-M Syndrome" \(\mapsto\) complete article for Wikipedia

感想

Overview

Content Planning

"Diseases" の content planning の例 (Figure 1):

template = topicの列:

\[\text{[Diagnosis, Causes, Symptoms, Treatment]}\]

生成物

生成物

記事のフレーズでググるとまんまの文章が別なページから引っかかる (拾ってきてる)

生成したい文章に必要な文はネットのどこかにあると仮定する. ただし、

  1. 複数のページに散らばっている
  2. ノイズな文も含まれうる

だから content planning が必要.

Method Overview

  1. 前処理
  2. Selection Model: 原文を選ぶ
  3. 選んだのを組み合わせる

Method::前処理::訓練事例

訓練データとする文章をネットから集める

\[\mathcal{D} = d_1, d_2 ~..~ d_n\] 文章 \(d_i\) は複数段落 \(s\) (<p>) からなり、段落には見出し \(h\) (<h*>) がついてる. \[d_i = \left( h_i^j, s_i^j \right)_{j=1 .. m_i}\]

事前処理::テンプレート学習 (Section 3.1)

見出しの列

というのを template (topic列) だと見なして、 これを学習したい.

事前処理::テンプレート学習 (Section 3.1)

全見出し \(\{ h_i^j | i, j \}\) をクラスタリング \((t_1, t_2 .. t_k .. )\) して、 一つのクラスタ (多重集合) を topic とする.

みたいな列ができる.

  1. この列の長さ\(k\) (平均長) の majority-order を計算して (majority ordering algorithm [Cohen+, 98])、 template とする.
  2. クラスタ \(t_j\) の要素の最頻の見出し \(h\) をクラスタの見だしとして用いる.

事前処理 (誰か読んで)

事前処理::Search: 作ったテンプレート毎に excerpts (抜粋) を拾う (Section 3.1)

トピック \(t_j\) 毎に、できるだけたくさん excerpts を拾う

  1. "記事タイトル (entity) + 見出し \(h\) (\(h \in t\))" で Yahoo! でググる
  2. 上位10ページ採用
  3. 見出しと段落のペアを一つの excerpts として抽出

平均で 6 excerpts/topic 取れた

ここまで

ドメイン (e.g. "Diseases") に対して、 テンプレート \(t_1 ... t_k\). トピックごとに候補となる抜粋

抜粋 を一つずつ選択していくことで、 最終的な記事を生成する. ただし、

  1. coverage and redundancy のバランス
  2. ノイズを上手く避ける必要

Selection Model (Section 3.2.1)

候補 excerpts から一つずつを選択するモデル

推定と学習

推定::Ranking

トピック \(t_j\) に対して、excerpt \(e\) のスコアを \[score(e) = \phi(e) \cdot w_j\] で与える. 候補 \((e_1, e_2, \ldots, e_r)\) を、この score の高い順で並び替える. \[Rank(e_1 ~..~ e_r; w_j) = (e_1 ~..~ e_r)\] (\(e_\ell\)\(\ell\) 番目に良い).

推定::最適化

ランキングで並び替えした後

\[\min \sum_j \sum_\ell \ell \cdot x_{j\ell}\]

インディケータ \(x_{j\ell}\)\(e_{j\ell}\) を選択するとき \(1\)、さもなくば \(0\).

制約 (ちょうど一つだけ選択すること): \[\sum_\ell x_{j\ell} = 1 ~ \forall j\]

推定::最適化::Redundancy Constraints

内容の冗長性をできるだけ取り除く為の制約: \[(x_{j\ell} + x_{j' \ell'}) \cdot sim(e_{j\ell}, e_{j' \ell'}) \leq 1\] を加える.

ここで、 \(sim\) は文章同士の cos 類似度.

推定::最適化::Solving the ILP

\(w_j\) の学習

perceptron ranking algorithm に基づく.

Perceptron Ranking Algorithm [Collins, 02] (蛇足)

The perceptron training for ranking

Update

\(score(x_1, w) < score(x_j, w) (j\ne 1)\) のとき (Else節)、 \[score(x_1, w) - score(x_j, w) = w \cdot (\phi(x_1) - \phi(x_j))\] を大きくすればよい.

voted perceptron (もっと蛇足)

学習の経過で作られた \(w^1, w^2 ~..~ w^n\) を全て用いる.

学習::Ranking Perceptron

テンプレートを作る元文章からゴールドデータ \(s_1, s_2 ~..~ s_k\) を正解として用いる.

  1. Rank with \(w_j \mapsto (e_{j1} ~..~ e_{jr}) ~ \forall j\)
  2. Optimize as a ILP \(x_j = Opt(e_{j1} ~..~ e_{jr}) ~ \forall j\)
  3. If \(sim(s_j, x_j) \geq 0.8\)

評価

  1. ROUGE-1
  2. REACTIONS

データ

Baselines

  1. Search
  2. NoTemplate
  3. Disjoint
  4. Oracle

ROUGE-1 結果 (Table 3)

REACTIONS

15の記事を投稿、5-11ヶ月放置