Explainable Seq2Seq
by distribution observation

Target

利用latent的distribution來解釋seq2seq+ctl signal是怎麼實現的。

What Information does Encoder Save?

= what did encoder learn?

文字頻道: 可以點選其中一個頻道開啟文字對話

語音頻道: 可以點選其中一個頻道開啟語音通話

TA正在直播畫面,可以將屬標移過去觀看正在直播甚麼。

將直播畫面展開。

靜音自己麥克風 / 關閉別人聲音 / 設定

Experiment - final latent

Encoder

All

Sentences

Latent

result

colored with ctl signal position

Result

control target = 2

control target = 1

control target = 3

control target = 4

control target = 9

control target = 5

Detached

1. ctl pos = 1的distribution是獨立的。
2. ctl pos > 1的distribution會隨其值平移

will explain later.

(其實2和3也很遠)

Experiment - time & latent

Enc
GRU

All

Sentence

<SOS>

Latent

Latent

result

Enc
GRU

Latent

...

<EOS>

Enc
GRU

<5>

Enc
GRU

Enc
GRU

  • 看到EOS為止。

Result

time=1

time=2

time=3

time=14

1. 吃到第一/二個字的distribution是特別獨立的。
2. encoder知道現在是第幾個時間點。
> 接下來觀察的點一定要用同個時間,否則他們會就因為時間不宜樣而分群。

Why first 2 words are imp?

除了主詞比較容易重複,

貌似seq2seq學到了一些奇怪的東西。(合唱/男/女)

input的前兩個字(獨立部份) output
南无 南无观音菩萨音会
可是 就是我我们的
合唱 合唱一首歌曲不是的一首歌
合离 合我我我不你我相相爱
一转 一个人都不不断
谁来 谁是我的是一个人
她们 她的的的的的的的的的她已经了
男我 男我爱你爱你永远永远
一个 一一的的的的宏

Experiment - fixed time

Ex: 假如文本目前有

<SOS> <EOS> <1> <PAD> <PAD> <PAD> <PAD> <PAD>
<SOS>




<EOS>
<1> <PAD>
<SOS> <EOS> <2>
<SOS> <EOS> <5>
<SOS> <EOS>

1. 抓某個時間點的latent

2. 砍掉吃過EOS的

Result

  •  Encoder吃到<EOS>會有強烈的反應(distribution跳轉)
    
    • Encoder可能知道接下來要吃的是ctl signal。

Experiment - fixed time 2

Ex: 假如文本目前有

<SOS> <EOS> <1> <PAD> <PAD> <PAD> <PAD> <PAD>
<SOS>




<EOS>
<1> <PAD>
<SOS> <EOS> <2>
<SOS> <EOS> <5>
<SOS> <EOS>

1. 抓某個時間點的latent

2. 砍掉吃過ctl的

Result

  •  Encoder吃到<ctl>會再次跳轉,
    並且會依照ctl有不同的反應(同一開始的結論)
    

Is <PAD> important?

因為有batch的原因,因此短句後面通常都會有大量的<PAD>,這個<PAD>會造成什麼影響?

# of <PAD> & Accuracy

* Thanks to SDML_BetrayerLaBetrayer

Recap

吃到ctl

  • 大多neuron都會再吃<PAD>的時候進行調整。
  • 還沒調整完就拿去decode會因為distribution不一樣導致acc變低。

Experiment - fixed time 3

Ex: 假如文本目前有

<SOS> <EOS> <1> <PAD> <PAD> <PAD> <PAD> <PAD>
<SOS>




<EOS>
<1> <PAD>
<SOS> <EOS> <2>
<SOS> <EOS> <5>
<SOS> <EOS>

1. 抓某個時間點的latent

2. 吃<eos>以後的

Result

PHASE III

吃到ctl pos

(越深表示

指定位置越後面)

吃了7個<PAD>

trg = 1

吃了7個<PAD>

trg = 9

吃完指定字

trg = 9

吃完指定字

trg = 1

PHASE IV

透過PAD去校正

吃越多的<PAD>

吃越多的<PAD>

吃了7個<PAD>

trg = 2

  • 在一開始有提到trg=1和2與其他人是獨立的。
  • 吃越多<PAD>會越穩定並集中到右側。(右側較多聚集。)

越大的trg

Conclusion in Encoder

  • Encoder 的會知道現在當下是第幾個時間點。
    (rnn 自己會有一套 position encoding)。
  • trg = 1為special case。
  • Encoder的四個流程。
    • Phase I: 還沒吃到<EOS>前,匯集整句資訊。
    • Phase II: 吃到<EOS>的當下,估計可能是做總結或是準備要吃到control signal。
    • Phase III: 吃到control position,這表示ctl pos對這個任務是很重要的,並且可以依照pos分群。
    • Phase IV: 透過<PAD>去做調整,調到一個穩定態後變成完整的資訊。

Exchange Phase II & III

先吃ctl再吃<EOS>,例如:<SOS> 若 願 意 逗 留 1 寒 <EOS>

  • 如果test不照流程,(不告訴encoder該吃signal了),就會降低acc,並且ctl會混亂。

How does Decoder Process the Latent?

= what did decoder learn?

Experiment - time & latent

Dec
GRU

Encoder's

Latent

<SOS>

Latent

Latent

result

Dec
GRU

Latent

...

<EOS>

Dec
GRU

Dec
GRU

Dec
GRU

Latent

Result - 1

