GRU 的下一个字符预测每次都会给出不同的结果

next character prediction with GRU gives different results each time

我正在尝试预测对话中情绪的演变。为此,我使用了 BERT 来获取情绪。然后对于每个电话,我将情绪编码为 P 表示积极,E 表示消极,N 表示中立。认为这只是一个下一个字符预测问题,我使用这个 https://www.tensorflow.org/text/tutorials/text_generation 教程逐字地在我自己的数据上训练它。问题是每次我 运行 推理时它都会给出不同的结果。

call_index sentiments
6081bdea52c838000aaa53d3 PNNNNPNPNPPENNNNNEPNNE
6081c27bde933a000a4384b0 PENNNNNEENNPNPEPNPPNNNNNNNNNNN
6081c54dd12abf000ab3c6f5 NNPNNNPNNNPPNNN
6081c666d7a1f7001cecce98 NNNNNPP
6081d8576eb5530043e3401f NNNNPNNNNNNNNNNNNNNNNNNPPNNNNNNNNNENNNNNNENNNN

最简单的文本生成方法之一是执行本教程中 ### 突出显示的行:

@tf.function
  def generate_one_step(self, inputs, states=None):
    input_chars = tf.strings.unicode_split(inputs, 'UTF-8')
    input_ids = self.ids_from_chars(input_chars).to_tensor()
    predicted_logits, states = self.model(inputs=input_ids, states=states,
                                          return_state=True)
    predicted_logits = predicted_logits[:, -1, :]
    predicted_logits = predicted_logits/self.temperature
    predicted_logits = predicted_logits + self.prediction_mask

    ### THE FOLLOWING LINE IS IMPORTANT ###
    predicted_ids = tf.random.categorical(predicted_logits, num_samples=1)

    predicted_ids = tf.squeeze(predicted_ids, axis=-1)
    predicted_chars = self.chars_from_ids(predicted_ids)
    return predicted_chars, states

你可能被提醒是因为你期望生成是确定性的,这对于天真的方法来说是正确的:总是 return 最有可能 character/word/token/etc,但这不是语言在全部。如果你对细节感兴趣,去看看斯坦福 NLP 课程(它可以在 YouTube 上免费观看),否则,好吧,你去吧,算法中有随机性。