ブログではないです

ブログでなくはないです

COLING2016 2日目


Tutorial T-5

Translationese: Between Human and Machine Translation [Shuly Wintner]
スライド

機械翻訳と、Translationese(翻訳された文章の文体含む特徴)についてのお話。 (人手で)翻訳された文章(以下translated, [T])は元々その言語で書かれた文章(original, [O])と比べて語彙のバリエーションに乏しくなる・シンプルで汎用的な表現を好む・句読点や括弧が多くなる、などといった特徴がある。そうした要素に注目した研究。

Text Classification

まずはtranslated / originalの分類タスクについて。 上記で述べたように、translatedではoriginalと比べて文体が独特のものとなるので、その性質を捉えうるようなfeature (文の長さ・content-wordのカウント etc.. ) を列挙して分類し、accuracyで比較している。 結論を言うと、original / translated 間の単語の出現パターン (スライドp37、単語のランクとPMIをプロットしたもの) が結構近い形をしてるにも関わらず、 単語・文字のuni/bi/tri-gramなどを使ったSVMでin-domainの文章に関してはほぼ完璧に解けてしまう。 一方、out-domainの文章に関しては60~70%前後。

また、教師なしの方法についても紹介している。 Function words / (Char or POS) tri-gram などをfeatureとしてクラスタリングした後、そのクラスタ内のテキスト・対象ラベルのテキストを使って言語モデルを訓練し、そのJensen-Shannon divergence (JSD) によって各クラスタがOriginal / Translated のどちらに対応するかを決める、というもの。精度は使うfeatureによって89~96% くらい。

<memo>
INTERFERENCE - 原言語側の性質が翻訳結果のフレーズの現れやすさに影響を及ぼすこと。 例えば英語ードイツ語間の翻訳を考えた時、"one is" は英語で生じやすく、"doch" はドイツ語で生じにくい。 前者については元となるドイツ語側で"Man ist" というそのままの表現が存在するため、一方後者は"doch"という言葉がドイツ語側で様々な使われ方をするので英語側ではこの表現、というような一対一対応を取りにくいから。 翻訳された文章のn-gram特徴量などでcaptureできる、と述べている。

ここから機械翻訳の話。実験はMosesでやったらしい。

Language Models

機械翻訳における言語モデルの工夫。前述した通り、Original / Translated の文体の違いを考えると、言語モデルは対象言語の文章(Original) から構築するよりも、翻訳後の対象言語の文章(Translated)を用いて構築したほうがいいのではないか?という話。ある種のdomain adaptation。 実験の結果、全ての言語についてその方がBLEUスコアが良くなっている。(下図はスライドp79より)

f:id:jack_and_rozz:20161212131310p:plain:w500

Direction Matters

もう1つ面白い実験として、パラレルコーパスを元がどっちの言語だったか、で分けてモデルを訓練して、翻訳の方向性の精度への影響を見ている。 つまり、英語 -> フランス語の翻訳モデルを訓練する際に
(a)英語をフランス語に翻訳したコーパス (b) フランス語を英語に翻訳したコーパス の2種類で訓練したモデルのBLEUを比較する。

まあ当然 (a) の方が良いわけだけども、ではコーパス内の各翻訳対が (a) なのか (b) なのか分かっている場合、単に全部一緒に使う以外にこのコーパスの翻訳方向を考慮してより良い結果を得ることが出来ないか?という話になる。そのための手法として別々にフレーズテーブルを作る、コーパスの翻訳方向をfeatureとしてそのまま渡す、などの手法について実験して比較している。
結局これもdomain adaptationの一種で、ドメインごとに訓練するか・ドメインの違いをfeatureとして与えるかという部分に帰着するのだと思う。

Cross-Classification

Interferenceの例のように原言語側の性質が翻訳後の文体に影響するのだとすると、翻訳前の言語が近い場合翻訳後の文章も近いものになると考えられる。 英語の文章に対するO/T分類タスクの話に戻り、「言語Aから英語に翻訳した文章」の分類を「言語Bから英語に翻訳した文章で訓練した分類器」で行う。 その結果は以下の通り(スライドp94より)で、言語学的に近い言語同士は翻訳後も似たものになる事が確認出来た、という主張をしている。

