InferSent的代码实现

本文介绍了作者在GitHub上实现的InferSent项目,主要讨论了模型结构,包括选择的BiLSTM with max pooling作为sentence encoder,以及如何通过替换为GRU来提高计算速度。此外,还提供了用于生成sentence embedding的代码和模型保存与加载的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我最近抽空完成了一个新的github项目–InferSent 。 关于InferSent前面的文章有过介绍。我实现它的原因有二:一是因为算法本身简单,二是因为它在各种NLP任务上表现可以和其他state-of-art的模型对标。

InferSent的模型结构如下:
这里写图片描述

InferSent选择了NLI任务用来训练句子embedding,对应的数据集是SNLI,前文有介绍,这里不再赘述。 作为premise和hypothesis的句子共享同一个sentence encoder。 论文实验了LSTM and GRU, BiLSTM with mean/max pooling, Self-attentive network, Hierarchical ConvNet。 结论是BiLSTM with max pooling在迁移学习中综合表现最好。

我在代码里实现了两种encoder,DAN(deep averaging network) 和 BiLSTM with max pooling。 实现后者是因为其作为encoder表现最优,实现DAN仅仅是因为它简单,可以做一个基线算法。

def bilstm_as_encoder(sent_padded_as_tensor, word_embeddings,
layer_size, hidden_size=100, sent_length=50, embedding_size=300):
    embed_input = tf.nn.embedding_lookup(word_embeddings,
sent_padded_as_tensor)
    print("sent_padded_as_tensor: "+str(sent_padded_as_tensor))
    print("embed_input: "+str(embed_input))

    cell_fw = tf.nn.rnn
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值