用于文本分类的多个句子和文档填充

时间:2018-06-12 01:47:03

标签: keras lstm text-classification rnn document-classification

鉴于一个文件由多个句子组成,每个句子都构成了令牌,每个令牌都有一个50维的预训练矢量,我认为张量将是(ndocs,nsents,nwords,ndims)来分类句子与文档的顺序上下文。

在典型的句子分类中,用0&s填充句子以获得相等长度的句子并允许随后的分类。通常通过创建具有nsamples x ntokens作为输入的2D嵌入层来进行。鉴于同样的情况,文档不会有相同数量的句子,这是否需要在文档中追加0行?

鉴于此处的任务是文档上下文中的句子分类,这可以表示为多对多问题,如下图所示,其中红色单位是句子(不是单词)。每个句子都是(nwords,ndims)。

Reference: Karpathy 资料来源:Karpathy

假设(ndocs,nsents,nwords,ndims)是正确的维度,您将如何继续嵌入图层和后续的lstm图层?

问题:

  • 文件是否应填零,以使所有文件的句子数相同?

  • 在(ndocs,nsents,nwords,ndims)的情况下如何初始化嵌入? Embedding()是否能够处理嵌套的令牌索引列表,或者每个句子是否应由Embedding()层表示,因此最终得到:

    doc1 = [sent1_embed_layer,sent2_embed_layer,sent3_embed_layer],doc2 = [sent1_embed_layer,sent2_embed_layer,sent3_embed_layer]

反过来:

embeds = [[doc1_sent1_embed_layer, doc1_sent2_embed_layer, doc1_sent3_embed_layer], [doc2_sent1_embed_layer, doc2_sent2_embed_layer, doc2_sent3_embed_layer]]

在下面添加一些代码,说明如何准备数据以获得上述数据结构(假设每个句子中的标记已经映射到它们的索引)。

max_sent_length = 100
max_sents = 70

# pad sentences to max length and pad documents to max number of sentences
padded_docs = []
for doc in docs:
    padded_sents = []   
    for sent in doc:
        padded_sents.append(pad_sequences(sent, max_length=max_sent_length))
    padded_doc = padded_sents
    while len(padded_doc) < max_sents:
        padded_doc.append([0]*max_sent_length)

    padded_docs.append(padded_doc)

# now we have a list of docs, each consisting of an equal number of sentences, each consisting of an equal number of token indices

0 个答案:

没有答案