自然言語処理の研究に悩む

背景

  • 自然言語処理分野の博士課程の学生です。何もわからないのが得意
  • 研究テーマないし進め方に悩んでいます。その考えごとを書きます
  • 何もわからん

ここに何を書きたいか

 研究が進められていない気がする。論文が書けない気がする。何も考えていないわけではないと思うが、自分の研究をどのように進めればよいのか混乱している。自分の目的・条件・研究分野の性質等を整理して、手がかりを得たい。という感じです。本当は(訓練のためにも)英語で書くべきですが、やはり日本語で考えたほうが脳内の通りがよいので(たとえばこういう表現自体を英語にできない)このまま日本語で書きます。

個人的な目的・目標

  • 自然言語処理や計算言語学(以下 NLP/CL)と呼ばれるものの定義は様々ですが、個人的には「人間がどのように言語を獲得・理解・産出(以下まとめて処理とします)するのかを計算可能な仕方でモデル化し、言語資源・知識資源・視覚や音声など利用可能な情報の分析・学習を通して検証する」という雰囲気で位置づけています。よくある「人工知能っぽい意味で言語が処理できるエージェントを作るのであれば、人間の模倣は必要条件ではない」という指摘には同意しますが、人間が扱う言語についてあれこれさせるためには何らかの形で人間に漸近するような機能が備わっているべきだとは考えています。このあたりは個人の嗜好だと思うので、「どちらかと言えば機械より人間に興味がある」くらいに考えていただければと。
  • 上記の背景のもとで、とくに言語理解に興味があります。
  • やったことを博士論文くらいの単位の成果にまとめなければなりません。その後の生存戦略を考えると、できれば目立った業績が伴うことが望ましいです(しかし意識しすぎると頭が回らなくなるのであまり考えないようにする)。

研究のスタイル

 上に書いた NLP/CL の個人的定義から、どのような研究の単位があり得るかを考えてみます。研究全体の流れを整理しましょう。研究はそこで提示された内容がどれくらい妥当か吟味される必要があります(本当か?)。したがって上記定義にしたがえば、「何らかの言語を処理するモデルを作り、そのモデルを何らかのタスクに基づいて評価して信用してもらう」のがおそらく「みんなでやっていること」になります。

 これも個人的な区別ですが、「モデル」と「タスク」の2つが NLP/CL の研究では中心的な構成要素になると考えています。モデルを作ったりタスクを作ったり、モデルの改善をしたりタスクの改善をしたり、が研究の単位になります。ということで大きく2つにスタイルを分けると次のようになりそうです。

  1. 言語を処理するモデルを作り、何らかのタスクで評価する。
  2. モデルを評価するためのタスクを定義する。

 順にどのような細分化がなされるかを書いていきます。まず 1. について。上では、獲得・理解・産出を処理と呼んでいました。もちろんこの区別は厳密ではありません。人間は言語をどのように処理するでしょうか。全体としての(認知神経科学的な)流れはよくわかりませんが、「少なくとも振る舞いとしてこういうのはできるだろう」というのがあります。これには複数のレイヤーが考えられます。もっとも基礎的なものには形態素解析構文解析、意味役割の認識などが含まれそうです。もっとも応用的なものには翻訳や対話が含まれるでしょう。以上のようにNLP/CL の研究では言語処理の部分的な振る舞いをモデル化します。たぶん。モデル化のためには「内部的にどうなっていてそのように振る舞っているか」に関する何らかの仮説を立てます。「こうすれば上手く振る舞ってくれるだろう」という仮説です。実際に上手くいったのであれば、評価に用いたデータセットの範囲内でその仮説が(その上手くいった程度に応じて)妥当なものだと見なされます。

 2. についてです。タスクの意義は、モデルの振る舞いを評価して何らかの仮説の妥当性を裏付けることにあります。しかし重要なのは、仮説の妥当性がその「評価に用いたタスク」の範囲内でしか裏付けられないという点です。あるタスクで良い振る舞いをしたからといって、別の同種のタスクでも良い振る舞いができないのであればその有用性は限定的になってしまいます。したがって、あるタスクで用いるデータやその評価方法は同種の課題に対してなるべく汎用的であるほうがよいですし、モデルの評価はなるべく多種のデータに対して行われたほうがよいでしょう(ここには「理論は広く有用であるべき」という規範が入っていますが、学術的価値や技術的価値にとっておそらく必要なことだと思います)。また、ある振る舞い(だいたいは言語的な出力)をどのように観察すれば妥当な評価が行えるのかは簡単でない場合があります。たとえば機械翻訳の結果を評価するのは難しいですね。対話システムも特に雑談の場合はしんどいという話を聞きます。タスクのデザインはモデルの設計と同等かそれ以上に難しいと個人的には思います。

 以上の両者をバランスよくやっていくのが研究分野全体として必要だと思います(参考: ベンチマークの功罪 – CTRL+x CTRL+s )。

