Python 用LSTM预先训练单词2VEC,预测句子中的下一个单词

Python 用LSTM预先训练单词2VEC,预测句子中的下一个单词,python,machine-learning,keras,nlp,lstm,Python,Machine Learning,Keras,Nlp,Lstm,我有一个文本语料库。对于预处理数据,我使用gensim Word2Vec对所有文本进行了矢量化。 我不明白我到底做错了什么。作为基础,我进行了这一讨论(以及很好的教程)。代码: 作为输入,我有几行句子。我想记下每一行,然后记下这行的单词[0]->预测单词[1]。然后使用单词[0]和单词[1]预测单词[3],依此类推到行尾 在本教程中,每次预测单词的固定长度。 我所做的: def on_epoch_end(epoch, _): print('\nGenerating text after

我有一个文本语料库。对于预处理数据,我使用gensim Word2Vec对所有文本进行了矢量化。 我不明白我到底做错了什么。作为基础,我进行了这一讨论(以及很好的教程)。代码:

作为输入,我有几行句子。我想记下每一行,然后记下这行的单词[0]->预测单词[1]。然后使用单词[0]和单词[1]预测单词[3],依此类推到行尾

在本教程中,每次预测单词的固定长度。 我所做的:

def on_epoch_end(epoch, _):
    print('\nGenerating text after epoch: %d' % epoch)
    for sentence in inpt:
        word_first=sentence.split()[0]
        sample = generate_next(word_first, len(sentence))
        print('%s... -> %s' % (word_first, sample))
我取第一个单词,然后用它生成下一个单词。作为第二个参数,我给出了句子的长度(而不是教程中的
num_generated=10
)。但这对我一点帮助都没有。每次我得到输出预测序列的单词随机(在我看来)长度

我做错了什么以及如何修复它?

我的测试脚本:

texts = [
    'neural network',
    'this',
    'it is very',
]
for text in texts:
  print('%s... -> %s' % (text, generate_next(text, num_generated=5)))
输出:

neural network... -> neural network that making isometry adopted riskaverting
this... -> this dropout formalize locally secondly spectrogram
it is very... -> it is very achievable machinery our past possibly
您可以看到输出的长度是num_generated加上输入的长度

我猜您希望看到所有输出的长度都是生成的
num\u
。但这不是
generate\u next
的工作方式。此函数实际生成
num\u生成的
单词,并将它们附加到原始输入中

如果您想要固定长度的输出,请尝试:

generate_next(text, num_generated=5-len(text.split()))
我的测试脚本:

texts = [
    'neural network',
    'this',
    'it is very',
]
for text in texts:
  print('%s... -> %s' % (text, generate_next(text, num_generated=5)))
输出:

neural network... -> neural network that making isometry adopted riskaverting
this... -> this dropout formalize locally secondly spectrogram
it is very... -> it is very achievable machinery our past possibly
您可以看到输出的长度是num_generated加上输入的长度

我猜您希望看到所有输出的长度都是生成的
num\u
。但这不是
generate\u next
的工作方式。此函数实际生成
num\u生成的
单词,并将它们附加到原始输入中

如果您想要固定长度的输出,请尝试:

generate_next(text, num_generated=5-len(text.split()))