Thanks for the update.
In that case you would need to unsqueeze the channel dimension via:
emb_out = emb_out.unsqueeze(1)

and I would use 3 different conv layers in the first step via:
conv1 = nn.Conv2d(in_channels=1, out_channels=2, kernel_size=(2, 5))
conv1 = nn.Conv2d(in_channels=1, out_channels=2, kernel_size=(3, 5))
conv1 = nn.Conv2d(in_channels=1, out_channels=2, kernel_size=(4, 5))

After applying these conv layers, you could pass the outputs through the pooling layers and concatenate the the final features as given in the figure.
Note that your first figure indicates that no padding is used and thus the output activation would be smaller, while your current 3x3 filter approach is using a padding value of 1, since the feature tensor has the same number of rows.