言語理解の研究について

 自分の興味は言語理解とかそのあたりにあります。言語理解と端的に言っても定義は非常に難しいです。まずその定義には正解がなく、人によって「〜だったら言語が理解できてると言える」の「〜」に入るものが違ったりします。話を進めるために、何か暫定的なものを決めましょう。一説には「ある言語入力に対してその言語が使われている共同体の規範や慣習に沿った振る舞いができること」という定義があり、これを採用してみます(ここで規範や慣習と書いたのは人間の言語に話を限定しているからですが、他の動物がやりとりする記号や表象も含めて定義したいね、という話は案の定ですがミリカン『意味と目的の世界』などを読んでください)。さて、そこでは「言語を理解しているときの適切な振る舞い」というのをどうやって(なるべく一般的な社会規範として)決めていくかが問題となります。

 人間について考えてみます。まず言語を行使する能力がそもそもあるかどうか、という点で見ると失語症のテストが考えられます("aphasia test" あたりで検索するとそれっぽいのが出てきます)。また「言語を理解する能力」の段階的な評価として、教育的な観点からの調査が考えられます。たとえば OECD の教育部門は PISA (The Programme for International Student Assessment) と呼ばれる調査を行っており、読解力・数学的知識・科学的知識という分類を作っています。ここで言う読解力というのは単なる文章を読む能力から、文字を含んだ図表の理解まで対象にしています(詳しい解説はたとえば 平成23年度 追加分析報告書:文部科学省東北大学の成果報告書1の pp.26-32 など)。

 機械についてはどうでしょう。まず思い出されるのはチューリングテストです。しかし「対話」だと実はそれっぽい鸚鵡返しや相づち、話題転換で誤魔化せてしまうという指摘があります(ELIZA はその一例かもしれません)。このあたりは Levesque さんの On Our Best Behaviour [paper] [slide] という2013年の IJCAI の発表(と翌年の論文)で議論されており、振る舞いとして誤魔化しのきかない形式を考えるべきだと指摘しています。次いで彼は「選択式のクイズでいいのでは?」(意訳)とみたいなことを言っており、最終的に提案されているのが Winograd Schema Challenge でした。これは background knowledge を問うタスクですが、問題数も少ないのであまり流行ってはいない気がします(でも難しいです)。

 さて最近の界隈では、質問応答のひとつの延長として読解タスク(machine reading comprehension)というのが流行っている気がします。端的に言えば文章題です。これを「言語理解の能力を振る舞いから評価する」ためのひとつの枠組みだと考えて、そのためのモデルやタスクの構築について考えてみます。先に引いた人間の読解力の調査として使われている手段に近しいのと、 Levesque さんの言う「対話ではなく選択式のクイズでも十分に振る舞いが評価できる」という話に乗っかってみる感じです。

