2016-05-16 11 views
5

Używam operacji embedding_lookup do generowania gęstych reprezentacji wektorów dla każdego tokenu w moim dokumencie, które są podawane do splotowej sieci neuronowej (architektura sieci jest podobna do tej w a WildML article).Osadzanie tabeli wyszukiwania nie maskuje wartości wypełnienia

Wszystko działa poprawnie, ale kiedy podkładam dokument wsuwając do niego wartość dopełnienia, wyszukiwanie osadzenia generuje również wektor tego tokena. Myślę, że to podejście mogłoby zmienić wyniki w zadaniu klasyfikacji. To, co chcę osiągnąć, to coś podobnego do tego, co robi Torch LookupTableMaskZero.

1) Czy to jest prawidłowe, co chcę zrobić?

2) Czy już wdrożono coś takiego?

3) Jeśli nie, w jaki sposób mogę zamaskować wartość wypełnienia, aby zapobiec generowaniu odpowiedniego wektora?

Dziękuję z góry,

Alessandro

+0

Czy kiedykolwiek znalazłeś rozwiązanie? – Shatu

Odpowiedz

2

@Alessandro Suglia Myślę, że ta funkcja jest przydatna, niestety TF nie obsługują teraz. Jednym z obejść, aby uzyskać ten sam wynik, ale jest wolniejszy, jest dwa razy wyszukiwania. jak poniżej

lookup_result = tf.nn.embedding_lookup(emb, index) 
    masked_emb = tf.concat(0, [tf.zeros([1, 1]), 
          tf.ones([emb.get_shape()[0] - 1, 1]) 
    mask_lookup_result = tf.nn.embedding_lookup(masked_emb, index) 
    lookup_result = tf.mul(lookup_result, mask_lookup_result) 
-1

Wydaje się, że w modelu RNN, nie musimy zamaskować wartość dopełnienia tak długo, jak zamaskować straty (strata jest taki sam bez względu na to, czy mamy zamaskować padding wejściowego, otrzymuję wynik przez uruchomienie kodu testowego)!

Oczywiście zerowanie wypełnienia może przyspieszyć obliczenia o pomnożenie 0, gdy parametr sequence_len w parametrze tf.nn.dynamic_rnn nie zostanie przekazany.

Na koniec, jeśli model wykona interaktywną sekwencję (np. CNN, splot może wpłynąć na osadzanie padding), konieczne jest osadzanie z zerowym wypełnieniem.

Powiązane problemy