Проблема реализации сети пула Attentive для ответа на вопрос - PullRequest
0 голосов
/ 27 сентября 2018

Я слежу за этой статьей для реализации и сетью Attentive Pooling для построения системы ответов на вопросы.В главе 2.1 говорится о слое CNN:

Extract from the original paper, chapter 2.1

, где q_emb - это вопрос, где каждый токен (слово) был внедрен с использованием word2vec,q_emb имеет форму (d, M).d - размерность вложения слова, а M - длина вопроса.Аналогичным образом a_emb - это вложение ответа с формой (d, L).Мой вопрос: как производится свертка и как возможно, чтобы W_1 и b_1 были одинаковыми для обеих операций?По моему мнению, по крайней мере, b_1 должен иметь разные размеры в каждом случае (и это должна быть матрица, а не вектор ....).

На данный момент я реализовал эту операцию в PyTorch.:

### Input is a tensor of shape (batch_size, 1, M or L, d*k)
conv2 = nn.Conv2d(1, c, (d*k, 1))

1 Ответ

0 голосов
/ 10 октября 2018

Я обнаружил, что авторы статьи доверяют читателям, чтобы они предполагали / выясняли здесь многое.Из того, что я прочитал, вот что я мог бы получить:

  1. W1 должно быть 1 X dk матрицей, потому что это единственная форма, которая будет иметь смысл, чтобы получить Q как c X M matrix.
  2. Предполагая, что b1 не обязательно должно быть матрицей.Исходя из вышеизложенного, вы можете получить матрицу c X 1 X M, которую можно легко преобразовать в матрицу c X M, а b1 может быть вектором c X 1, который можно транслировать и добавлять к остальной части матрицы.

Поскольку c, d и k являются гиперпараметрами, вы можете легко иметь одинаковые W1 и b1 для Q и A.

Это то, что я думаю до сих пор, я буду перечитывать и редактировать на случай, если что-нибудь не так.

...