f:id:jack_and_rozz:20161212131644p:plain:w200

それに加えて、ヨーロッパ系の14の言語から英語に翻訳したものを用いて、それが元々どの言語から翻訳されたかを推定するタスク(精度は76%程度) や、翻訳後の文章に対して階層的クラスタリングを行うと、言語学的に近い言語同士でそこそこまとまるようなツリーが得られた、というような実験も紹介していた。

COLING2016 1日目

内容の簡単なメモ、覚えておきたいこと、感想など。
聞きながら書いてるのでところどころ怪しいかも。


Tutorial T-2 : Chinese Textual Sentiment Analysis: Datasets, Resources and Tools [Lun-Wei Ku and Wei-Fan Chen]

スライド

中国語の評判分析に関する話。講演者が開発しているCSentiPackage内のCopeOpi ・UTCNNというツールで用いた手法とその効果についてが主。

前半はSentiment Analysisの基本的な話。そもそも分析結果をどう表現するのか? ラベル(ポジネガ、sentiment or non-sentiment)にclassificationする、 valence-arousal で表現するなど。
ラベル付けの単位についても。document, passage, sentence, wordと細かくなるほどアノテーションされたラベルは少なく、単語(文字)数も少ないため解析が難しい。

関連研究紹介。昔はSVMでやっていたが,近年はやはりDNN-basedな手法が人気。 attention + LSTMの定番パターンとか、sentence-embeddingを用いるとか。最近のキーワードはこんな感じ。
aspect
・domain adaptation for cross-domain/lingual
・DNN vs linguistic features
fine-grained
・crowdsourcing

その後で本題のCSenti packageについて。 前半はCopeOpiについて、中国語の性質と絡めた分析についての話(segmantationが必要だとかmorphologyの構造だとか)と、各種手法の組み合わせによる精度比較。

後半はCSentiPackageのUTCNN (User Topic Comment Neural Network)というモジュールについての話。この辺りちょっと面白かったので詳しめに。

FBFansというデータセットを用いて、FBの投稿とそれに対するコメント・投稿者やいいねを押した人、コメントをした人がどのような人かなどの情報からラベル推定するというもの。 基本的にはCNNで投稿文の各単語のword-embeddingを適当な単語幅のフィルタにかける。
その際に、Author / Commenter / Liker / Topic (from LDA) など、注目する各ドメインに対して Matrix / Vector でembedding layerを準備する。
その後、投稿の内容であれば「投稿者 + いいねをした人」のembedding(Matrix) それぞれをMax-poolingすることで、その投稿に関する人全体についてマイルドに表すようなembedding(matrix) が構築される。そのmatrixを用いて投稿文中の単語に対して、窓幅Nで word embeddingを変換してCNNのフィルタに通し、あるドメインから見た時の文書の意味表現を構築している。

以下が全体図 。(配布スライドのp87より)

f:id:jack_and_rozz:20161211112400p:plain

色々工程を踏んでいるので複雑になっているが、結局 * 注目するドメインに関して Matrix or Vectorの Embedding Layerを用意
* 複数ドメインが関わる(複数のトピック、複数の人間)場合、Max-poolingして調整
* 投稿文・コメント等の各単語について、ドメインごとのEmbedding(Matrix)に通して変換して分散表現を構築してconcat
* 投稿文だけじゃなく、Embedding(Vector)そのものもついでに最後のfeatureにくっつける

ということを全体としてはやっているように見える。

既存手法との比較とfeatureの有無による結果は以下の表。(スライドp88より) f:id:jack_and_rozz:20161211132758p:plain

domainのembeddingとしての取り入れ方に興味を引かれた。ユーザの違いという陽に与えられるドメインが存在する時に、それをどう取り入るのがベストなのか?vectorのembeddingとして扱って、どこかのレイヤにconcatしてやるべきなのか、matrixとして扱って各単語の畳み込み方を変えるべきなのか。今回はfeatureの比較はしているもののモデルの構造的は上記を全部やってる感じ。個人的にはそこが知りたい。

