Learning to Generate Posters of Scientific Papers

基本情報 #

著者Yuting Qiang, Yanwei Fu, Yanwen Guo, Zhi-Hua Zhou, Leonid Sigal
科学論文のポスターの自動生成
発表年2016

中身 #

Introduction #

論文をポスターにするのは非常に重要なまとめ操作。だが、デザインは詳しくない人にとっては大変なこと。 この研究やるのに以下の問題があった。

  1. 論文内容をどう抽出するか
  2. ポスターのレイアウトをどうするか
  3. 図や表をレイアウトに従いどう配置するか。

この論文では、data-drivenな自動生成手法を作ってみた。鍵は上の3点からして「内容の抽出とレイアウト構成」。

内容の抽出は、TextRankを使ったよ。(筆者注 2019年時点ではGoogleのRAKEのほうがいいと思う)。となるとキモはレイアウト構成。

レイアウト構成は、次の3ステップで作っている。

  1. 簡単な確率的グラフィカルモデルを作り、それでパネルの属性を推論する。
  2. パネルを表す木構造を導入する(設計した再帰的なアルゴリズムで使うため)
  3. 木構造とアルゴリズムから、別の確率的グラフィカルモデルを作り、実際にポスターにデザインを落とし込む。

確率的グラフィカルモデル #

関連研究 #

General Graphic Design #

  • テキストベースのレイアウトは、2003年にJacobらが研究した。
  • 1ページでの画像的なレイアウト
  • アルバムでのレイアウト
  • インターフェースのデザイン

問題の定式化 #

  • ポスターの集合$M$がある。
  • 各ポスター$m \in M$には、パネル$\mathbf{P}_m$がある。(論文発表のパネルは、入れ子構造みたいなやつ)
  • 各$p \in \mathbf{P}_m$には、graphical elementの$\mathbf{G}_p$が存在してる。これは表や図などにあたる。
  • 各$p \in \mathbf{P}_m$には、以下の要素もある。
    • テキストの長さ$l_p$。
    • 全てのテキストのうち、このパネルでのテキストの割合$t_p$
    • 全ての画像のうち、このパネルでの画像の割合$g_p$
    • パネルのサイズ(積)$s_p$と、アスペクト比$r_p$
  • 各$\mathbf{G}_p$には、以下の要素がある。
    • 画像のサイズ(積)$s_g$と、アスペクト比$r_g$
    • 横軸でいうとどこにあたるのか、left, center, rightの3つ。Texで作る時にこれらを指定するので。$h_g$
    • パネルの横幅に対して、画像の横幅の比$u_g$

↑の各要素を、各$p$ごとに決めて、$\mathbf{G}_p$をも生成するのが仕事。

学習データの$t_p, g_p, l_p, r_g, s_g$から、他を予測するモデルならいいと思うが、それでは$s_p$と$u_g$のような、パネルのサイズと画像の横幅比みたいな関係ありそうなパラメタの関係は見れなくなる。画像はある程度ないと小さくて見づらいから、パネルのサイズ関係なくあまり変わらない、みたいな。

ユーザーのやること #

textRankでキーワードを抽出して、図や画像はユーザーが手動で入れるだけ。

どう実装したか #

パネルのパラメタの推定 #

パネルサイズ$s_p$と、アスペクト比$r_p$は、テキストの割合$t_p$と画像の割合$g_p$に依存する、という仮説でこの研究は考える。

$$ P(s_p, r_p | t_p, g_p) = \Pi _ {p \in P} P(s_p | t_p, g_p) P(r_p | t_p, g_p) $$

こんな風に分解できる$s_p, r_p$はこの条件の下では独立と仮定する

そして、右辺はそれぞれ、線形ガウス分布に従うと仮定。

$$ P(s_p | t_p, g_p) = N(s_p; \mathbf{w_s} \cdot (t_p, g_p, 1)^{T}, \rho_s) $$ $$ P(r_p | t_p, g_p) = N(r_p; \mathbf{w_r} \cdot (t_p, g_p, 1)^{T}, \rho_r) $$

$\mathbf{w_s}, \mathbf{w_r}, \rho_s, \rho_r$は訓練データから最尤推定で得られる。

パネルの配置の生成 #

従来はただ二、三列に配置するだけのつまらないものだった。この研究では、木構造をまず作る。

Root(「横」を,「0.25:0.75」に分割して, 謎の数字)
こうやって2つに分割して、新たに出来た領域に対して

1. 終端でこれ以上もう分割はしない。
2. またRoot()をつなげて分割する。

ここで、レイアウトをするときに、可能な限り各パネルのアスペクト比$r_p$を崩したくない、と考える。(この論文の仮定はそうやってる)。

$$ Loss(L, L’) = \Sigma_{i=1}^{k} |r_{p_i} - r_{p_i}^{’}| $$

こんな風に、Loss()を定義する。「’」の記号があるものは、レイアウトの変更後を指す。

アルゴリズムとしては以下のようにする。どうやら、パネルの配置する順番自体を変更はしないようだ。

ページのサイズと、各パネルを(ページサイズs_p, アスペクト比r_p)2つの値で持つ。

//なんかよくわからん

if(pagenumber == 1){
    ただ置くだけでいい。
}
else {
    //[i, k - 1]
    for(int i = 1; i <= k - 1; i++){
        double t = 1番目からi番目までのパネルサイズの和が占める、全てのパネルサイズの和に対する割合;
        double loss1 = PanelArrangement(i);
    }
}