\section{はじめに}
言語による指示に加えて，その指示内容を示す動作途中の写真があれば，その写真を参考にして調理を行いやすくなる．したがって，各手順に写真が付与された「写真付きレシピ」により作業内容を示すことは有益である．しかし，写真付きレシピを作成するためには，写真を撮影しながら手順を実施し，実施後に各写真に対応する手順を記述する必要があり，作者にとって負担である．本研究の目的は，写真列を入力としてレシピを自動生成することで，写真付きレシピの作成を容易にすることである．この目的を達成するために，本論文では，写真列を入力として与え，システムは各写真ごとに手順を生成する問題として定式化した課題と，この課題を解決する手法を提案する．%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%fig.1\begin{figure}[b]\begin{center}\includegraphics{27-2ia5f1.eps}\end{center}\hangcaption{写真列からのレシピの自動生成．入力が写真列であり（左），出力が複文からなる手順である（右）．手順は写真列の各写真ごとに生成する．}\label{fig:task_overview}\end{figure}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%図\ref{fig:task_overview}に本論文で対象とする課題の概要を示す．入力の写真列の各写真に対し，複数の文からなる手順が対応している．これらの手順全体を本論文ではレシピと呼ぶ．本論文で取り上げる写真列の各写真は手順実施の上で重要な場面で写真を撮影したものであり，手順途中の情報が十分に含まれている．また，各写真に対して1つの手順が対応するため，生成すべき手順数が既知である．システムはこの写真列を受け取り，写真列の各写真に対応する手順を生成し，それらをまとめて写真付きレシピとして出力する．この課題設定は入出力が共通しているという点で，Visualstorytelling\cite{visualstorytelling}に類似している．Visualstorytellingでは，図\ref{fig:task_overview}と同様に写真列を入力としてシステムが各写真に対応する文章を出力する．この課題では写真から説明文を生成するキャプション生成\cite{you2016cvpr,biten2019cvpr}と違い，出力の文章は写真列の時系列を考慮した一貫性があることが要求される．本論文で取り扱う課題はVisualstorytellingと比較して，出力のレシピは読者が読んで実行できるように，簡潔で具体的な記述であることが求められる．つまり，レシピにおける重要な物体や動作である食材，道具，調理者の動作を表す重要語と，それ含む表現が正しく生成されなければならない．例えば，図\ref{fig:task_overview}の工程1においては，「ちくわ」や「切り」が重要語であるが，写真を説明するためには「1/3の大きさに」といった表現も重要語に添えて生成する必要がある．これらをまとめて本論文では重要語を過不足なく含む表現と呼ぶ．これらの重要語を過不足なく含む表現は，手順を記述する上で必要不可欠である．そのため，これらの表現は，手順に付与している写真の内容を大きく反映しているものと言える．この性質をもとに，料理ドメインでは完成写真に適したレシピを得る課題が検索課題として提案され，その解法として完成写真とレシピの間で共有された潜在的な意味に基づく特徴空間を学習する共有潜在空間モデルが高い性能を発揮してきた\cite{im2recipe,R2GAN,chen2016deep}．しかしながら，完成写真とレシピの組ではなく，レシピの実行途中の写真と手順の組での共有潜在空間モデルは未だ提案されていない．この課題を解く場合，MSCOCO\cite{lin2014mscoco}やFlickr30k\cite{young2014tacl}などの一般的なドメインにおける写真とその説明文を対象とする既存の共有潜在空間モデル\cite{wang2017learning}で写真と手順の組を用いて学習しても高い性能を得ることは難しい．これは次の手順で何を記述するか，またその際に特に言及する必要がある前の手順からの差分は何かといった文脈に大きく影響を受けるためであると考えられる．これらを考慮するために，写真に対応する手順だけでなく，レシピ全体を考慮できるように既存の共有潜在空間モデルの手順側のエンコーダに工夫を加える．この工夫によって，このモデルに写真を入力した時，近傍の手順には重要語を過不足なく含む表現の情報が含まれていると期待できる．これにより，各入力写真に対応する共有潜在空間上のベクトルは重要語を過不足なく含む表現が強調されたものとなることが期待できる．提案手法では，このような共有潜在空間を用いて写真の埋め込みベクトルを獲得した後，その空間中での近傍点を利用しながら文生成を行うことで，これらの表現を正しく生成する．本手法を実装し，日本語のレシピを用いて評価実験を行った．その結果，提案した共有潜在空間モデルは既存のモデルと比較して高い検索性能を得られた．また，レシピ生成の点においても，提案手法はBLEU，ROUGE-L，CIDEr-Dといった生成文の自動評価尺度だけでなく，重要語を正しく生成できているかを測定した重要語生成の評価もVisualstorytellingの標準的なベースラインを上回ることを実験的に確認した．そして，提案手法は写真に適した重要語を正しく生成していることを実例により確認した．考察では，提案手法が入力写真列に適したレシピを生成することに成功したケースと失敗したケースを確認した．また，提案手法の重要な要素である，共有潜在空間についてのパラメータや，訓練データ量を変更した時の性能の変化を確認し，提案手法が性能を発揮する上で適当なパラメータやデータ量について検証した．%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{関連研究}
入力と出力がそれぞれ写真列と文章であるという点において，本論文の課題設定はVisualstorytelling\cite{visualstorytelling}と類似している．Visualstorytellingは，写真列を入力としてシステムが各写真に対応する文章を出力するという課題である．この課題では，システムは写真を説明する文章を生成するキャプション生成と異なり，写真列の前後関係を考慮した一貫性のある文章を出力することが求められる．Visualstorytellingの課題に対して，Liuら\cite{liu2017aaai}は写真とテキストの共有潜在空間を学習しながら文生成する手法を提案している．この研究では共有潜在空間と文生成のモデルを同時学習しているのに対し，本研究では学習済みの共有潜在空間中に埋め込まれた手順ベクトルを直接文生成の時に参照している点が異なる．こうすることで，写真に適した重要語を過不足なく含む表現を有する手順ベクトルの情報を明示的に入力へ含めることができ，重要語を過不足なく含む表現を生成しながらレシピを生成することができる．レシピの生成という課題としては，本研究での写真列を入力とする場合も含め，様々な研究がある．Salvadorら\cite{InverseCooking}は完成写真からレシピを生成する手法を提案している．この研究では，材料予測器と文生成器を同時に学習させることによって，完成写真からレシピのタイトル，材料，レシピを全て生成することで，Web上の完成写真から考えられるレシピの候補をユーザに提示するシステムを構築することを目的としている．Kiddonら\cite{checklist}はレシピのタイトルと材料を入力として与え，生成文で材料を利用したかどうかを注意機構\cite{attention}を用いて確認しながらレシピを生成する手法を提案している．しかし，本研究では材料だけでなく調理者の動作や道具も重要語として扱っている点が異なっており，これらを含めることで材料をどう扱うのかという点も考慮している．同じくタイトルと材料からレシピを生成する研究としては，Bosselutら\cite{bosselutDiscourse}の研究が挙げられる．この研究では，参照文と生成文の類似度を報酬とし，強化学習を用いて破綻がないように長文（レシピ）を生成する手法を提案している．概してこれらの研究では，レシピを高い精度で生成することよりも，いかに破綻させずに構造を持つ文書であるレシピを生成するかという点に着目している．そのため，入力に手順途中の情報が不足しており，十分な精度でレシピを生成するまでには至っていない．一方で，Moriら\cite{FlowGraph2Text}は手順の流れを重要語の有向グラフで表現したフローグラフ\cite{flowgraph}を入力としてレシピを生成する手法を提案している．手順途中の情報が与えられていない既存研究と比較し，実用的な精度でレシピを生成することに成功している．フローグラフではなく写真列を中間情報として与えるメリットとして，レシピを得ることが調理者にとって容易である点が挙げられる．フローグラフからレシピを得る場合，フローグラフをアノテーションし用意する必要がある．一方，写真列を入力とする場合は，調理者はレシピを実行する上で重要な写真を撮るだけでレシピを得ることができる．そのため，本研究では手順途中の状態を考慮するために，写真列を入力として与えている．同じく写真列である料理動画（フレーム列）を入力としてレシピを得る研究として，Ushikuら\cite{ushiku2017ijcnlp}の研究がある．この研究と本研究との違いは，扱っている写真列が異なっている点である．Ushikuら\cite{ushiku2017ijcnlp}の研究で入力とする料理動画は，キッチン全体を撮影した未編集の料理映像であり，手順実施の上で直接関係のないフレームや，調理者が待機しているフレームなどが多く含まれるため，生成すべき手順数は未知でかつ重要なフレームを予測しながら文生成を行う必要性がある．そのため，この重要フレームの予測誤差や文生成自体のミスなどの影響により，生成した手順書の精度は実用的な精度には至っていない．一方，本研究で対象とする写真列は，調理者が少なくとも手順実施の上で重要な場面で写真を撮影しており，これらの写真に1つの手順が紐づいているため，生成すべき手順数が既知である．これらの観点から，本論文で入力とする写真列には手順途中の情報が十分に含まれており，こうして撮影された写真に適した手順を生成することで，より高い精度でレシピを生成することが期待できる．本研究と同じく料理ドメインで写真列を入力として取り扱った研究として，Yagciogluら\cite{yagcioglu2018emnlp}のRecipeQAがある．この研究では，コンピュータが写真付きレシピをどの程度理解できるかを測定するためのマルチメディアQAデータセットを提案している．Chanduら\cite{chandu2019acl}は本研究と同じく写真列を入力としてレシピを生成する研究を行っている．この研究では，有限オートマトンモデルを用いて一貫性のあるレシピを生成することに着目したのに対し，本研究では，重要語を過不足なく含む表現が生成できているかという点に着目しレシピを生成している点が異なる．本研究ではレシピを実施する上で重要な単語である食材，道具，調理者の動作を重要語と定義し，これを含む表現を生成する手法を提案する．このように，写真を説明する上で重要な単語を生成することに焦点を当てた研究はキャプション生成の分野において行われている．Bitenら\cite{biten2019cvpr}は，写真からテンプレートを生成したのち，ニュース記事から人名や場所といった固有表現をテンプレートに当てはめて重要な単語を生成する手法を提案している．また，Youら\cite{you2016cvpr}の研究では，写真から重要な単語を多クラス分類などを用いて抽出し，それらの単語に注意機構\cite{attention}を用いながらキャプション生成を行う手法を提案している．本研究ではこの重要な単語を含む表現の生成に学習済みの共有潜在空間を用いている．この共有潜在空間上の各写真のベクトル，各写真に類似した手順には重要語を過不足なく含む表現の情報を含んでいると考えられ，これらを用いることで重要語を過不足なく含む表現を生成する手法を提案する．%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%fig.2\begin{figure}[b]\begin{center}\includegraphics{27-2ia5f2.eps}\end{center}\caption{提案手法の概要．}\label{fig:proposed_method}\end{figure}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{提案手法}
本章では，写真列を入力として，写真列に適した重要語を過不足なく含む表現を持つレシピを生成する手法について説明する．手順を記述する上で，これらの表現は欠かせない要素である．そのため，これらの表現は，手順に付与した写真の内容を大きく反映している．この性質をもとに，本論文では検索課題として取り組まれてきた手法を文生成の手法へ組み込むことで，重要語を過不足なく含む表現を持つ情報を利用しながらレシピを生成する手法を提案する．図\ref{fig:proposed_method}に提案手法の概要を示す．提案手法は以下の4つのプロセスで構成されている．\begin{enumerate}\renewcommand{\labelenumi}{(\roman{enumi})}\itemWeb上に存在する大量の写真と手順の組を用いて共有潜在空間をあらかじめ学習させておく．この時，前後の手順の文脈を考慮するために，共有潜在空間の手順側のエンコーダへbiLSTMを追加し学習する．その後，入力された写真列の各写真ごとに以下の(ii)から(iv)を繰り返して手順を1つずつ生成し，生成した全ての手順をあわせてレシピとして出力する．\item写真に適した重要語を過不足なく含む表現を有する手順ベクトルを得るために，共有潜在空間上における入力写真のベクトルを得た後，そのベクトルをもとに近傍の$K$個の手順ベクトルを検索する．\item検索した$K$個の手順ベクトルを平均したベクトルと写真の埋め込みベクトルを結合し，手順間の時系列を考慮したベクトルをbiLSTMを用いて計算する．\item最後に，写真ごとに手順を出力する．\end{enumerate}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\subsection{共有潜在空間}最初に，(i)の学習を行うために，Wangら\cite{wang2017learning}によって提案されたTwobranchnetworksを利用する．このモデルは，写真側，テキスト側にそれぞれ非線形な活性化関数と2層の多層パーセプトロンからなるニューラルネットワークを用いて，写真，テキストの間で共有された潜在的な意味に基づく特徴空間を学習する．この特徴空間では，写真に対してその写真の内容を記述する手順は近く位置する．そうでない場合，遠く位置することとなる．そのため，このモデルに手順と写真を与えることで，手順と写真の間での類似度を計算することができる．一般のテキストと異なり，レシピ中では，非常に多くの物体名がゼロ照応の形で省略される\cite{Malmaud_Semantics}．Malmaudらが分析対象としたレシピは英語のレシピであるが，本研究で対象とする日本語のレシピの中でも同様の傾向が見られる．例えば，図\ref{fig:task_overview}の工程3において，``きつね色になるまで焼きます''という手順中では，焼く対象である「チーズを挟んだちくわ」が省略されている．これらの省略のため，本研究の予備実験では元のTwobranchnetworksでは高い性能を得ることができなかった．この問題を解決するために，biLSTMを手順側に挿入することで，写真に対応する手順だけではなく，前の手順全体と後の手順全体も考慮することができるように変更を加える．これにより，省略された物体や，代名詞で表現される物体名を前後の手順から情報として加えることができるようになり，性能悪化を防ぐことができるようになる．入力の写真を$\Bdma{x}$，$M$個の手順からなる手順列を$\Bdma{Z}=(\Bdma{z}_1,\Bdma{z}_2,\ldots,\Bdma{z}_m,\ldots,\Bdma{z}_M)$と置き，この変更を以下のように数式を用いて表現する．写真$\Bdma{x}$を畳み込みニューラルネットワーク(CNN)に入力して得られた特徴ベクトルを$\dot{\Bdma{x}}$，各手順中の各単語をあらかじめ訓練データのレシピ全体で学習しておいたword2vec\cite{word2vec}で分散表現に変換し，その平均ベクトルを手順の特徴ベクトル$\dot{\Bdma{z}}_m$とする．Twobranchnetworksの写真側，手順側のニューラルネットワークをそれぞれ$f,g$と置くと，写真，手順の共通潜在空間での埋め込みベクトル$\hat{\Bdma{x}},\hat{\Bdma{z}}$は以下のように表される．\begin{align}\dot{\Bdma{x}}&={\rmCNN}(\Bdma{x})\\\hat{\Bdma{x}}&=f(\dot{\Bdma{x}})\\\ddot{\Bdma{z}}_m&={\rmbiLSTM}_1(\dot{\Bdma{z}}_1,\dot{\Bdma{z}}_2,\ldots,\dot{\Bdma{z}}_m,\ldots,\dot{\Bdma{z}}_M)\\\hat{\Bdma{z}}&=g(\ddot{\Bdma{z}}_m)\end{align}ここで，${\rmCNN(\cdot)}$は図中のCNNに対応し，${\rmbiLSTM}_1(\cdot)$は追加したbiLSTMである図中の${\rmbiLSTM}_1$に対応する．また，$\ddot{\Bdma{z}}_m$はbiLSTM$_1$の$m$番目の出力ベクトルを表す．得られたベクトル$\hat{\Bdma{x}},\hat{\Bdma{z}}$を用いて，Twobranchnetworksの損失関数として提案されている，構造を保ったTripletmarginloss\cite{balntas2016bmvc}を損失関数として最適化するようにbiLSTM$_1$，$f$，$g$，CNNの重みを更新する．この時，word2vecの重みのみ固定して学習する．また，Twobranchnetworksと同様に距離関数として余弦距離を用いた．学習後，以下のレシピ生成においてはこれらの重みを固定して利用する．%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\subsection{レシピ生成}入力の写真列を$\Bdma{V}=(\Bdma{v}_1,\Bdma{v}_2,\ldots,\Bdma{v}_n,\ldots,\Bdma{v}_N)$，出力の手順列を$\Bdma{Y}=(\Bdma{y}_1,\Bdma{y}_2,\ldots,\Bdma{y}_n,\ldots,\Bdma{y}_N)$とする．$n$番目の写真$\Bdma{v}_n$をCNNへ入力して特徴ベクトル$\dot{\Bdma{v}}_n$へ変換し，さらにそれをTwobranchnetworksの写真側のニューラルネットワークに入力する．こうすることで，共有潜在空間上の写真の埋め込みベクトルを得ることができる．共有潜在空間上の写真の埋め込みベクトル$\hat{\Bdma{v}}_n$は対応する手順との距離が近くなるように学習されているため，重要語を過不足なく含む表現の情報を考慮したベクトルを得ることが期待できる．この処理は${\rmCNN}(\cdot),f$を用いて以下のように表される．\begin{align}\dot{\Bdma{v}}_n&={\rmCNN}(\Bdma{v}_n)\\\hat{\Bdma{v}}_n&=f(\dot{\Bdma{v}}_n)\end{align}得られた写真列の各埋め込みベクトルを用いて，(ii)から(iv)の手続きで手順を生成する．以下に，それぞれのプロセスの詳細を述べる．\noindent\textbf{(ii)共有潜在空間上の手順ベクトルの検索}：写真の埋め込みベクトル$\hat{\Bdma{v}}_n$をもとに，その近傍の手順ベクトルを$K$個，共有潜在空間の学習に利用したデータセットから検索する．得られた$K$個のベクトルを，$R=(\Bdma{r}_1,\Bdma{r}_2,\ldots,\Bdma{r}_K)$とする．手順ベクトルの平均ベクトル$\bar{\Bdma{r}}_n$は以下のように計算される．\begin{equation}\bar{\Bdma{r}}_n=\frac{1}{K}\sum_{k=1}^{K}\Bdma{r}_k\end{equation}最後に，得られた手順ベクトルの平均ベクトルと，写真の埋め込みベクトルを結合する．こうして得られるベクトルを，$\Bdma{u}_n=(\hat{\Bdma{v}}_n,\bar{\Bdma{r}}_n)$と書く．\noindent\textbf{(iii)入力の中間表現への変換}：写真列の時系列の情報を考慮するために，(ii)で各写真ごとに得られたベクトル$\Bdma{u}_n$を写真列のエンコーダに入力する．ここで，前の手順だけでなく後ろの手順も考慮するために，エンコーダにはbiLSTMを用いる．\begin{equation}\Bdma{o}_n={\rmbiLSTM}_2(\Bdma{u}_1,\Bdma{u}_2,\ldots,\Bdma{u}_n,\ldots,\Bdma{u}_N)\end{equation}ここで，${\rmbiLSTM}_2(\cdot)$は写真列のエンコーダのbiLSTMである，図中の${\rmbiLSTM}_2$に対応する．\noindent\textbf{(iv)手順の生成}：LSTMをデコーダとして用いる．(iii)で得られた$\Bdma{o}_n$を入力として，手順の開始記号($\langle$step$\rangle$)から終端記号($\langle$/step$\rangle$)が生成されるまで，単語を一つ一つ出力し，手順を生成する．単語を出力する際に，検索した$K$個の手順ベクトルを参照しながら単語を選択するために，Luongらの注意機構\cite{attention}をモデルに組み込む．注意機構を用いることで，各手順ベクトルから必要な情報を参照しながら単語を選択できるため，より重要語を過不足なく含む表現を生成しやすくなると期待できる．手順ベクトル$\Bdma{r}_k$と，デコーダの隠れ層$\Bdma{h}$の間での注意機構の重みを計算するために，Luongらの注意機構の中からgeneralattentionを用いる．手順の$t$番目の単語を出力する時の隠れ層のベクトル$\Bdma{h}_t$と，検索された手順ベクトル$R$から計算される$k$個目の手順ベクトルへの注意機構の重み$a_t^k$，文脈ベクトル$\Bdma{c}_t$，それらから得られる注意ベクトル$\tilde{\Bdma{h}}_t$は，以下のように書くことができる．\begin{align}a_t^k&=\frac{\exp{(\Bdma{r}_k^{\RepMathA{T}}\Bdma{W}_a\Bdma{h}_t)}}{\sum_{j=1}^{K}\exp{(\Bdma{r}_j^{\RepMathA{T}}\Bdma{W}_a\Bdma{h}_t)}}\\\Bdma{c}_t&=\sum_{k=1}^{K}a_t^k\Bdma{r}_k\\\tilde{\Bdma{h}}_t&=\tanh(\Bdma{W}_c(\Bdma{c}_t,\Bdma{h}_t))\end{align}ここで，$\Bdma{W}_a$と$\Bdma{W}_c$は学習によって得られる重み行列である．これらの式より，出力単語の条件付き確率分布$p(y_t|y_{<t},\Bdma{o}_n)$はソフトマックス関数を用いて以下のように書くことができる．\begin{equation}p(y_t^n|y_{<t}^n,\Bdma{o}_n)={\rmsoftmax}(\Bdma{W}_o\tilde{\Bdma{h}}_t+\Bdma{b}_o)\end{equation}ここで，$\Bdma{W}_o$は注意ベクトル$\tilde{\Bdma{h}}_t$を語彙サイズのベクトルへ変換する重み行列であり，$\Bdma{b}_o$はバイアスを表す．推論する際には，条件付き確率分布の中で最も確率が高い単語を語彙から選択し，出力する．また，1つの手順を出力した後，デコーダの最後の隠れ層は次の手順を生成する時の最初の隠れ層として設定される．\\{\bf損失関数の計算：}学習を行うときは，写真列$\Bdma{V}$と手順列$\Bdma{Y}$の対の集合である訓練データ$\mathcal{D}$に対して，以下の負の対数尤度の合計が最小になるように学習を行う．\begin{equation}\Lagr(\Bdma{\theta})=-\sum_{(\Bdma{V},\Bdma{Y})\in\mathcal{D}}\sum_{n=1}^{N}\log{p(\Bdma{y}_n|\Bdma{v}_n;\Bdma{\theta})}\end{equation}ここで，$\Bdma{\theta}$はbiLSTM$_2$，$\Bdma{W}_a$，$\Bdma{W}_c$，$\Bdma{W}_o$，$\Bdma{b}_o$，LSTMの重みを表す．%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{評価}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\subsection{データセット}実験で利用するデータセットは，CookpadImageDataset\cite{harashima}である．CookpadImageDatasetは，Cookpadのユーザによって投稿された日本語のレシピと，レシピの完成写真，また，レシピの各手順に対して付与された写真からなるデータセットである．このデータセットから全ての手順に写真がアップロードされているものだけを対象に抽出した\footnote{CookpadImageDatasetは約310万の写真と手順からなるデータセットである．しかし，手順の中には写真がアップロードされていないものもある．}．その結果，約20万のレシピを得ることができた\footnote{データセットのCookpadImageDatasetとの対応は\url{http://www.ar.media.kyoto-u.ac.jp/member/nishimura/recipe_ids.html}からダウンロードできる．}．得られたレシピを学習:検証:評価に8:1:1で分割し，以下のようにデータセット中の全ての写真，レシピそれぞれに前処理を行い，共有潜在空間とレシピ生成を同じ分割単位で学習し評価した．写真の前処理として，CNNに入力するために写真の縦と横の長さで大きい方が256になるようにアスペクト比を保ったままサイズを変換した後，写真の中央からサイズが224$\times$224になるように切り抜いた．レシピの前処理として，KyTea\cite{neubig2011acl}を用いて単語分割を行った．この分割結果に対し，訓練データで出現頻度数が3回以下の単語は未知語とした．以下のレシピの生成においては，KyTeaによって得られた単語の分割単位で生成を行う．表\ref{tab:statistical_details}にデータセットの統計情報を示す．%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%table1\begin{table}[b]\caption{データセットの統計結果}\label{tab:statistical_details}\input{05table01.tex}\vspace{4pt}\small手順あたりの文数はGiNZA(\protect\url{https://megagonlabs.github.io/ginza/})を用いて分割を行った結果をもとに数えている．なお，文数0は手順が空白のみの場合を表す．\end{table}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\subsection{詳細設定}共有潜在空間への写真側のエンコーダとして，ImageNet\cite{ImageNet}で学習済みのResNet-50\cite{ResNet50}を用いた．ResNet-50の最終層のソフトマックス層を取り除いたため，写真側の出力の次元数は2,048である．共有潜在空間でのテキスト側のエンコーダのbiLSTM$_1$の隠れ層の次元数は1,024としたため，出力の次元数は双方向の出力ベクトルを結合し，2,048次元となる．学習手順はTwobranchnetworksと同じく，バッチサイズは1,500にし，ネガティブサンプリングの際にはミニバッチ内で最も損失関数の値が大きい50サンプルのみから損失関数を計算し，共有潜在空間の学習を行った\cite{wang2017learning}．文生成のモデルでは，隠れ層の次元数をエンコーダとデコーダ共に512に設定した．学習時には，共有潜在空間の重みは固定し，その他の重みはAdam\cite{Adam}を用いて最適化を行った．なお，バッチサイズは64とし，Adamの初期値は$\alpha=0.001,\beta_{1}=0.9,\beta_{2}=0.99$として設定した．毎エポックの終わりに検証用データセットで負の対数尤度を計算し，3エポック連続で負の対数尤度が下がらなかった場合に学習を停止した．また，検索する入力写真の近傍の手順ベクトル数は$K=10$とした．これらのハイパーパラメータは，検証用データセットを用いて決定した．%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\subsection{結果}\label{sec:result}提案手法を評価するために，以下の4点を評価した．\begin{enumerate}\renewcommand{\labelenumi}{(\roman{enumi})}\item{\bf共有潜在空間へのbiLSTM$_1$の影響}：前後の手順を考慮することによる共有潜在空間の性能の変化を検索課題として評価した．\item{\bf生成文の自動評価尺度による評価}：生成したレシピと正解のレシピの単語レベルの一致率をBLEU，ROUGE-L，CIDEr-Dを用いて評価した．\item{\bf重要語の性能評価}：生成したレシピは読者が読んで実行できるよう，前後の手順との差分を考慮しながら写真に沿った重要語を過不足なく含む表現を有する手順を生成しなければならない．そのため，参照文中の重要語をモデルが正しく言及できたかどうかを評価した．\item{\bf定性的評価}：実際に写真列から生成したレシピの一例を示し，提案手法の有用性を確認した．\end{enumerate}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\subsubsection{共有潜在空間へのbiLSTM$_1$の影響}最初に，TwobranchnetworksへbiLSTM$_1$を追加したことによる影響を以下のように評価して確認した．まず，Twobranchnetworksやim2recipe\cite{im2recipe}といった複数の従来手法が慣例的に評価データの数を1,000程度としているため，これに習う形で，ランダムにテストセットから1,000個の写真と対応する手順のペアを取り出した．次に，写真を入力とした時には，手順集合を余弦類似度の降順にソートし，写真のペアとなる手順が現れる順位の中央値(MedR)と，写真のペアとなる手順が上位{\itk}番目以内に現れる割合(Recall@{\itk})を計算した．なお，手順を入力にした際にも，同様の基準で評価した．この結果を表\ref{tab:impact_on_biLSTM}に示す．この結果から，biLSTM$_1$がないオリジナルのTwobranchnetworksに比べ，大きく性能が向上していることがわかる．よって，biLSTM$_1$を追加したことによってモデルが手順間の文脈を参照することができるようになったため，性能を改善することができたと考えられる．%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%table2\begin{table}[b]\caption{TwobranchnetworksへbiLSTM$_1$を追加したときの共有潜在空間の検索性能の変化}\label{tab:impact_on_biLSTM}\input{05table02.tex}\end{table}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%table3\begin{table}[b]\caption{自動評価尺度による生成したレシピの評価結果}\label{tab:quantitative_results}\input{05table03.tex}\\[4pt]\small実験では，$K=10$として設定した．\end{table}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\subsubsection{定量的評価}提案手法を評価するために，評価データの全てのレシピを用いて文生成の自動評価尺度であるBLEU1，BLEU4，ROUGE-L，CIDEr-Dを評価した．この時，生成したレシピと正解のレシピの間で手順同士で評価したのではなく，レシピ同士で評価した．また，評価に用いる単語の分割単位はKyTeaで処理して得られた単語の分割単位で評価した．検索課題として取り組まれてきた手法を文生成の手法に組み込んだことによる性能の変化を見るため，Visualstorytelling\cite{visualstorytelling}で挙げられている，写真列をエンコーダのbiLSTMへ入力し，デコーダのLSTMで出力するニューラルネットワークをベースラインとした．加えて，レシピに付与した材料やタイトルの各単語をword2vec\cite{word2vec}を用いて分散表現に変換し，その平均ベクトルを写真列のResNet-50の出力ベクトルと結合し，エンコーダへの入力に加えたベースラインも用意した（表\ref{tab:quantitative_results}中の「写真列+タイトル」および「写真列+タイトル+材料」）．なお，表\ref{tab:quantitative_results}中の提案手法の「写真の埋め込みベクトル」とベースラインの「写真列」の違いは共有潜在空間を利用するか否かが異なる．前者では，共有潜在空間中の写真のベクトルを用いているのに対し，後者ではResNet-50の出力ベクトルをそのまま利用している．また，提案手法においてはモデルが入力写真をもとに手順ベクトルの検索を行うが，この検索先となる手順ベクトルは訓練データのものとした．表\ref{tab:quantitative_results}に評価結果を示す．この結果により，提案手法が全ての指標でベースラインと比較して性能が向上したことを確認した．%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\subsubsection{重要語生成の性能評価}前節で測定したBLEU，ROUGE-L，CIDEr-Dのような自動評価尺度に加えて，正解のレシピの重要語が，生成したレシピ中に正確に現れる割合を評価し，提案手法が写真に適した重要語を生成しているかどうかを評価した．この時，正解のレシピを比較対象としている．レシピにおいて物体名を省略することが頻繁に行われる理由として，手順の説明においては，前の状態からの差分にしか言及しないためであると考えられ，同様の理由から，前の状態との差分として言及すべき重要語が決定する．そのため，実際のレシピで言及されている重要語は状態の差分を反映しており，これが過不足なく言及されているかどうかを通して，レシピ文としての質を評価できる．料理ドメインにおいては，レシピフローグラフコーパス\cite{flowgraph}によると，食材(F)，道具(T)，調理者の動作(Ac)の3つがレシピ中に統計的に多く出現することが確認されている．よって，これらのカテゴリに属す単語を重要語とし，生成したレシピと正解のレシピに現れる重要語リストから以下のように計算される適合率，再現率，F値を測定することで，重要語生成の性能を評価した．\begin{align}再現率&=\frac{正解の重要語数}{参照文中のレシピに現れる重要語数}\\適合率&=\frac{正解の重要語数}{生成したレシピに現れる重要語数}\\F値&=\left(\frac{再現率^{-1}+適合率^{-1}}{2}\right)^{-1}\end{align}しかしながら，この評価は同義語や表記揺れの問題から，自動的に計算することができない．そのため，レシピを50個ランダムで評価データから抽出し，手動で同義語と表記揺れのみを修正し，笹田らの研究で定義されている基準\cite{sasada2015nlp}を参考に単語中からF，T，Acに限ってタグを割り当て，重要語生成の性能を評価した\footnote{重要語のアノテーションの結果，アノテーションした重要語の数は合計でそれぞれFは288，Tは85，Acは347得られた．これらのアノテーション結果は\url{http://www.ar.media.kyoto-u.ac.jp/member/nishimura/annotation.html}からダウンロードできる．}．表\ref{tab:ingredient_use}にその結果を示す．なお，表中のベースラインは表\ref{tab:quantitative_results}中の「写真列+タイトル+材料」を，Top1は提案手法の項目の，biLSTM$_1$(あり)の「写真への埋め込みベクトル+Top1の手順ベクトル」を，Top$K$は，提案手法の項目の，biLSTM$_1$(あり)の「写真への埋め込みベクトル+Top$K$の手順ベクトル」を表す．また，検索する手順ベクトル数$K$は10である．この表より，Top1の手法は明確にベースラインの結果を上回り，またTop$K$はさらにそのTop1を上回るという結果となった．よって，提案手法が重要語を正しく生成しながらレシピを生成していると言える．%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%table4\begin{table}[t]\caption{重要語生成の性能評価}\label{tab:ingredient_use}\input{05table04.tex}\par\vspace{4pt}\small表中のベースラインは，表\ref{tab:quantitative_results}中の「写真列＋タイトル＋材料」を示す．\end{center}\end{table}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\subsubsection{定性的評価}図\ref{fig:quantative_results}に入力の写真列と，ベースライン，提案手法によって生成されたレシピ，そして正解のレシピを載せる．この図より，ベースラインは写真に適したレシピを生成することに失敗している一方で，提案手法は写真に適した重要語を過不足なく含む表現を生成しているということが分かる．%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%fig.3\begin{figure}[t]\begin{center}\includegraphics{27-2ia5f3.eps}\end{center}\hangcaption{レシピの生成例．太字かつ二重線で書かれた箇所は正しく重要語が生成された箇所であり，下線部付きで書かれた箇所は重要語生成に失敗した箇所である．また，重要語のタグの種類（F（食材），T（道具），Ac（調理者の動作））を左下に付与した．}\label{fig:quantative_results}\end{figure}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\subsection{考察}次に，提案手法によって生成されたレシピと，正解のレシピを見比べることによって提案手法が手順を生成することに成功したケースと，生成に失敗したケースをそれぞれ取り上げ，提案手法の長所と短所を定性的に考察を行う．また，提案手法の性能に関わる重要な要素である，共有潜在空間へ検索する手順ベクトルの数$K$や，訓練データ量を変更することによる性能の変化を確認し，提案手法を実現するために必要な手順ベクトル数や訓練データ量を検証する．%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\subsubsection{重要語を過不足なく含む表現の生成に成功したケース}注意機構を用いることで，モデルは各単語を出力するときに共有潜在空間から検索した$K$個の手順ベクトルの中から，どの手順を参照して単語を選択するのかを各手順ベクトルに重みを付けて表現することができる．図\ref{fig:good_case}に重要語を過不足なく含む表現の生成に成功した手順，$K$個の入力写真の近傍手順ベクトル，注意機構による手順ベクトルへの重みを可視化したものを示す．提案手法によって重要語を過不足なく含む表現の生成に成功するケースでは，重要語である「たまねぎ(F)」や，「切り(Ac)」，加えて切り方を示す「みじん」と言った重要語を過不足なく含む表現を有する手順ベクトルに対して高い重みが割り当てられている．一方で，検索した手順ベクトル中の，重要語を過不足なく含む表現を生成する上で不要である手順については，低い重みが割り当てられていることが分かる．このことから，注意機構を導入したことによって，モデルは手順ベクトル中から必要な情報を参照しながら重要語を過不足なく含む表現を生成していることが分かる．%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%fig.4\begin{figure}[t]\begin{center}\includegraphics{27-2ia5f4.eps}\end{center}\hangcaption{提案手法が重要語を過不足なく含む表現の生成に成功したケース．重要語である「玉ねぎ(F)」や「切り(Ac)」が現れる手順（図中の手順7，手順10）に高い重みが割り当てられ生成されている．}\label{fig:good_case}\end{figure}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\subsubsection{重要語を過不足なく含む表現の生成に失敗したケース}図\ref{fig:quantative_results}の結果にもあるように，正しく手順を生成できなかったケースも存在する．図\ref{fig:bad_case}に示すような例では，入力した写真で検索して得られた近傍の手順ベクトルに含まれる重要語は「薄揚げ(F)」ではなく，「パン(F)」として得られてしまったため，重要語を過不足なく含む表現を生成することができなかった．このように，入力した写真に近傍の手順ベクトル中に重要語を過不足なく含む表現が存在しない場合は，モデルが手順を正しく生成することは難しいと考えられる．%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%fig.5\begin{figure}[t]\begin{center}\includegraphics{27-2ia5f5.eps}\end{center}\hangcaption{提案手法が重要語を過不足なく含む表現の生成に失敗したケース．入力画像で検索した時に得られた手順ベクトルが「食パン(F)」と得られ，正しく「薄揚げ(F)」を得られなかった．}\label{fig:bad_case}\end{figure}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%table5\begin{table}[t]\caption{検索した手順ベクトル数$K$を変化させた時の自動評価尺度の結果}\label{tab:k_transition}\input{05table05.tex}\end{table}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\subsubsection{検索手順ベクトル数$K$を変更した時の性能の変化}検索する手順ベクトル数$K$を変更して学習し，評価することによって，必要な手順ベクトル数$K$を考察する．表\ref{tab:k_transition}に検索手順ベクトル数$K$を変更した時の，生成文の自動評価尺度の変化を示す．なお，表中の$K>1$の場合は注意機構がモデルに組み込まれているが，$K=1$の場合，注意機構はモデルに組み込まれていない．この実験の結果，$K=25$の場合にBLEU1，BLEU4，ROUGE-Lで最も高い性能を示し，$K=10$の場合にCIDEr-Dで最も高い性能を示した．注意機構がモデルに組み込まれている時，$K$が5から25までの間は，$K$を大きくするにつれて性能が全体的に上昇する傾向にあることが分かる．一方で，$K$が25を超えた$K=50，K=100$のモデルにおいては，$K=25$のモデルと比べて低い性能を示している．このことから，$K$の数を小さく設定すると，写真に適した重要語を過不足なく含む表現を有する手順ベクトルの検索に失敗し，性能が低くなるが，一方で，$K$の数を大きく設定すると，写真に適した重要語を過不足なく含む表現を有する手順ベクトルの他に写真に適さない手順ベクトルも手順生成に用いることとなる．そのため，モデルの性能が低下したものと考えられる．%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%fig.6\begin{figure}[b]\begin{center}\includegraphics{27-2ia5f6.eps}\end{center}\caption{訓練データ量を変更した時の性能の変化．}\label{fig:transiton_of_training_size}\end{figure}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\subsubsection{訓練データ量を変更した時の性能の変化}モデルが入力写真をもとに手順ベクトルを検索する時，訓練データの中から検索を行う．そのため，学習に利用した訓練データ量は，モデルの性能を決める重要な要素であると言える．よって以下では訓練データ量を変更して学習し評価することによって，モデルが性能を発揮する上で必要なデータ量を考察する．図\ref{fig:transiton_of_training_size}に，訓練データ量を20\%，40\%，60\%，80\%，100\%の割合で変更した時の，生成文の自動評価尺度の変化を示す．また，この実験においては検索する手順ベクトル数$K=10$として実験を行った．この実験の結果，以下の点が明らかになった．\begin{enumerate}\renewcommand{\labelenumi}{(\roman{enumi})}\itemBLEU4においては，ほぼ横ばいであるが訓練データ量の割合が20\%から80\%にかけて上昇し，100\%で80\%の結果と横ばいとなった．\itemBLEU1，ROUGE-L，CIDEr-Dにおいては，訓練データ量の割合が80\%の時にBLEU1，ROUGE-Lが最も高い性能を示した．また，CIDEr-Dに関しては40\%の時に最も高い性能を示した．\end{enumerate}以上の結果より，80\%の訓練データ量で学習した時，BLEU1，BLEU4，ROUGE-Lで最も高い性能を示した．CIDEr-Dにおいては40\%の時に最も高い性能を示したが，80\%の時との差は0.2ポイント(80\%:20.5，40\%:20.7)であり，差は小さい．よって，全体のデータ量の内80\%以上の訓練データ量を用いることで提案手法の性能を発揮することができると考えられる．%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{まとめ}
本論文では，写真付きレシピの作成を支援するために，写真列からレシピを生成する課題を提案する．この課題では，生成したレシピは読者が読んで実行できるように重要語を過不足なく含む表現を正しく言及されていなければならない．これを達成するために，本論文では共有潜在空間モデルを文生成モデルに組み合わせる手法を提案する．従来の共有潜在空間モデルは一般的なドメインにおける写真と説明文を対象としていた．しかし，レシピにおいて，前後の手順の文脈に応じて言及すべき語が決まるため，前後の手順を考慮せずに写真と手順を1:1で学習する既存手法では高い性能を発揮できなかった．これを解決するために，前後の手順を考慮できるように既存の共有潜在空間モデルへ工夫を加える．こうして得られたモデルに写真を入力した時，近傍の手順は重要語を過不足なく含む表現の情報を有すると期待でき，また各入力写真に対応する共有潜在空間上の埋め込みベクトルは重要語を過不足なく含む表現が強調されたものとなることが期待できる．よって，この写真の埋め込みベクトルと，その空間中での近傍点を利用しながら文生成を行うことで，重要語を過不足なく含む表現を生成する手法を提案する．本手法を実装し，日本語のレシピを対象に評価実験を行った．その結果，提案した共有潜在空間モデルは既存のモデルと比較して高い検索性能を得られた．また，レシピ生成の点においても，提案手法はBLEU，ROUGE-L，CIDEr-Dといった生成文の自動評価尺度だけでなく，重要語を正しく生成できているかを測定した重要語生成の評価もVisualstorytellingの標準的なベースラインを上回ることを実験的に確認した．そして，提案手法は写真に適した重要語を過不足なく含む表現を正しく生成していることを実例により確認した．考察では，重要語生成に成功したケースと失敗したケースを見比べることで，提案手法の長所と短所を明らかにした．さらに，提案手法が性能を発揮する上で必要な要素である，検索する手順ベクトル数$K$や訓練データ量を変更した時の性能の変化を示し，必要な手順ベクトル数や訓練データ量を検証した．以上の実験と考察の結果，本論文の提案手法を用いて写真列に適したレシピを得ることができていることを実験的に示した．%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\acknowledgment本研究はクックパッド株式会社の協力の下に行われたものである．よってここに感謝の意を表する．本論文の内容の一部は，The12thInternationalConferenceonNaturalLanguageGeneration(INLG19)で発表したものである\cite{nishimura2019inlg}．%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\bibliographystyle{jnlpbbl_1.5}\bibliography{05refs}%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\begin{biography}\bioauthor{西村太一}{2019年九州大学芸術工学部卒業．京都大学大学院情報学研究科修士課程在籍中．マルチメディア，自然言語処理の研究を手掛ける．2019年The11thWorkshoponMultimediaforCookingandEatingActivitiesにて，BestPaperAwardを受賞．}\bioauthor{橋本敦史}{2005年京都大学工学部情報学科卒業．2006年経産省VulcanusinEuropeプログラム国費奨学生．2013年京大大学院情報学研究科にて博士（情報学）取得．現在オムロンサイニックエックス株式会社研究員．主に，料理や組立作業を対象として，未来予測に基づく人と機械のインタラクションに関する研究などに従事．IEEE,IEICE,IPSJ各会員．}\bioauthor{森信介}{1993年京都大学工学部電気工学第二学科卒業，1995年京都大学大学院工学研究科電気工学第二専攻修士課程修了，1998年京都大学大学院工学研究科電子通信工学専攻博士後期課程修了．同年日本アイ・ビー・エム株式会社入社．2007年より京都大学学術情報メディアセンター准教授．2016年同教授．現在に至る．計算言語学ならびに自然言語処理の研究に従事．工学博士．1997年情報処理学会山下記念研究賞受賞．2010年，2013年情報処理学会論文賞受賞．2010年第58回電気科学技術奨励賞．言語処理学会，情報処理学会，日本データベース学会各会員．}\end{biography}\biodate\end{document}