使用语言模型tensorflow示例预测下一个单词

时间:2015-11-18 06:59:02

标签: python neural-network tensorflow

语言模型上的tensorflow tutorial允许计算句子的概率:

probabilities = tf.nn.softmax(logits)

在下面的评论中,它还指定了一种预测下一个词而不是概率的方法,但没有说明如何做到这一点。那么如何使用这个例子输出一个单词而不是概率呢?

lstm = rnn_cell.BasicLSTMCell(lstm_size)
# Initial state of the LSTM memory.
state = tf.zeros([batch_size, lstm.state_size])

loss = 0.0
for current_batch_of_words in words_in_dataset:
    # The value of state is updated after processing each batch of words.
    output, state = lstm(current_batch_of_words, state)

    # The LSTM output can be used to make next word predictions
    logits = tf.matmul(output, softmax_w) + softmax_b
    probabilities = tf.nn.softmax(logits)
    loss += loss_function(probabilities, target_words)

3 个答案:

答案 0 :(得分:1)

您需要找到概率的argmax,并通过反转word_to_id地图将索引转换回单词。要使其工作,您必须将概率保存在模型中,然后从run_epoch函数中获取它们(您也可以只保存argmax本身)。这是一个片段:

inverseDictionary = dict(zip(word_to_id.values(), word_to_id.keys()))

def run_epoch(...):
  decodedWordId = int(np.argmax(logits))
  print (" ".join([inverseDictionary[int(x1)] for x1 in np.nditer(x)])  
    + " got" + inverseDictionary[decodedWordId] + 
    + " expected:" + inverseDictionary[int(y)])

请参阅此处的完整实施:https://github.com/nelken/tf

答案 1 :(得分:0)

您的输出是TensorFlow列表,可以使用TensorFlow函数获取其最大参数(预测的最可能类)。这通常是包含下一个单词概率的列表。

At"评估模型"在此示例page中,您的输出列表在以下示例中为y

  

首先,我们要弄清楚我们预测正确标签的位置。 tf.argmax   是一个非常有用的函数,它给你的索引   沿某个轴的张量中的最高条目。例如,tf.argmax(y,1)   是我们的模型认为最有可能为每个输入的标签,而   tf.argmax(y_,1)是真正的标签。我们可以使用tf.equal来检查我们是否可以   预测符合事实。   correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))

另一种不同的方法是预先矢量化(嵌入/编码)字。你可以使用Word2vec对你的单词进行矢量化(因此嵌入它们)以加速学习,你可能想看看这个。每个单词都可以表示为300维意义空间中的一个点,你可以自动找到" N个单词"最接近网络输出的空间预测点。在这种情况下,argmax进行的方法不再起作用,你可以将余弦相似性与你真正想要比较的词进行比较,但是为此我不确定这实际上是如何导致数值不稳定的。在这种情况下,y不会将单词表示为要素,而是根据不同的模型将字嵌入在尺寸上,例如100到2000。你可以谷歌这样的东西更多的信息:"男人女王女王的话加词word2vec"更多地了解嵌入的主题。

注意:当我在这里谈论word2vec时,它是关于使用外部预训练的word2vec模型来帮助你的训练只有预嵌入输入和创建嵌入输出。那些输出'可以通过word2vec重新找出相应的单词,以找到相应的类似的顶部预测单词。

请注意,我建议的方法并不准确,因为只知道我们是否确切地预测了我们想要预测的单词。对于更软的方法,可以使用ROUGE或BLEU指标来评估模型,以防您使用句子或长于单词的内容。

答案 2 :(得分:-1)

函数返回概率而不是单词本身实际上是一个优点。由于它使用了具有相关概率的单词列表,因此您可以进行进一步处理,并提高结果的准确性。

回答你的问题: 您可以获取单词列表,迭代它,并使程序以最高概率显示单词。