如何从嵌入中总结句子?

问题描述 投票:0回答:1

我有一个句子,我想使用神经网络“总结”或分类。

句子中的每个单词都由大小为16的向量表示。我想使用可变长度句子的1d卷积,然后进行分类。

当我使用 conv1d 时,我无法弄清楚如何一个接一个地输入单词并获得任何摘要向量。

layer_1 = Conv1d(input_channel, output_channel, kernel = 3, stride=2) 
layer_2 = Conv1d(input_channel, output_channel, kernel = 3, stride=2) .. etc 

问题是,如果循环抛出句子中的单词并生成张量,那么我无法向网络提供数据。

For example,
I am new to this. (5 words -- this is variable)

I    -> [2, 1, .... 16 numbers]
am   -> [5, 7, .... 16 numbers]
...
this -> [9, 1, .... 16 numbers]

由于长度是可变的,我(不知道)无法输入 Conv1d 层。如果我转置它并设置 input_channel = 8,它会起作用,但它失去了意义。

有什么帮助吗?预先感谢。

以下认知不起作用。

# input_data = torch.randn((batch_size, max_seq_length, embedding_dim))  
# conv1d = nn.Conv1d(in_channels=embedding_dim, out_channels=num_filters, kernel_size=filter_size)

#================+++=#
batch_size     = 1  # 1 Sentene at a time, or 8 
max_seq_length = 12 # 12 words 
embedding_dim  = 4  # Vect size 4 for each word

num_filters    = 1
filter_size    = 3

input_data = torch.randn((batch_size, max_seq_length, embedding_dim))  
conv1d = nn.Conv1d(in_channels=embedding_dim, out_channels=num_filters, kernel_size=filter_size)
deep-learning nlp conv-neural-network sentiment-analysis
1个回答
0
投票
follow these & let me know if you have any questions:


 input_data = torch.randn((batch_size, max_seq_length, embedding_dim))  
    
    conv1d = nn.Conv1d(in_channels=embedding_dim, out_channels=num_filters, kernel_size=filter_size)
    
    if input_data.size(1) < max_seq_length:
        padding_size = max_seq_length - input_data.size(1)
        input_data = torch.cat([input_data, torch.zeros(batch_size, padding_size, embedding_dim)], dim=1)
    
    conv_output = conv1d(input_data.permute(0, 2, 1))  
    
    max_pooled = torch.max(conv_output, dim=2)[0]
© www.soinside.com 2019 - 2024. All rights reserved.