簡體   English   中英

使用LSTM預訓練Word2Vec,預測句子中的下一個單詞

[英]pre-trained Word2Vec with LSTM, predict next word in sentence

我有文字語料庫。 對於預處理數據,我使用gensim Word2Vec對所有文本進行了矢量化處理。 我不明白我做錯了什么。 作為基礎,我已經進行了此討論(以及不錯的教程), 預測下一個單詞 代碼: 源代碼

作為輸入,我有句子行。 我要接受每一行,然后接受此行的word [0]->預測word [1]。 然后使用word [0]和word [1]預測word [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_generated 但這不是generate_next工作方式。 此函數實際上生成num_generated單詞,並將它們附加到原始輸入。

如果要輸出固定長度的輸出,請嘗試:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM