使用TensorFlow';获得给定序列的下一个单词的概率分布;s RNN(LSTM)语言模型?

使用TensorFlow';获得给定序列的下一个单词的概率分布;s RNN(LSTM)语言模型?,tensorflow,lstm,language-model,Tensorflow,Lstm,Language Model,我正在运行TensorFlow的RNN(LSTM)语言模型示例。 它运行并完美地报告了这些困惑 我想要的是三件事: 给定一个序列(例如w1 w5 w2000 w750),请给出词汇表中下一个单词的概率分布。我不知道如何使用教程中的模型 我希望模型返回最可能序列的排名(例如n-grams),n可以作为输入 及 给定一个序列,我要它的概率 我是TensorFlow和RNNs的新手,所以如果您需要比我提供的更多的信息,请告诉我 语言模型的代码是。我也是tensorflow和RNN的新手,下面是我对您的

我正在运行TensorFlow的RNN(LSTM)语言模型示例。 它运行并完美地报告了这些困惑

我想要的是三件事:

  • 给定一个序列(例如w1 w5 w2000 w750),请给出词汇表中下一个单词的概率分布。我不知道如何使用教程中的模型

  • 我希望模型返回最可能序列的排名(例如n-grams),n可以作为输入

  • 给定一个序列,我要它的概率
  • 我是TensorFlow和RNNs的新手,所以如果您需要比我提供的更多的信息,请告诉我


    语言模型的代码是。

    我也是tensorflow和RNN的新手,下面是我对您的问题的思考。
    假设您有一个包含2000个单词(太小)的语料库,
    i-th
    LSTM单元格的输出是一个向量,该向量包含2000个元素,每个元素对应一个概率,该向量是
    (i+1)th
    单词的预测概率分布。
    回到你的问题上来

  • 您只需将输入
    [w1,w5,w2000,w750]
    馈送到RNN,就可以得到四个向量,每个向量有2000个元素(语料库中的单词数),然后选取最后一个输出向量,这是
    5th
    单词的预测概率分布,你也可以对这个向量进行argmax运算,找到
    5th
    位置最可能的单词

  • 我不知道这个问题,即使我能给任何给定的序列分配一个概率

  • 同样考虑到您的输入
    [w1,w5,w2000,w750]
    ,在计算RNN之后,您有四个输出向量,表示为
    [v1,v2,v3,v4]
    ,然后您只需要在
    v1
    中找到
    w5
    v2
    w2000
    的概率,
    w750
    v3
    中乘以这些概率,这就是您输入的概率(v4不使用,因为它用于预测此序列的下一个单词,w1也不使用,因为它通常是起始标记)

  • 编辑:

    一旦你训练了你的模型,你应该得到一个嵌入矩阵,一个RNN单元和一个softmax权重/偏差,你可以用这三样东西生成输出

    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(输入)
    vectors/tensors的列表,您可以使用
    sess.run(tensor)
    numpy.array
    的形式获取张量值
    这是我编写的一个简单函数,应该可以让您大致了解培训结束后如何生成输出。

    我对tensorflow和RNN也不熟悉,下面是我对您的问题的看法。
    假设您有一个包含2000个单词(太小)的语料库,
    i-th
    LSTM单元格的输出是一个向量,该向量包含2000个元素,每个元素对应一个概率,该向量是
    (i+1)th
    单词的预测概率分布。
    回到你的问题上来

  • 您只需将输入
    [w1,w5,w2000,w750]
    馈送到RNN,就可以得到四个向量,每个向量有2000个元素(语料库中的单词数),然后选取最后一个输出向量,这是
    5th
    单词的预测概率分布,你也可以对这个向量进行argmax运算,找到
    5th
    位置最可能的单词

  • 我不知道这个问题,即使我能给任何给定的序列分配一个概率

  • 同样考虑到您的输入
    [w1,w5,w2000,w750]
    ,在计算RNN之后,您有四个输出向量,表示为
    [v1,v2,v3,v4]
    ,然后您只需要在
    v1
    中找到
    w5
    v2
    w2000
    的概率,
    w750
    v3
    中乘以这些概率,这就是您输入的概率(v4不使用,因为它用于预测此序列的下一个单词,w1也不使用,因为它通常是起始标记)

  • 编辑:

    一旦你训练了你的模型,你应该得到一个嵌入矩阵,一个RNN单元和一个softmax权重/偏差,你可以用这三样东西生成输出

    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(输入)
    vectors/tensors的列表,您可以使用
    sess.run(tensor)
    numpy.array
    的形式获取张量值
    这是我编写的一个简单函数,应该可以让您大致了解在完成培训后如何生成输出。

    我知道这可能会晚一些,但无论如何我都会回答。 使用TensorFlow 2,可以使用
    model.predict_proba()
    函数获得构成模型的类的概率分布。在语言模型的上下文中,这将根据您使用的词汇表生成序列中下一个单词的概率分布

    至于你的第二个问题,我不知道是否可能。根据我的理解,这意味着您需要以稍微不同的方式训练您的语言模型。我假设之前,您使用序列的最后一个组件作为标签,但在本例中,您可以使用n-gram序列


    你问的最后一个问题也是我目前面临的一个问题。如果你能找到这个问题的答案,请告诉我。

    我知道这可能会晚一点,但无论如何我都会回答。 使用TensorFlow 2,可以获得cl上的概率分布