ただ、そもそものモデルとして画像と違って直接の入力に2次元的な広がりが期待されないテキストにCNNを使う、という部分がどうもやはり馴染めない・・・。複数ドメインのEmbeddingを調整する部分も、max-poolingするというのはCNNを使ったテキスト処理では一般的なのだろうがどうも乱暴に見える。まだaverageした方が良いんじゃないのか?

質問したら、LSTM系列でも恐らくそんなに変わらない性能が出ると考えている。ただ、N-gramに区切ってCNNを使ったほうが訓練が速いので、今はそうしているというようなことを言っていた。


Tutorial T-4 : Quality Estimation for Language Output Applications [Carolina Scarton, Gustavo Henrique Paetzold, and Lucia Specia]

スライド

parsing / translation・summarization(simplification)etc...といったNLPタスクの出力に関する自動評価について、shared taskの結果など参照しながらの話。 NLPタスクにおける出力結果に対してきっちり定まる数値評価が可能な指標、例えば翻訳であればBLEUなどが挙げられるが、そうした指標の下での数値的な改善が必ずしも人間の感覚での改善と一致するとは限らない。しかし逐一人手で評価するにはあまりにコスト高だというジレンマがある。 そのため翻訳・要約などの出力文に対して人間がどう評価するかを予測する事を目標としたタスク。

QATS 2016 shared taskという初のsimplificationに関する自動評価タスクが開催されたらしい。評価は出力されたテキストの5段階評価のregression, もしくは good/ ok/ bad の3段階clasifficationなどで。

自動評価システムのために必要なコンポーネントは以下のように分類される、と述べ、 Sentence, Word, Documentといった異なる長さのテキストに対するアプローチを検討していた。

  1. Definition of quality: what to predict and at what level ( Word/phrase, Sentence , Document , ...)
  2. (Human) labelled data (for quality)
  3. Features
  4. Machine learning algorithm
sentence-level QE

翻訳を始めとして一番主流なNLPタスクの出力結果。 出力の質に対して1~5のラベリングをして、QE結果と人間のラベルとの相関係数を見ている。 モデルとしてはSVMなどのkernel-basedの方法が多い。NN系はデータの少なさからまだなかなか訓練が難しくなる。 といってもPredicting HTER(Human-mediated Translation Edit Rate) @WMT16 の結果では結構RNNとSVMのハイブリッドな手法が上位にちらほら。

word-level QE

一部のアプリケーションではより細かな、例えば文の中で翻訳結果が怪しい場所にハイライトしたい・・・などのような時に単語レベルでQEしたい場合がある。文に比べてよりスパースになるので、当然さらに難しくなる。 出力結果に対してその単語をそのまま出力してよい = OK , 単語の置換 or 挿入が必要 = BAD の2値ラベルを推定して、gold standard とのF1値を比較。

モデルは
* それぞれの単語を独立にclassification
* CRFなどによるsequence labelling
* featureをまとめてNNで
などが考えられる。

Document-level QE

sentence-levelでのQE結果をシンプルに平均を取るなりすればDocument-level QEになるのでは?という考え方もあるが、ある出力文が完璧でも全体として意味の分からない文書になってしまう場合や、その逆などが十分に考えられる。そのため、今回featureとしてはこれまでの単語レベルでの並びやカウントに加えて、談話構造に関する情報(EDUやRSTのrelation)も用いている。

またターゲットととなるラベルについて、文の質の1~5段階などで数値化などといったものは元々主観的な指標であるが、Document-level QEのようにその長さから人手によるラベル付けのコストが大きい場合、よりばらつきが大きくなってしまう。既存研究ではBLEUやMETEORの値を推定する事を目標とすることが多いらしいが、こうした数値は文書全体の良し悪しとは独立に決まる指標であり、文書内の文脈や談話構造といったものを考慮できているかと考えると理想的なものとは言えない。
そのためここでは、出力結果に対する人間の編集率 HTER(Human-mediated Translation Edit Rate) を用いる事を提案している。 ラベルは文脈・編集順序に関わらずその文単体として修正されたものを  PE_1 、他の文との文脈との兼ね合いでさらに修正されたものを PE_2 としている。細かい基準・ラベル付けの手順は不明。