読解の研究をどうする?

 先程と同じようにモデル・タスクに分けて考えてみます。まず読解をするモデルについて。人間の読解のモデルについての研究は、たとえば心理学では Kintsch さんによる Construction and Integration Model があります(1980年代後半くらい)。これを基礎にしていくつかモデルが出ていますが、あくまで理論的な話で、あまり「実際に作る」という話には至っておらず、(そりゃそうですが)こうした理論的な仮説を心理学的な実験で検証するというのが彼らのやり方です。そのモデルにおける個々のコンポーネントやその関わりがどうなっているかを神経科学的に見ようとすると一気に難しくなり、知識(というか記憶)がどこから湧いてくるか、読んだものが逐次的にどのように処理されるか、など諸々の振る舞いに対する仮説を解剖学的な部位や時間的位置を特定したりしながら検証していきます。これを計算論的に仮説を立てて再現して処理できるかどうかやってみればよいのでは? という感じになりますが、ハードルがあまりにも多くて心の底からよくわかりません。一方で読解のタスクに対して提案されている NLP/CL の側のモデルは、たとえば [1611.01603] Bidirectional Attention Flow for Machine Comprehension[1711.04289] Natural Language Inference with External Knowledge のような(図を見てみてください)それっぽい気もするようなしないような構造をしています。人間についてのモデルとの大きな差異のひとつは読解における知識の保持・利用の仕方だと思いますが、知識がちゃんと必要になるようなタスクが少ないのでしっかりとした正答率が出せている印象です。そうです、一部のデータセットではけっこう人間に肉薄した性能が出ちゃったりしています。うーんでもじゃあこれで人間っぽい読解力が持てるようになったのか、と聞かれると全く肯定できません。どうしてでしょう。

 どうして納得できないのか。流行りのタスクが悪い気がします。上で述べた表現を使えば、「同種の課題に対する汎用性が全然なさそう」だと感じます。あるいは「問題が簡単すぎる」気もします。しかしそれをきっちり浮かび上がらせて定量的に示すのはなかなか難しいです(自分のこれまでの研究はここを何とかしようとする試みでした)。Levesque さんは同じ議論の中で、選択式のクイズが適切に振る舞いを評価するに足るための要件を挙げています。「Google-proof (検索が無効)であること」「典型的なパターンマッチでは解けないこと」「語順や文法などにバイアスが含まれていないこと」の3つです。うーん本当にそうだなあという感じです。いまデータセットとして流行っている The Stanford Question Answering Dataset (SQuAD) について Goldberg さんが「ちょっと凝ったパターンマッチじゃん」と言っていたのが記憶に新しいです(スライド)。つまり流行りのタスクは、単なるパターンマッチ+バイアスの発見で解けるような問題じゃないかな、という気がするわけです(そしてモデルはまさにそうした情報を掴むための構造になっています)。

タスクを作る?

 モデルの方は本当によくわからない・理想的なものを考えても評価する手段がないので、タスクをより改善していったほうがよいかもしれません。Levesque さんの挙げた要件を守りつつ、難易度が高そうな問いがたくさん作れるのがよさそうです。でもそれってどうするの?? というのが現在時点での悩みです(やっとここまで説明できました……長くてすみません)。質のよいクイズを作るというのはなかなかに骨の折れる作業です。人間が解く試験問題を作るのが大変なのと同じだと思います。しかもそれがなるべくたくさん欲しいわけです(最近は大規模なデータセットでないと注目してもらえないのがよくない風潮だと思います。もちろん少なければ少ないほどバイアスが発見しやすかったりするのかもしれませんが(本当か?))。どうすればいいんだろう、何を調べる・考えるべきか……。というところで詰まっています。

 もちろん既存のタスクが何もかもダメという感じでもなく、2017年のEMNLP で発表された RACE のような人間の試験問題そのままのデータセットもあったりします。これをしっかり解けるようなモデルを考えるのも面白そうです。また、 SNLIMulti NLI のような比較的大きな含意関係認識のデータセットも出てきました。ただこれらの含意関係認識のデータセットはベースラインが高く、すでに state of the art も9割近い精度が出てるので、今から取り組むべきかというと微妙な気もします。精度で勝っても有意な差にならないでしょうし、そもそも人間の精度が9割くらいだったりするとあとの1割は一体何なんだという感じになります(エラーなのか真に難しいのかがわからない)。じゃあやっぱりタスク作りをすべきでしょうか。しかしどうやって問いを立てるのでしょう。

 あとは「読解や含意関係認識のデータセットで学習する」と言ったときにモデルが一体何を学習しているのかというのが気になります。他のタスクに応用可能な知識を得ているのでしょうか。それとも、似たような問題形式でのみ使えるマッチングやバイアスの発見の仕方を学習しているのでしょうか。ここまで書くと批判したいだけに見えてしまうのですが、そもそも我々が知識と呼ぶものとそうしたヒューリスティックっぽいものに明確な境界はあるのでしょうか。

