Generating More Interesting Responses in Neural Conversation Models with Distributional Constraints [Baheti+, EMNLP'18]
http://aclweb.org/anthology/D18-1431
ニューラル対話応答モデルにおいて起こりがちな、"I don't know." を連発するといったdull conversationを解決しようという話。
方針としてはベースラインとなるSeq2Seqでも用いている応答生成の確率分布 に加えて 発話をX、応答をYとした時に
(1)トピックTの一貫性:
(2)発話・応答の類似度:
を重み付けして応答生成時のスコアリングに用いるというもの。
(1)のトピック類似度計算についてはHMM-LDAベースの手法を用いて単語単位でトピックに対する確率分布を推定した後、それを文全体に適用して文単位のトピックに対する確率分布を得て、発話応答間でのコサイン類似度で計算。(2)の意味的な類似度については文中の単語wについてのembeddingを で重み付け(P(w)はunigram probability)して平均を取るという手法でかなり優秀な文ベクトルを作れるらしく、それを使って作った2つの文のコサイン類似度を用いている。 こうした割とシンプルな手法を取る理由としてはこの計算はdecodeの途中で1単語生成するごとに行うため、計算に時間が掛からずかつ生成途中の不完全な文に対しても適用できる手法が望ましいため。
実験では訓練にOpenSubtitles, テストにCornell Movie Dialogue Corpusを用いている。(OpenSubtitlesはノイジーなので評価に使いたくないとのこと) また、訓練に使うOpenSubtitlesについても Jiwei Liが NAACL'16で使っていた際の前処理を加えたいい感じのコーパスを使い、なんとそれを配布してくれている。正直自分で使っていてもこんなノイジーで大丈夫かよ感があったのでこれは試してみたい。
結果としては既存手法 (MMI, TA-Seq2Seq)と比較して、生成例 (右端) も大分diverseになっているように見えるし、定量的にもdistinct-1, 2 (生成された応答の単語のばらつき具合で測る応答の多様性) も大幅に上がっている。
An Overview of Multi-Task Learning in Deep Neural Networks [Ruder, arXiv'17]
https://arxiv.org/pdf/1706.05098.pdf
マルチタスク学習 (MTL) についてのサーベイ論文。マルチタスクの利点や考え方、これまでの手法などがニューラル・非ニューラル共に列挙されていて勉強になった。
自分がこれまで読んできたニューラルベースのMTL論文だとネットワーク間で陽にパラメータを共有するhard-sharingな手法が主で、パラメータは独立に持つけれども共有されていて欲しい2つのレイヤ間の類似度を損失として加えるなどするsoft-sharingな手法はあまり見てこなかったので新鮮。 その違いについて、MTLを行うタスクの性質次第では片方のタスクにしか役にたたないような特徴量がそれぞれあったりするような場合などの場合には, hard-sharingなモデルを用いてそれらを1つのベクトルに押し込めるとあるタスクにおいては使われない特徴量がノイズとして働くので、soft-sharingな形を取るほうが有望なのではないか、とのこと。
とは言っても [Liu+, ACL'17] のようにhard-sharingではあるがprivate/shared それぞれに空間を用意してやってそれらがきちんと分離されるような学習を行う形もあるわけで、結局どちらがいいのか?というところはやってみなきゃ分からないのかな。
NLPのNC2組のタスクについてM通りの設定でMTLしてみました、という論文あったりしないだろうか。結局どういう設定でどの手法がどれだけいいのか、そしてそれがタスクごとにどの程度異なるのか、というところを網羅的に知りたい。
他には private/sharedなレイヤを交互に配置する Cross-stitch Networkや、パラメタ行列をmatrix factorizationして private/sharedなものに分解するという手法 (どういう意味があるんだろう・・・?) あたりが見たこと無いタイプで面白かった。
Relation Extraction まとめ
関係抽出タスクについて読んだものをメモ。新しいの読むたび更新。
- Global Relation Embedding for Relation Extraction[Su+, NAACL'18]
- Neural Relation Extraction with Selective Attention over Instances[Lin+, ACL'16]
- End-to-End Relation Extraction using LSTMs on Sequences and Tree Structures [Miwa+, ACL'16]
Global Relation Embedding for Relation Extraction[Su+, NAACL'18]
関係抽出タスクにおいては下図のような2つのエンティティ間のラベル付き係り受け関係(shortest dependency path)を主要な特徴量として分類を行う。 その際にある係り受け関係 (nsubjpass, born, mod:in) と、関係抽出タスクにおける出力である知識グラフ上に定義される関係ラベル (place_of_birth) とのコーパス全体における共起関係を再現するように係り受け関係の埋め込み (textual relation embedding) を学習した上で関係抽出モデルで活用するという話。
肝としてはtextual relation embeddingの学習の際にコーパス全体における統計量を用いていることから、distant supervisionに基づき構築されたデータセットにおけるノイズに対して頑健になるとのこと。
Riedel+, ECML-PKDD'10 によるNew York Times Corpus (NYT)からDistant supervisionで構築された関係抽出データセットを使用。
疑問点: fig3の係り受け関係から関係ラベルの確率分布への写像、なんでわざわざ系列長1の系列としてGRUでデコードしているんだろう?
Neural Relation Extraction with Selective Attention over Instances[Lin+, ACL'16]
Distant-supervisionで構築されたデータセットでは関係を持つエンティティの組が登場する文であっても、必ずしもその関係について言及しているとは限らないにも関わらずそれを無条件に正例とみなしているという問題がある。[Zeng+, EMNLP'15] ではあるエンティティの組を含む複数の文のうち少なくとも1つは推定対象の関係について言及しているとの仮定のもと、もっとも信用のおける文のみを使うことでそれを解決しようとしていた。それに対してこの論文ではそれぞれの文をCNNでエンコードしたベクトルに対するアテンションを張ることで動的な重み付けを可能にしている。データセットはNYT。
End-to-End Relation Extraction using LSTMs on Sequences and Tree Structures [Miwa+, ACL'16]
上述した2つの研究をはじめとして、NYTなどのデータセットを用いた関係抽出タスクは登場するエンティティがgivenである設定のもと行われていた。 それに対してエンティティのスパン(とそのタイプ)の抽出をSequence labelingタスクとして解いた上で、特定したエンティティのそれぞれの組に対して関係分類を行うend-to-endな関係抽出モデルを提案。関係分類にあたっては係り受け関係をbidirectional tree LSTMでエンコードし、エンティティのスパン抽出に用いたエンコーダの出力(該当の2つのエンティティの箇所)と組み合わせて用いる。係り受け関係についてはエンティティ間の最短のものや文全体のものなどablation testで試していたが、少なくとも最短のものがないと駄目とのこと。 データセットは ACE2004, ACE2005。
Constructing Datasets for Multi-hop Reading Comprehension Across Documents [Welbl+, arXiv'17]
https://arxiv.org/pdf/1710.06481.pdf
概要
WIKIHOPというReading comprehensionのデータセットの作成・分析についての話。データセットの分析や関連研究との比較,RCデータセットの構築で起こりがちなバイアスについてなどしっかり気を使っていて勉強になった。
タスクとしてはWikipedia中の記事を読んで,Wikidata上に登録されている他エンティティの関係性を表すトリプル (subject, relation, object) のobjectを当てる。 *1 WikiReading に似ているが大きな違いはタイトルにもmulti-hopとあるように,subjectとなるエンティティの記事だけではなくそこに含まれるリンクを辿って,関係のある他の記事も用いた上でobjectを当てる形式にしていること。 またWikiReadingはobjectの名前を記事中からの抽出,あるいはモデル自身の語彙から生成する必要があるテキスト生成タスクであるのに対し,WIKIHOPは候補objectが与えられた上での選択タスクになっている.*2
どういうことかというと例えばfig.1 のような例では ("Hanging gardens of Munbai", "country", ?) というクエリの回答として "India" を推定する上で必要な情報は"Hanging gardens of Munbai"には書かれておらず,リンクを辿って "India"までの全ての記事を見てようやく推定が可能になる.このように推定のためには複数記事の情報を統合する必要があるような関係トリプルを集めたデータセットとなっている。
具体的にデータセットをどう作っているかというとfig.2のようにsubjectとなる記事からスタートして,記事中に登場した全ての他エンティティについての記事も辿る,というのをtype-consistent entityに当たるまで繰り返す。 type-consistent entityの定義はwikidata中に登録されている他の全トリプル中で,クエリのrelationを伴って登場したことのあるobject。今回の例だと (*, "country", object) というトリプルがwikidataに存在していれば object はtype-consistent entity であり,その記事にたどり着けばそれを回答候補に加え探索を打ち切る。*3
ここでは省略するが実験においては簡単なベースラインやneural-basedなモデルなどいろいろ試した上で,登場する回答候補エンティティを[Hermann+, NIPS'15]のようにマスクすることで表層を手がかりとして使わせない(=文脈をちゃんと理解するように強制させる)場合や関係のない記事を抜いた場合どう変わるのかなど,実験結果の分析についてもなかなか興味深い事が色々。
UNSUPERVISED NEURAL MACHINE TRANSLATION [Artetxe+, ICLR'18]
URL: https://arxiv.org/pdf/1710.11041.pdf
概要
各言語の単言語コーパス+ cross-lingual embeddingsを使うことでパラレルコーパス無しで機械翻訳をしよう、という論文。 具体的にどうやるかというと下図のように言語共通のencoderと言語独立のattention付きdecoderを用意して, 訓練時はそれぞれの単言語コーパスを使ってautoencoder (入力文をそのまま復元するモデル)を学習することでencoderが言語非依存の中間表現を出力してくれることを期待する。そしてテスト時に入力の言語と異なるdecoderを用いると復元された入力文は目的言語のものになり、結果的に翻訳が行われているという仕組み。(例えば訓練を仏→仏、独→独で行ってテストは仏→独みたいな)
しかし問題となるのが普通にやると中間表現に入力文の言語非依存な情報が上手いこと圧縮されてそれを元に復元・・・という風にはならず、 (自分の理解ではattentionに頼りすぎて、という事だと思う)入力文の単語を盲目的に一つずつコピーしていくようなモデルになってしまい、結果的に違う言語では上手くいかなくなってしまう事らしい。
それを解決するために著者らが提案しているのが(1) denoising (2) On-the-fly backtranslation と呼ばれる2つの工夫で、前者は入力文がN単語なら N/2回隣り合う単語をランダムに入れ替えて順番をめちゃくちゃにして、単純に左からコピーしていっても復元できないようにしてやる、という方法。
また後者の具体的な内容としては、まず訓練の各ステップで現在のモデルを使って翻訳を行う。そうして得られた (言語Aの入力文, 言語Bの出力文) のペアをひっくり返してそのステップの訓練データに加えてやることで,モデルが出力したちょっと変な言語Bの文から言語Aの文を復元できるようにする、という方法。
どちらの方法もautoencoder関連で過去に提案された、入力をわざと崩してやることでencoderが出力する中間表現をロバストにしてやろうという発想に近いものだと思うけど、 On-the-fly backtranslationについてはモデルが途中のステップで出力する文って恐らくかなりおかしい感じになっている訳で、そんなの訓練中に突っ込んで学習がぶっ壊れないのかよ、という感想。元ネタらしい (Sennrich+, '16) をちゃんと読んだほうがいいのかな。
実験と結果
いくつかの言語対に対して unsupervised, semi-supervised (訓練にパラレルコーパスをちょっとだけ使う), supervised (普通のニューラル翻訳) を条件を変えて比較。denoising, on-the-fly backtranslation単体だと微妙だが、両方合わせると (semi-)supervised に勝てないまでもそこそこいい線行くらしい。*1
また、semi-supervisedの結果が示すように単体ではモデルの学習が困難な小さいデータでもunsupervisedにちょっと加えてやると大分性能が良くなるというのはかなり面白い。自分の感覚では他のタスクでもよくある整ったデータセットのサイズって 10k~100kくらいで、この量だと何かモデル学習するには(特にニューラルだと)タスクによっては微妙に心もとないしどうも使いにくいよなーと思っていたのでこういう大規模な単言語コーパス + 小規模の高品質 (task-orientedな) コーパスを組み合わせるみたいな話は有望だと思う。
雑感
面白かったけどメインの提案である中間表現の質を上げる話、入力を盲目的にコピーする問題はattention使ってるせいじゃねえのという感が否めない。そもそもattentionという手法が入力文全体の情報を一つの中間表現に全部負担させるのではなく、各ステップのencoderの出力に分散させてやろうという発想なわけで、autoencoderのようなuniversalな中間表現を作りたいという話と相反しているように感じる。attention無しバージョンは試さなかったんだろうか? (上記の問題を差し置いても自分で文のautoencoder作ってみた時、attentionを入れないほうが普通に性能良かった気がするんだけど・・・)
*1:byte pair encodering (BPE) はslightly beneficialだとか言っていたけど2. ->4. の変化は十分大きくない?それとも4. って proposed + BPE じゃなくて proposed + backtranslation + BPE ってこと?
Learning with Noise: Enhance Distantly Supervised Relation Extraction with Dynamic Transition Matrix [Luo+, ACL'17]
https://arxiv.org/pdf/1705.03995.pdf
概要
Relation Extractionと呼ばれる2つのエンティティ間の関係抽出タスクの論文。 具体的には(subj, rel, obj) の形式で表される知識ベースを仮定して,(subj, obj) を含む文(文の集合)からrelを当てるといった形式。 彼らのモデルではニューラルネットを用いてエンコードしたベクトルをsoftmaxに掛けて,R (= relの種類) 択の分類問題を解いている.
一方で,訓練データ中のどの文が (subj, obj)に対する関係relの根拠となっているかということをアノテーションすることは現実的に困難なため, この学習の際には(subj, obj)が出てきた文は全部relに関係しているとみなして学習する,いわゆるdistant supervisionによる学習が基本的なやり方となるため, あるサンプルが実際には全然relと関係ない文であった場合それは学習におけるノイズとなってしまうことが問題となる。
彼らの貢献は主に以下の3つ。
1. Curriculum Learning(訓練データのそれぞれに信頼度あるいは難しさを計算できる時に,信頼できる/簡単なものから学習していく)の導入
2. Sentence-level Modeling / Bag-level Modeling (文の集合) の比較に加えて,Bag-level Modelingにおけるaggregation (それぞれの文ベクトルからどう全体のベクトルを作るか)についてaverageとattentionの2種類の比較
3. Transition Matrixによるノイズモデリングの提案
以下の図がモデルの概要図。 入力をエンコードした後,関係ラベルの確率分布を計算する部分と,タイトルにもあるDynamic translation matrix を計算する部分に分けられる.このはの正方行列の形を持ったある種の混同行列になっていて,各要素は関係を と間違える確率になっている。
この行列と推定した確率分布から新たな確率分布を計算して,訓練時はとを重み付けしたものを使い,テスト時の推定にはを用いる.
これがどういうことかというと自分の理解では,は真の確率分布をモデリングしているのに対し,それをノイズが含まれうる訓練データで直接最適化すると訓練データのノイズもそのまま学習されてしまう。それに対して,真の確率分布+ノイズであるをノイズ入りの訓練データで学習すると,結果的に真の確率分布とノイズをモデリングした部分に分かれて,結果的にモデルの推定の質が良くなる,ということをやりたいんだと思う.
ただ,実際の学習データは「必ずしも正しいとは限らないデータ(=~o)」だけで,「確実に正しいデータ (=~p)」も「何をどう間違えたかのデータ (=~T)」も無いので真の確率分布とノイズの部分の分離を促す力は単にネットワークを分けただけでは得られないんじゃないか?という気がするがそこはどう考えてるんだろう。自分が読み込めていないだけの可能性もあるかも・・・。*1
結果としては1. のCurriculum Learningによる寄与が大きく,2. はそこまで変わんないかなあ・・・?という印象。また3.はbag-levelではそこまで大きな効果がある感じではなかったが,sent-levelでは結構差があるように見える.sent-levelでは一度に1つしか見ない分,あるサンプルがノイズかどうかの分散が大きいから効果が大きいということなんだろうか?
*1:Culicullum Learningにおけるスコアが高いものだけをpの学習に使い,全部混ぜたやつをoに使うとかはどうなんだろう?
Improving Coreference Resolution by Learning Entity-Level Distributed Representations [Clark and Manning, ACL'16]
https://nlp.stanford.edu/pubs/clark2016improving.pdf
概要
C.Manningの研究室から出た共参照解析の論文で、[Lee+, EMNLP'17] に抜かれるまでCoNLL 2012 shared taskのSOTAモデル。概要としては従来のメンション間のスコアを算出して同一クラスタに属するかどうかを判断し、最後にリンクを辿ってクラスタを構築するモデルだと既に同一クラスタであると判断した他のメンションの情報が使えないことが問題となる。例えばテキスト中にClintonさんが2人居た時に "Bill Clinton" と "Clinton"が同一エンティティを指すかどうかは判断が難しいが、{Bill Clinton} と {Clinton, she} が同一であるかどうかの判断はすでに"Clinton" と "she" が同一であるという情報を使えば比較的容易である、という話。 そのためにタイトルにもEntity-Levelとあるように,個々のメンションを要素が1つのクラスタとみなしてスタートして,モデルが推定した結果をインクリメンタルに取り込んだ上で、entity-levelの(言い換えるとcluster-levelの)representationを計算しつつクラスタ同士をマージし続けるような形で共参照解析を行えるモデルにしようと言う話。
モデル
まず前提として、個々のメンションの抽出は別モジュールで既に行われているとする。その上で、モデルのコンポーネントは大きく分けて
(1) Mention-Pair Encoder (2) Mention-Ranking Model (3) Cluster-Pair Encoder (4) Cluster-Ranking Model の4つ。
(1)のエンコーダは特筆することもなく2つのメンションのembeddingと周囲の単語、メンション間の距離などの特徴量を使ってFFNNに通して新たなrepresetantionを計算する。(2)でそれを使って、あるメンションmとある先行詞aの間のスコアを算出する。
(3)はクラスタのペアについてのエンコーダなので2つのクラスタに属するメンションの全通りの組み合わせに対してあれこれしてrepresentationを計算。詳しくは論文の図参照。
冒頭でメンションではなくクラスタとの比較をしよう、という趣旨を述べていたにも関わらずどうして(1), (2)が必要になるかというと、具体的には(4)での枝刈り&実行順序決め(簡単なものから実行するため)に用いる。モデルの実際の訓練・推定の流れはまず(1), (2)を事前訓練して従来のモデルと同じようにメンション単位でのスコアを算出できるようにした上で、(3), (4)の訓練時にMention-Ranking Modelでのスコアが高いメンションが属するそれぞれのクラスタどうしに対してCluster-Ranking Modelを適用して実際の共参照解析を行っている。
また,学習データとして持っているのは最終的に得られたクラスタだけで途中にどのような順番でクラスタとクラスタのマージを行ったか、というラベルは陽に存在しないため,通常のneural-basedなモデルと違って最終的なクラスタ同士を比較するだけでは最適化が難しく、ここについてはDaumeのlearning-to-searchというアルゴリズムを使って解決している。
具体的にはまずモデルの現在のパラメータによって定まる方策 を用いて最終状態までの状態の軌跡 {} を得る。その上で、ある状態において取れる行動全て()に対して、その行動をした後最適(に近い)な行動をし続けた時の最終状態とその時の損失を損失関数と, reference policyと呼ばれる を用いて獲得する。このreference policyについては,訓練時は当然正解とスコアの計算式を知っているのでそれが最も増えるような行動を選ぶようにする、と言ったように人工的に作る。その上で全ての *1 の和を取って最適化を行うという流れ。
自分の理解をまとめると,まずある状態において次の行動がどれだけ有望かを計算する関数を最適化するのが目的。ただ学習データとして存在するのは最終状態だけで行動の軌跡は無いため、状態で行動を取りその後ベストに近い行動を取り続けたら最終的なスコアがどうなるか、ということをreference policyを元に計算して,それを用いて各状態における行動選択のための方策を最適化しているのだと思う。*2 ゲームAIを学習する時にある一手分だけモデルの方策に従ってそこからモンテカルロ木探索をして最終スコアを元に最適化するのに近いような気がした。