2016-08-31 123 views
1

我正在運行TensorFlow的RNN(LSTM)語言模型示例here。 它運行並完美地報告困惑。使用TensorFlow的RNN(LSTM)語言模型,獲得給定序列的下一個單詞的概率分佈?

我想,雖然什麼是三件事情:

  1. 給定一個序列(例如W1 W5 W2000 W750)給我過的詞彙的下一個單詞的概率分佈。我不知道如何在教程中使用模型。

  2. 我希望模型返回最可能序列的排名(例如n-grams),可以給出n作爲輸入。

  • 給定一個序列,我想這是概率。
  • 我是TensorFlow和RNN的新手,所以請告訴我,如果您需要比我提供的更多信息。

    該語言模型的代碼是here

    回答

    2

    我是tensorflow和rnn的新手,所以這裏是我對你的問題的思考。 假設你有一個由2000個單詞組成的語料庫(太小),第i個單元格的輸出是一個具有2000個元素的向量,每個元素對應一個概率,這個向量是第(i + 1)個單詞的預測概率分佈。 回到你的問題。

    1.你只需要輸入[w1,w5,w2000,w750]到rnn,並且你得到四個向量,每個向量有2000個元素(語料庫中的單詞數量),然後你拿起最後一個輸出矢量,這就是第5個單詞的預測概率分佈,你也可以對這個矢量做一個argmax來找出第5個單詞最可能的單詞。

    2.我不知道這個問題,即使我可以給任何給定的序列分配一個概率。

    3.也考慮到你的輸入[w1,w5,w2000,w750],在計算rnn後,你有四個輸出向量表示爲[v1,v2,v3,v4],然後你只需要找到w5在v1中,w2000在v2中,w750在v3中,並乘以這些概率,這就是你輸入的概率。(因爲v4用來預測這個序列的下一個單詞,所以沒有使用v4,因爲它通常是不用的起始令牌)

    編輯:

    一旦你已經訓練你的模型,你應該得到一個嵌入矩陣embedding,一個RNN細胞cell和SOFTMAX權/偏見softmax_w/softmanx_b,您可以用這三樣東西

    python def inference(inputs): """ inputs: a list containing a sequence word ids """ outputs = [] state = cell.zero_state(1,tf.float32) # 1 means only one sequence embed = tf.embedding_lookup(embedding,inputs) sequence_length = len(inputs) for i in range(sequence_length): cell_output,state = cell(embed[:,i,:],state) logits = tf.nn.xw_plus_b(cell_output,softmax_w,softmax_b) probability = tf.nn.softmax(logits) outputs.append(probability) return outputs 的最終輸出一個列表方含len(inputs)矢量/張量生成的輸出,你可以用sess.run(tensor)獲得在numpy.array形式張量的值。 這是我寫的一個簡單的函數,應該給你一個關於如何在完成培訓時生成輸出的總體思路

    +0

    我不知道如何提供輸入並獲取代碼中的輸出。 – Ash