我正在构建一个双向LSTM来进行多类句子分类。
我总共有13个类可供选择,我将LSTM网络的输出乘以维数为[2*num_hidden_unit,num_classes]
的矩阵,然后应用softmax以使句子的概率落入13个类中的1个。
因此,如果我们将output[-1]
视为网络输出:
W_output = tf.Variable(tf.truncated_normal([2*num_hidden_unit,num_classes]))
result = tf.matmul(output[-1],W_output) + bias
我得到了我的[1, 13]
矩阵(假设我暂时不使用批次)。
现在,我也有一些信息表明给定的句子不属于给定的类,我想限制给定句子考虑的类数。因此,比方说,对于给定的句子,我知道它只能落在6个类中,所以输出应该是维数矩阵[1,6]
。
我想到的一个选项是在result
矩阵上放置一个掩码,我将对应于我想要保留的类的行乘以1,将我想要丢弃的行乘以0,乘以这样我就会丢失一些信息,而不是重定向。
任何人都知道在这种情况下该怎么办?
答案 0 :(得分:0)
我认为你最好的选择是,正如你所描述的那样,使用加权交叉熵损失函数,其中“不可能类”的权重为0,其他可能类的权重为1。 Tensorflow具有加权交叉熵损失函数。
另一个有趣但可能不太有效的方法是提供您现在所掌握的关于您的句子在某个时间点(可能在结束时)可以/不能进入网络的任何类别的信息。