結局何ができそうか

 何もわからなくなってきました。厳しい。ここでちょっと「研究として可能そうなこと」を列挙してみます。このあたりは話がまとまってきたら後で消すかも。

  • タスク側
    • 「マッチングやバイアスの発見」を定量的に扱うための何かを考える(そもそもこれが外部知識なしのベースラインなのでは?)
    • 既存のデータセットの有用な変形。その過程で前項についての示唆を得る
    • 新しいデータセットを考える。「情報の関係(知識を含む)」を捉えることができないと解けない問題が望ましい(抽象的に書きすぎですが、要は「ちゃんと難しい」問題が作りたい気がします)
    • 問いの分析。自分がこれまで提案した能力は一体何だったのか。どのような問いにどのような能力が出てくるか。あるいはある能力を専門的に問うためにはどのような問いが必要か
    • 前項に関係して、質問ベースの翻訳評価のためのイベント粒度など
    • 読解のための能力っぽいものだけでなく、言語知識への拡張
  • モデル側(あまり考えていないので気になることだけ)

うーん、いろんなことを同時に考えすぎてどれも論文が書ける程度まで成熟していないのかもしれません(いずれにせよ何もわかっていないのですが)。論文の単位としては(自分の経験では)「何らかの仮説を立てる(モデルでなくてもよい)・何らかの定量的な評価や分析を行う・仮説の信頼度について結論を与える」という感じなわけで、その仮説の粒度は「これが言語理解のモデルだぜ!」という大きさでなくとも「いや読解の能力と文章の読みやすさってあまり関係なさそうじゃね」くらいの細かさで十分な話題になります。それが「タスクを立ててモデルを作って評価する」と一連の流れのどこか部分的にでも貢献できればよいのです。しかし……しかし、「仮説」は何かの積み重ねで成り立っているわけですが、 NLP/CL はこれまで何を積み上げてきたのでしょう。論文を読んでも「何もわからん!!!」となることが多いのはまさにこの「積み重ねのわかりづらさ」にある気がします(私が何もわかっていない・わかろうとしていない・この記事を書くにあたって認識を誇張している、などの可能性があります)。仮説検証のプロセスが暗黙のうちに為されていたり、検証のスキーム自体を数値で簡素化しているために論文の貢献が何なのか見えづらいのです(規範がばりばりに入っており、あくまで個人的な嗜好であることに留意いただければと思います)(あと論文一本が短すぎる)。

 あとはそうした思いつきを速い周期で回していくことが大事です。複数の試案を同時に考えていると各々が飽和するまでの時間が長くなってしまうので、やっぱりどれかに絞ってがっと進めたほうがよいかもしれません。自分は手を動かすのが遅いので(普段から書いているわけではないのでコードを書くのは特に時間がかかりますし、full paper の論文を書くのもまるまる1ヶ月は欲しい)、ひとつの周期をより速く回せるように意識していく必要がありそうです。

 焦っても仕方ないですし、じっくりやりましょう(って言ってると無限に時間が溶けるので、進行管理をきっちりせねば……)。たまにこんな話で雑談をしていただける方が現れると喜ぶかもしれないです。終わり。

beamer, rowcolor, columncolor, line breaks in cell, and overlay

f:id:liephia:20171102143234p:plain

\documentclass[12pt,xcolor={dvipsnames,table}]{beamer}
\usepackage{booktabs}

\makeatletter
% columncolor > rowcolor https://tex.stackexchange.com/questions/80135
\def\tmpp#1\@addtopreamble#2#3!{%
    \tmp#2!{#1}{#3}}
