簡體   English   中英

如何在開發數據上測試word2vec?

[英]How can I test a word2vec over development data?

在計算機任務中,要求實現word2vec算法,以使用神經網絡為某些單詞生成密集向量。 我實現了神經網絡,並通過訓練數據對其進行了訓練。 首先,如何在測試數據上對其進行測試? 該問題要求繪制一個圖表,顯示訓練期間(時期)訓練和測試數據的困惑性。 我可以為此做些損失,就像這樣:

EPOCH: 0 LOSS: 27030.09155006593
EPOCH: 0 P_LOSS: 24637.964948774144
EPOCH: 0 PP: inf
/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:121: RuntimeWarning: overflow encountered in double_scalars
EPOCH: 1 LOSS: 25349.086587261085
EPOCH: 1 P_LOSS: 22956.95998596929
EPOCH: 1 PP: inf
EPOCH: 2 LOSS: 24245.455581381622
EPOCH: 2 P_LOSS: 21853.32898008983
EPOCH: 2 PP: inf
EPOCH: 3 LOSS: 23312.976009712416
EPOCH: 3 P_LOSS: 20920.849408420647

我是通過以下代碼獲得的:

    # CYCLE THROUGH EACH EPOCH
    for i in range(0, self.epochs):

        self.loss = 0
        self.loss_prob = 0
        # CYCLE THROUGH EACH TRAINING SAMPLE
        for w_t, w_c in training_data:

            # FORWARD PASS
            y_pred, h, u = self.forward_pass(w_t)

            # CALCULATE ERROR
            EI = np.sum([np.subtract(y_pred, word) for word in w_c], axis=0)

            # BACKPROPAGATION
            self.backprop(EI, h, w_t)

            # CALCULATE LOSS
            self.loss += -np.sum([u[word.index(1)] for word in w_c]) + len(w_c) * np.log(np.sum(np.exp(u)))
            self.loss_prob += -2*np.log(len(w_c)) -np.sum([u[word.index(1)] for word in w_c]) + (len(w_c) * np.log(np.sum(np.exp(u))))

        print('EPOCH:',i, 'LOSS:', self.loss)
        print('EPOCH:',i, 'P_LOSS:', self.loss_prob)
        print('EPOCH:',i, 'PP:', 2**self.loss_prob)

但是,我不知道如何找到每個時期的培訓和發展數據的困惑。 基於這個問題 ,據說困惑是2**loss 但是,當我嘗試此公式時,獲得了INF 您能指導我如何計算困惑嗎? 我可以在當前代碼中執行此操作,還是應該對整個開發數據應用功能?

實際上, 2**20000溢出了浮點數。 您應該按照示例對損失進行歸一化,即除以訓練數據大小。 即使對它們進行求和,反向傳播也可以工作,因為除以常數不會更改導數,但是通過這種方式,損耗不會隨數據大小不變。

您可以使用十進制來解決INF問題。

import decimal
decimal.Decimal(2)**decimal.Decimal(loss)

暫無
暫無

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

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