私は theano でバイリンガルのオートエンコーダーに取り組んでいます。このチュートリアルを参考にして、2 つの単一言語オートエンコーダーを作成しました。それぞれが文のワンホットベクトルを取り、100 次元の numpy 配列である潜在表現を作成します。次に、これら 2 つ (lat_1、lat_2) を連結すると、ここで問題が発生します。潜在表現の 1 つを 50% のノイズでマスクして、ある言語が他の潜在表現を手がかりとして再構築する必要があるようにしたいと考えています。理論的には、これは各エポックを交互にするため、両方が最適な表現になります。
現時点では、片側だけでなんとかできたと思います。私の考えは、最初に self.corrupted 変数を追加して 0 に設定し、各エポックの後に変数を変更して交互にすることでした。これが私がこれのために追加したコードです。
def get_corrupted_concat(self, lat_1, lat_2, corruption_level):
if self.corrupted == 1:
corr_lat_1 = self.get_corrupted_input(lat_1, corruption_level)
concatenated = T.concatenate((corr_lat_1, lat_2), axis=1)
self.corrupted = 0
print('corrupting lat_1')
else:
corr_lat_2 = self.get_corrupted_input(lat_2, corruption_level)
concatenated = T.concatenate((lat_1, corr_lat_2), axis=1)
self.corrupted = 1
print('corrupting lat_2')
return concatenated
ただし、トレーニング中は、最初に 'corrupting lat_1' を 1 回だけ出力し、トレーニングを続行します。これを交互にする方法を知っている人はいますか?