\def\tmp#1\CT@column@color\CT@row@color#2!#3#4{%
\def\@classz{#3\@addtopreamble{#1\CT@row@color\CT@column@color#2}#4}}
\expandafter\tmpp\@classz!
% get overlaynumber
\newcommand*{\overlaynumber}{\number\beamer@slideinframe}
\makeatother

\begin{document}

% tabular in cell for line break
\newcommand{\cellstack}[2][0]{
  \ifnum\overlaynumber=#1\newcolumntype{x}{>{\columncolor{red!20}}c}
  \else\newcolumntype{x}{c}\fi
  \def\arraystretch{0.9}\begin{tabular}[c]{@{}x@{}} #2 \end{tabular}
}
% change each column color
\newcommand{\onct}[2]{\newcolumntype{#1}{c}\only<#2>{\newcolumntype{#1}{>{\columncolor{red!20}}c}}}

\begin{frame}{Table}
  \centering
  \def\arraystretch{2.0}
  \onct{A}{2}\onct{B}{3}\onct{C}{4}\onct{D}{5}
  \rowcolors{2}{}{gray!20}
  \begin{tabular}{ABCD}
    \toprule
    Column1 & \cellstack{Column2 \\ Cat1} & \cellstack{Column3 \\ Cat2} & Column4 \\ \midrule
    \cellstack[2]{Row1 \\ Col1} & Row1 & Row1 & Row1 \\
    Row2 & \cellstack[3]{Row2 \\ Col2} & Row2 & \cellstack{Row2 \\ Col4} \\
    Row3 & Row3 & \cellstack[4]{Row3 \\ Col3} & \cellstack[5]{Row3 \\ Col4 \\ Row3inRow3} \\ \bottomrule
  \end{tabular}
\end{frame}

\end{document}

Please let me know if you know a better way...

beamer, presenter notes, pgfpages, splitshow

やること
  • beamer で作ったスライドで発表する(環境は OSX
  • 発表者ノート的なものも使いたい
手順
  • tex に仕込むコード
\usepackage{pgfpages}
\setbeamertemplate{note page}[plain] % or [default], [compress]
\setbeameroption{show notes on second screen=right} % or bottom, ...
\newcommand{\pdfnote}[1]{\note{#1}} % as you like
  • で、 \pdfnote{あれこれ} を frame と frame の間に書く(どこでもいいっぽいけど)

    • itemize が使えたり、フォントも自由にできる(便利)
  • Splitshow https://github.com/mpflanzer/splitshow で pdf を開く

    • presentation mode = split
    • main display とか helper display とか指定するとウィンドウを開いてくれる
    • 矢印キーが同期されるのでふつーに発表可能
  • 同時に note page が無い slide も出力しておきたいとき(配布用とか)

\usepackage{pgfpages}
\setbeamertemplate{note page}[plain] % or [default], [compress]
\ifdefined\ispresentation
\setbeameroption{show notes on second screen=right} % or bottom, ...
\fi
\newcommand{\pdfnote}[1]{\note{#1}} % as you like

などとしておいて(引数の入れ方はもちろん逆でもいいです(ここでは slide.pdf が note 付きになるようにしている))、

with note pages
$ lualatex "\def\ispresentation{1} \input{slide.tex}"

without note pages
$ lualatex -output-directory=org -jobname="slide_original" slide.tex

みたいな。 Makefile に適当に書いておく。最初 platex+dvipdfmx でやっていたけど table などが表示されなくて詰まったので lualatex に切り替えた。

反省
  • beamer でスライド作るのを卒業したほうがいいのではないか

Springerexemplar の grep

Springer Exemplar - Scientific Terms in Context と言えば Springer が有するコーパスから指定したフレーズの一致件数・一致例を出してくれるサイトですが、「この表現とあの表現の一致件数を比較したいな〜」というときに一発コマンドを打てると楽だなあと思っていろいろ教えてもらって書きました。なんでこんなことするのかって springerexemplar は読み込みが遅くてロードを待っている間に何を検索しようとしていたか忘れてしまうからです。

springerexemplar() {
    echo "$*"
    wget -q -O - 'http://springerexemplar.com/search.aspx?q="'"$*"'"&similar=false' | grep -o "\d* matching articles"
}
spx() {
    for i in $@; do
        springerexemplar $i
    done
}

自分は .zshrc に直に書いています。使い方は、

$ spx 'this '{is,was}' because'
this is because
122392 matching articles
this was because
128924 matching articles
$ spx 'this is because' 'this was because'
this is because
122392 matching articles
this was because
128924 matching articles

みたいな感じでどうでしょうか(自分でも使うかどうか怪しいけど)。

UBLP (EMNLP2016WS) の対話セッションのメモ

Uphill Battles in Language Processing Scaling Early Achievements to Robust Methods, Workshop held in conjunction with EMNLP 2016

  • http://www.coli.uni-saarland.de/~mroth/UphillBattles/
  • EMNLP 2016 のワークショップ
    • 「現時点までの成果をどうやって robust な技術に発展させるか」という感じの、今までを振り返ってこれからを考える趣旨の会
  • 本稿は Dialogue and Speech のセッションのメモ書き
    • 4人の研究者がそれぞれ10-15分で「これからどうするか」という話をしている
    • 他に「言語理解」「言語生成」「Grounded Language (どう訳す……?)」のセッションがあった

0. 全体のまとめ

各講演者の要点

  • Devault: 現状の音声対話システムの問題のひとつは流暢さであり、その実現のために「turn-taking における素早い応答」と「割り込み・重複を認識して認識ができること」の二点が重要だと指摘している
  • Liberman: diarization (who spoke when) すら現状の技術では満足でなく、 what について理解する前提としてまず diarization が必要。そのほか、 turn-taking物理的環境・社会的文脈への対応
  • Litman: 協調という観点から1980年代の Indirect speech actsHelpful responses の取り組みを思い出すべきなのでは
  • Stent: 概説メイン。大きな課題はふたつ: 単なる「情報を探す」対話から協調的・利益的な対話に発展させること、 AI としての対話に立ち返って必要な要素(たとえば情報の共有、照応と物理世界、文化や社会ドメイン、複雑なやりとり、自律性?)を考えること

メモ作成者のメモ

  • ページ下部へ移動

1. David Devault, University of Southern California

音声対話システムの Uphill Battles

  • Automatic speech recognition
    • 自動的な音声認識
    • (既にいいところまで行った?)
  • Broad coverage semantics
    • 幅広い語彙・知識をカバーできること
  • Multi-domain / multi-application dialogue policies
    • マルチドメインかつ様々なアプリケーションで利用可能な対話戦略を持つこと
  • Fluid conversational interaction (流暢な対話のやりとり)
    • Turn-taking / mixed-initiative (発話の順番、発話の時間的重なり)
    • Incremental (word-by-word) speech processing (逐語的な音声処理)
    • Dialogue modeling (対話をどうモデリングするか、意図や目的)

現状の音声対話システムは何が流暢ではないのか?

  • ほとんど全てのシステムが単純な turn-taking のプロトコルで成り立つ
    • 卓球のようなやりとりを仮定し、発話の重複がない
    • All user-initiative / all system-initiative
  • ユーザーは、システムがユーザーの言うことや振る舞いを理解しているかわからない
    • 応答の待ち時間がながい、相づち (backchannels; 「ああ」や頷き) がない
  • ユーザーはいつ喋ることができるのか・何を喋ることができるのかがわからない
    • Okay のような単純な発話ならすぐ使えるとはわかる
    • それ以外の発話はさっぱり何を言っていいのか見当がつかない
    • やりとりが簡単に脱線する
    • ユーザーにとっては、ひとつひとつの発話を決めるのが大変

Example 1: The Eve Agent (2014-2016)

  • ドメインを絞っており、応答が速い
  • 小さなドメインなら理解・応答が素早いシステムを作ることができる
  • しかしどのような[限定的な]ドメインでこのような素早いシステムが必要になるかは定かではない
    • [タスク指向ならいくらでもあると思うけど]

Example 2: Conflict Resolution Agent (2015-2016)

  • いろんなタイプの発話をサポートしている [たぶんシステム側]
  • Mixed-initiative を許容する
  • 速いペースのやりとりが可能

How do we make progress?

  • turn-taking や個人の turn の構造について単純な仮定を置くのを止めるべき
  • やりとりにおける時間のモデルとして良いものを用いるべき
  • より拡張的・一般的・ data-driven な対話モデルを開発するべき
  • 人間対人間の会話データを増やすべき

[まとめ]

  • DeVault さんが挙げている音声対話システムの一つの問題は流暢さ
  • 例二つは、それぞれ次を実現している
    • 幅広いドメインで素早く応答
    • 割り込み・重複を許容した振る舞い
  • We need to create fine-grained models that take seriously the timing of speech and the detailed mechanics of how human conversation unfolds through interlocutor decision-making at small timescales
  • We need to improve our ability to create intelligent agents and other dialogue systems that are not purely user-driven or system-driven, but instead have a pervasive mixed-initiative capability
  • 上の2文とも言ってること同じ

2. Mark Liberman, University of Pennsylvania

Abstract: Three Steps (Liberman 自身によるまとめ)

  • Robust diarization
    • すなわち、誰がいつ話しているか (who spoke when)
    • 大きな問題は、発話の時間的重複と背景のノイズ
    • 現状の技術では整った静かな環境の diarization も難しく、 what の理解まで行くにはまだ遠い
  • Dialogue systems with human-like turn-taking
    • 人は、例えば協調や競争の目的で相手の話に割り込む
    • 対話システムは典型的には割り込みをリセットの信号だと解釈する(実際にはそうではないのに)
    • システムは相手が喋っている間には喋らない(相づちも含めて)
    • much less to correct misunderstandings, introduce relevant information, or cut to a proposed solution.
  • Conversation systems that can participate effectively in a meeting, manage a classroom, or chat overa game of poker
    • このようなシステムは diarization 以外にも物理的な環境・社会的文脈で何が起きているのかを追跡することが必要
    • 同様に、どのようにいつ会話に貢献するか、その貢献を他者が受け取る・受け取らないことを動的な関係としてどのように調節するかを学ぶ必要がある
    • さらに、異なる会話の文化にも対応できなければならない

3. Diane Litman, University of Pittsburgh

Dialogue Systems: A Brief History

  • ELIZA (1966, chatbots)
  • SHRDLU (1971, AI, block)
  • Allen, Cohen, & Perrault (1980s, plan-based)
  • VODIS, VOYAGER (1990s, speech, "How many hotels are there in Cambridge?")
  • startups (2000s)
  • Siri (2010s)

Back to 1980: Analyzing Intention in Utterance

  • 発話の意図の分析を行って対話のプランを考えていた
  • 対話における協調的な振る舞い
    • 間接言語行為 (indirect speech acts), 助けになる返答 (helpful responses) など
  • knowledge-based なアプローチ
    • 相手にもプランの考案、実行があると考え、それを推論して障害を発見した上で自分のプランを考えて実行する

What about Siri? (example for indirect speech acts)

  • 間接言語行為が理解できない例
    • Diane: I don't know Megan's address.
    • Siri: Don't warry about it, Diane. (教えてくれない)
    • Diane: Can you tell me Megan's address?
    • Siri: Here's the address for Megan ... (教えてくれる)
  • 明示的に要求しないと伝わらない

Helpful Responses

  • 要求された以上の情報を返してくれること
    • Diane: What day of the week is election day?
    • Siri: Election Day is on Tuesday, November 8 2016
  • [ユーザーが何を必要としているのかを察して情報を増やさなければならない(増やせると便利)]

Indirect + Helpful

  • 間接言語行為を理解して、かつ強調的に情報を増やしてくれる例
    • Diane: I'm hungry
    • Siri: I don't want you feeling all peckish.
    • Siri: Here's what I found ... (15 results displayed)

Summary

  • 協調的な対話研究は大部分は諦められ、より実践的なアプローチに移った(Diane さん自身の研究も含め)
    • "There is much to be gained from recognizing not just what was said, but why; from identifying conclusions people naturally draw from both what has been said and hasn't" (Workshop CFP)
  • 1980年代の観点から見て、今のシステムがどのように協調的であり、どのように協調的であるべきかを考える必要がある

4. Amanda Stent, Yahoo! Labs, NY

In the Beginning Were Problems

Then Problem Definitions ...

  • Finite-state script
    • call transfer
  • Frame based
    • getting flight info
  • Sets of contexts
    • booking travel
  • Plan-based models
    • kitchen design consultant
  • Agent-based models
    • disaster relief management
  • 対話の問題設定は様々考えることができる
    • 上から下にいくほど複雑になる
    • 出典は Allen et al. (2001), AI Magazine

Evaluation Metrics and Parametrizable Methods, Data and Time

Challenges

  • Move beyond info-seeking dialog
    • 情報を探すだけの対話から更に発展させる
    • ユーザーのコストを削減するのではなく、ユーザーに利益を与えるような対話システム
    • 新しい評価指標
    • やりとりに関わるパラメータを増やす
  • Go back to our roots: human intelligences としての AI モデル
    • Entrainment
      • 情報共有的な意味での同期: 語彙のレベルや知識表現が良くなければユーザーと等しい情報を持つことができない
    • Anaphora resolution and grounding
      • 照応と物理的世界の参照
    • Contextually appropriate, mixed-initiative generation
      • 文化的・社会的慣習などの文脈に適合すること
      • 発話のタイミングが入り組んでも対応できること
    • Non-cooperative and semi-cooperative dialog
      • 必ずしも協調的でない対話ができること

Interesting Current Directions

  • Complex and flexible tasks, evaluation beyond efficiency
    • タスク設定と評価方法
  • Anapora and entrainment, shared language representations
    • 照応、情報の同期、共有される言語表現
  • Non-cooperative (situated) dialog
    • 協調的ではない対話
  • それぞれについての論文はスライド末尾(-1)参照

Stent さんおすすめの参考文献

以下、メモ作成者のメモ

Issues

  • understand very well and wery quickly
  • turn-taking / mixed-initiative
  • diarization (who speack when + what)
  • indirect speech acts / helpful response (cooperation / non-cooperation)
  • physical world, social context (semantics, vocabulary)

そういえば岡野原さんがIBISで言ってたこと (http://www.slideshare.net/pfi/ibis2016okanohara-69230358)

  • 知識をどのように埋め込むか、記憶と想起
  • 心理モデルや意図推定
  • コミュニケーションの目的関数と評価

やはりマーっぽい記述のモデルで整理するといいのでは(以下省略)

  • おわり

Attention-Based Convolutional Neural Network for Machine Comprehension をやる

著者の微妙に動かないコードを動かすだけです

  • paper: [1602.04341] Attention-Based Convolutional Neural Network for Machine Comprehension
  • github: GitHub - yinwenpeng/MachineComprehension
    • cis や word2embedding などのライブラリは Yin さんの別のレポジトリにあるのでコピーして持ってくる
    • train_arc1_v4.py というやつは動きます
    • 精度が高いのは train_entailment_v3.py というやつのはずで、こっちがそのままだと動かない、動かしたい
    • まず preprocess_mctest.py をいじいじして必要なファイル(vocab_DQAAAA.txt まで)を作る
    • DQAAAA とか DPNQ とか書いてあるのはデータの内容の形式です、 document, question, answer, positive, negative がどの順で書いてあるか、という感じ
    • しかしエラーが出るので露頭に迷う。 DPNQ.txt まで生成されない(Statement ファイル群がない)のでそもそもデータが足りない
  • github2: GitHub - BenjaminHess/MachineComprehension
    • ちょっとコードが整理された fork だけど、特に改善されている雰囲気ではない
    • このままでは相変わらず train_entailment_v3.py は動きません(データの読み込みで sharedvariable 宣言するところでエラー)
    • まず Statement の在り処が書いてあるので、データを引っ張ってきて Yin さんの方のにコピーするのでもよいです(DPNQ はすでにあるのでどっちでもいい)、とにかくデータはこれで揃うことになります
    • で、試行錯誤する
  • 原因は loadData.py L1342 の読み込みのとこで lower() を入れてない部分だと気付いた
    • 入れれば word の id 取ってくる部分を失敗せずに必要な theano.shared() が通ってくれます
    • でも精度が論文通りにならず困る、辛抱強く epoch 上がるのを待てばいいのだろうか……

latex で table 書くときにね?

よくひとつのセルに改行含めた表現を入れたくなるじゃないですか、こんなふうに

f:id:liephia:20160927034932p:plain

ここでは \shortstack{All you need is \\ love} って書いてます。見るからに美しさに欠けており、内容の上に余白ができないかなあと思って困ってたんですが(そもそもバリバリに罫線を引くのが間違っているという説はあるとして)、簡単に解決したのでメモをします

f:id:liephia:20160927034944p:plain

\shortstack{\\All you need is \\ love} でなんとかなりました。vspace とか入れようとしてる場合ではなかった。先頭に改行で良かった感じ。そもそも \shortstack 使わずに別の行にしちゃえよという意見もあるかもしれない。それもわかります。次はそうしようと思います。メモですメモ。

ということで(?)近況は EMNLP 2016 Workshop on Uphill Battles in Language Processing に行くことになりました。バトルをしてくるのだ。

追記
けっきょく booktabs.sty を使うのが最近の流行りっぽいし見栄えが良いです