1. 吃到第一個字的distribution是特別獨立的。(解釋過了。)
2. decoder知道現在是第幾個時間點。(同encoder)
> 同encoder,接下來觀察的點一定要用同個時間,否則他們會就因為時間不宜樣而分群。

3. 看起來還有兩群? (左上和右下)

Time = 1

Time = 11

Result - 2

  • Decoder在time=ctl pos的時候
    會跳到另一個distribution,這表示decoder得知這個時間點是很重要的。

Time = Ctl pos

Time != Ctl pos

Experiment - fixed time

Ex: 假如輸出是

<SOS>
<EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS> <EOS>
<SOS>




<EOS>
<EOS> <EOS> <EOS>
<SOS> <EOS> <EOS> <EOS>
<SOS> <EOS> <EOS>
<SOS> <EOS>

抓某個時間點的latent

Distribution @ T=4

已經超過指定位置

剛好正在指定位置

下一個字是指定位置

下兩個字是指定位置

指定位置在三個位置之後(越深表示越近)

1. 在準備要輸出指定位置,distribution會跳轉(表示有行為表現)。

2.   在指定位置還在很遠的時候,latent有countdown的行為。

3.   在countdown = 2以內,latent會再跳轉兩次。

4.   在輸出完指定位置後,又會再跳轉一次。

Other T

T=2

T=6

T=8

T=12

Phase I:

距離target還很遙遠。顏色越深表示越近。

Phase II:

距離target還差一個字或兩個字

Phase III:

T = target。

Phase IV:

已經輸出完target。

不管什麼T都會有4階Phase,唯獨T越大countdown的行為區分越小

> 因此太長的句子中間都會是垃圾句。

Special Case - T = 1

T = 1時並沒有countdown的階段,所以會直接出從at trg開始。

因此trg = 1對於seq2seq是特例,所以encoder的latent是trg = 1時會有獨立行為。

Example in Phase

Phase I:

距離target還很遙遠。顏色越深表示越近。

Phase II + III:

距離target還差一個字或兩個字之類 + 指定字

Phase IV:

已經輸出完target。

我是我的我的的

我你的你的我的我的的

我要的你的的的的的的的

我的的你的的

我是我的是你的

我是我的的

是一个
不可以
不听到
是太多
在大北
不以为
在眼前
不说过
的搜索

握着握着的火种的种种彩虹
你的声音
啦啦啦啦
变得很美
为我的爱
愈愈愈愈愈
虹灯火阑珊
世界无与伦比
你心中燃烧
远不是我的
我不是你的
渐渐渐渐渐渐远
无无无无无无无无

Conclusion in Decoder

  • Decoder 的會知道現在當下是第幾個時間點。(同Enc)
  • Decoder的四個流程。
    • Phase I: 距離指定字3以上 - Decoder會Countdown並大概率輸出垃圾字。
    • Phase II: 距離指定字2以內,並對指定字做前序接龍。
    • Phase III: 輸出Control字
    • Phase IV: 對之前的文字做詞語接龍

Why Phase I sucks?

  • 可能是Latent的capacity不足以去做逆向接龍?(因為必須保有control signal的資訊)
    • 但是逆向接龍可以接約1~2個。
  • NSP的開始不好預測? (因為第一個是主詞,幾乎什麼都能接,所以就直接接P最高的"的")。

Normal Improve
Phase I

Target: 設計一個新的model讓結果看起來不要這麼疊字。

Bidirectional Decoder?

長度必須固定,否則反向會因為不知道怎麼倒數就會做不出來。

Bidirectional Decoder'?

Dec
GRU

Encoder's

Latent

<SOS>

Dec
GRU

...

<EOS>

Dec
GRU

Dec
GRU

Dec
GRU

Dec
GRU

Dec
GRU

Dec
GRU

Dec
GRU

Dec
GRU

...

<EOS>

<SOS>

Magic Improve
Phase I

Target:

用現有的model做出一個可能比較合理的句子

Work Flow

Input:

<SOS> 你 眼 中 的 温 柔 是 否 一 切 都 为 我 <EOS> 10

Output: 我的的的的我的的

Input - 2:

<SOS> 你 眼 中 的 温 柔 是 否 一 切 都 为 我 <EOS> 9

Output: 我的我的我我

Input - 3:

<SOS> 你 眼 中 的 温 柔 是 否 一 切 都 为 我 <EOS> 8

Output: 我的你的我我的

...

Iterative Inverse Cat

我不我的我我不后悔 >我不是我还是我最后悔
我一天一天一天的的黑 >这样的爱爱着你的的黑
我你你的我我我的的心 >你是你就是你给你的心
我是我的是我是你我的 >不要再见见你不是我的
我是我的的的的的方式 >你是我就是我的地方式
我是我的我的我的海洋 >我不是我就是我的海洋
我的的的的的你的会滑落 >我不是我还是你不会滑落
我的的的的我的的歌唱 >让我的爱你让我的歌唱 (example)
我们的个人人都不异议 >一个一个一个的人异议
我你的你的泪水流流淌 >可是我是我的眼泪流淌
我是你的我我我是为什么 >你是我就是我不会为什么
我在你的在你的的身边 >我不是我还是你的身边
我在在在我的在在哪里 >我在乎我站站在哪哪里

Naive

Inverse Cat

Q&A

Seq2Seq

By Arvin Liu

Seq2Seq

Explain Seq2Seq with control signal (what position needs to be what)

  • 1,097