最終的なスコアはスライドによると以下の式。この辺り理解がかなり怪しい。

{ \displaystyle
w_1 ・ PE_1 × MT + w_2 · PE_2 × PE_1
}

MTはHTERの値、 PE_1, PE_2 は文脈に依らない・依る編集があったかどうか(0/1が正解ラベルとして入る?)だと思うのだけどちょっと自信がない部分。 このスコアについての推測値と実際の値の相関係数によって自動評価の精度を評価している。

Why Neural Translations are the Right Length [Xing+, EMNLP'16]

概要

SMTがbrevity penaltyなどを用いて翻訳結果の長さの調整に腐心しているのに対し、 NMTは翻訳に失敗していたとしても比較的長さは入力と同じになりやすい。 その理由を分析するために a, b の2種類のトークンのみを用いて、入力と全く同じ出力を返すようなencoder-decoderモデルを訓練し、 その際のLSTMのセル(4次元)の状態を入力ごとにプロットしている。

結果、明らかに長さに反応して増減しているセルやa, b の数、文頭に連続するaの数に反応するセルなどが確認され、 decoder側での長さに反応しているセルが規定値を取るとEOSの出力確率が激増する、という仕組みになっていると述べている。

次元数1000で実験した翻訳タスクでも同様で、ある入力が与えられたときの長さに影響しうるk個のセルの値を用いて出力文長に対するlogistic回帰を行った所 top-10のセルを用いて 87%~97% の精度が達成できている。

このように、LSTMのモデルの中にはっきりと長さに反応するセルが訓練されることで出力の長さがコントロールされている、という話。

雑感

翻訳タスクかつ単語ベースだと入出力の長さの対応は結構取れている事が多いだろうけど、 他のタスク(要約とか対話とか)や文字ベースの場合そのあたりの話はどうなるのだろう? Controlling Output Length in Neural Encoder-Decoders [Kikuchi+, EMNLP'16] のように他タスクをニューラルで解く際の文長に関する研究が有ることから、結構デフォルトで出力文長に関してちゃんと学習されているかは怪しい。

対話なんかも長い発言に対する応答が必ずしも長いとは限らないし、そもそも文字ベースになると単語では一対一で意味の対応が取れていた部分が全く当てにならなくなる。文字ベース翻訳はあまり試したことないけどdecodeの結果はどうなるのだろう?

Ridge Regression, hubness, and Zero-Shot Learning [Shigeto+, ECML'15]

概要

タイトルの通り、Zero-shot learningにおけるHubness問題の原因の考察とそのシンプルな解決法。 Zero-shot Learningはある事例空間Aからラベル空間Bへの写像を学習し、テスト時には写像後に近傍探索することで画像のラベル付けなどを行う。 ラベル空間そのものに対するマップを学習しているため、訓練データの事例にラベルXに対応するものが存在しない場合でもXがラベル空間上で点を持てば対応 可能である、という利点がある。

Hubness and Pollution: Delving into Cross-Space Mapping for Zero-Shot Learning [Lazaridou+, ACL-IJCNLP '15] でも似たような話があったが、普通にL2正規化を行って対応するラベルとの二乗誤差を最小化するように学習すると、ほとんどの事例が対応するラベル(Hub) が生まれてしまう、という問題。

事例空間を写像した時ラベル空間上では原点中心の何らかの分布になると仮定すると、ラベル空間で定義された点のうち原点付近のものは 事例空間を写像した点の近傍になりやすくなる。(特に高次元ベクトルでは次元の呪いから近傍点と遠傍点との距離の差は大きくなるため、その問題が顕著になる?)

重要なのは以下の2点。

(1) Hubが出現しない、ということは写像後の点  x とラベル空間の2点 y_1 , y_2 ( ||y_1||  \le ||y_2|| ) との距離を考えた時に原点からの距離に関わらず2点が近傍であり得る、つまり距離の2乗の期待値の差 \deltaが小さい事に相応する。また、論文の証明によると \deltaはラベル分布の分散に比例する。

(2) L2正規化を加えて二乗誤差によって写像の最適化を行った場合、写像後の分布の分散は写像前よりも小さくなる。(shrinkage)

筆者はこれらの考えから提案手法として、事例空間をラベル空間に写像するのではなくラベル空間を事例空間に写像する、つまり写像方向を逆にするだけで ラベル空間の分散は小さくなるため、Hubの出現が抑制される、と述べている。

論文:https://arxiv.org/pdf/1507.00825v1.pdf
スライド:http://cl.naist.jp/~yutaro-s/download/Shigeto_NL222_slides.pdf

A Dynamic Oracle for Arc-Eager Dependency Parsing [Goldberg+, COLING'12]

概要

係り受け解析器の訓練をオンライン学習で行う際、訓練データとして与えられる解析結果のツリー(oracle)はある操作、ある単語からある単語への係り受け関係(arc)を付与する、という操作のシーケンスとして表現され、モデルはある状況で1つ操作を選択する試行を繰り返して最終的なツリーを構成することとなる。

その際に、既存手法では分解したツリーをどのような順序で並べるかは何らかのアルゴリズムによって決定される。 筆者はこれをstatic-oracleと呼び、あるツリーから生まれるシーケンスはアルゴリズムによって一意に決まる。

例えば、(A,B,C,D,E) からの選択問題で (A, C, E) のセットが正解だった場合、「正解を左から取っていく」というアルゴリズムでは生成されるoracleは[A, C, E] であり、 [C, A, E] や [E, A, C] などの順序にはならない。

こうしたstatic-oracleで訓練した場合、上の例だと何かの拍子に 最初に E が選ばれてしまった場合、oracleの中には E が選ばれた状況で A, Cを選ぶようなものが存在しないため、oracleの与え方によってこうしたパターンの学習が行われない、つまり正解にたどり着く複数のルートのうち学習できるのが1つのみ、という事になってしまう。

これを改善するため、オンライン学習の途中でモデルのoracleに対するテストを行い、「モデルが選びそうな正解への道」をoracleとして与えてやる、という事をしている。

(全部のシーケンスを正解として与えてやれば良いんじゃないか?と思ったけどシーケンス長が大きくなった時にサイズがとんでもないことになる、という感じだろうか。)

Curriculum Learning [Bengio, ICML'09]

概要

Bengioの有名な論文。誰か読んでまとめた記事があるんじゃないかなと探してみたらとても分かりやすいのがあった。

人間が物事を学習する時、いきなり難しい問題を与えられるよりも簡単なものから始まって徐々に難しくしていった方が効率よく学習が行える、という経験的な感覚がある。これは機械学習でも同じことが言えるんじゃないか、という事を図形分類、言語モデルというタスクで実験的に確認した論文。

徐々に難しくする、ということはここでは複雑性の高いサンプルを徐々にデータセットに加えて行く、という事を指す。 そこで問題になるのはどういう方法で難しさを順位付けするかになるが、それはやはりタスクによって異なる。

実験

やっている実験は
1. ノイズを含むxによるyの分類
2. 図形の3クラス分類
3. 言語モデルでの実験

2.は簡単なデータとして正方形や正円、等辺三角形からなるBasicShapesと難しいデータとして長方形や楕円、不等辺三角形からなる GeomShapesの2種類のデータを用意した上で、全256epochのうち初めはBasicShapes, 途中からGeomShapesに切り替えることでCurriculumを実現している。 128epochで切り替えた時が一番結果が良く、すべてごちゃまぜで訓練した場合はfig.3で言う16epochで切り替えた時くらいの性能。

3.ではW=5を窓幅としてfeed-forward NNの言語モデルを用いている。その際のCurriculumとしては頻出上位5000語, 10000語.. というように区切った上で、窓内がその上位N語のみで構成されるものを簡単なサンプルとしている。

A Diversity-Promoting Objective Function for Neural Conversation Models [Li+, NAACL'15]

概要

A Persona-Based Neural Conversation Model [Li+, ACL'16] の一つ前の論文。
実験していてもそうだったが、seq2seqベースの対話はやはり典型的な応答 (e,g, I don't know. )が頻出する事が問題になるらしく、 それをどうにかしようという話。

手法

基本的な考え方としては  {\displaystyle
\hat{T} = argmax_T \{ \log{(T | S)} - \log{p(T}) \}
} を最大化することで生成される文がいわゆる典型的な表現であった場合にペナルティを加える、というもの。 簡単な式変形から明らかだが、結局  \log{p(S,T) \over {p(S)p(T)}} 、発話と応答の相互情報量を最大化していることに等しい。

これに加えて典型的な表現をペナライズする程度の調整が効くように 
\hat{T} = argmax_T \{ \log{(T | S)} - \lambda\log{p(T}) \}
(1)
としたものと、ベイズの定理から式変形して  \hat{T} = argmax_T \{ (1-\lambda)\log{(T | S)} - \lambda\log{p(S | T}) \} (2)
としたものの2種類を検討している.前者をMMI-antiLM, 後者を MMI-bidi と呼んでいる。 また、訓練時にλを最適化するのが現実的に難しいため、この手法はdecode時にだけ用いているらしい。decode時には改めて各種係数を最適化している。

(1) MMI-antiLM
ここで問題にしているのは、 p(T) をペナルティとすることは単純な言語モデルとしての性能を下げる事につながっているため,文法的におかしい文が出力されやすくなってしまうこと。 この際、入力をエンコードした情報は出力文の初めの方に強く影響しがちで、出力の後半になるほど出力部のみでの言語モデル(decoderの途中の出力)の影響が支配的になる。事実、普通にやると出力文の後半の方が文法がおかしくなるとのこと。そのため、適当に閾値  \gamma を決めた上で

 {\displaystyle U(T) = \prod^{L_t}_{i=1} p(t_i \ | \ t_1, t_2 , ... , t_I) \cdot g(i)
}

 {\displaystyle g(i) = \begin{cases}
1 \  \ (i \leq \gamma) \\
0 \  \ (i > \gamma)
\end{cases}
}

として、  p(T) U(T) に置き換えて最適化をしている。一種のattentionモデル。 こうすると、文全体の出力確率をペナライズするのではなく文の前半部分の出力確率をペナライズする事になるため、出力文の前半部に典型的なパターンが来ることを避けた上で、性能の劣化を避けている。ちょっとアドホックな気もするが、  g(i) を連続的に変化させるやりかたでは駄目だったとのこと。

 p(T)の部分、実装的にはどうしてるんだろう? decoder単体で別に訓練している?

(2) MMI-bidi
こっちでは、入力・出力を逆にしたseq2seqを学習して直接 { \log{(S \ | \ T)} }を求めている。 そこで問題になるのは、出力文の探索空間が広すぎるためありえる全ての出力文に対する  { \log{(S \ | \ T)} } の計算が現実的には不可能であること。 そのため、第一項だけを使ってbeam-searchからN-bestな応答を生成した上で、第二項を使って選択するというやり方にしている。

実験

データセット

  1. Twitter Conversation Triple Dataset
    [Sordoni, '15]のデータセットの拡張。

  2. OpenSubtitles dataset
    [Tiedemann, '09] による60M~70Mほどの映画での会話集。ただ、あるセリフを誰が喋っているのかが明記されていないため、話者が同一なのか異なるのかがわからない事が問題になる。そのため、 [Vinyal, '15]と同じやり方をする、

    OpenSubtitles datasetの中身を知らないためここの対処法の意味がよく分からない

もしくはInternet Movie Script Database と呼ばれるものを用いて、誰が喋っているのかを特定する、というやり方を取っている。

設定

4layer, hidden:1000, learning rate:0.1, batch:256
だいたい Vinyalとかがやる設定と同じ。

評価

BLEUと、生成の多様性を見るためにdistinct-1, distinct-2と呼ばれる、応答全体に含まれる1-gram, 2-gramの種類数を同じく1-gram,2-gramの総数で割ったものでも評価している。

結果

数値的には軒並み上昇。生成された応答も面白くなっている。しかし最適化してるものは同じなのにMMI-antiLMとMMI-bidiでそこまで差が出るものか。 (1) 出力文後半についてはペナライズしない、attention的なやり方を加える のと、(2) 第一項で生成したあと第二項で選択する、というようにフェーズを分ける というのが違いであるように読めたけど・・・。