第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將新詞向量添加到 gensim.models.keyedvectors 并計算

如何將新詞向量添加到 gensim.models.keyedvectors 并計算

寶慕林4294392 2022-03-09 20:57:44
根據(jù)Gensim 在 WordEmbeddingKeyedVectors 上的頁面,您可以逐步添加新詞向量的新鍵值對。但是,在使用預(yù)訓(xùn)練的向量及其標(biāo)簽初始化 WordEmbeddingKeyedVectors,并向其添加新的看不見的模型推斷詞向量后,該most_similar方法無法再使用。from gensim.models.keyedvectors import WordEmbeddingsKeyedVectorstest = WordEmbeddingsKeyedVectors(vector_size=3)test.add(entities=["1", "2"], weights=[np.random.randint(5, size=3),                                   np.random.randint(5, size=3)])test.most_similar("2") #THIS WORKStest.add(entities=['3'], weights=[np.random.randint(5, size=3)])test.most_similar("3") #THIS FAILS我希望輸出是與輸入標(biāo)簽最相似的矢量標(biāo)簽列表,但輸出是:IndexError:索引 2 超出軸 0 的范圍,大小為 2
查看完整描述

2 回答

?
人到中年有點甜

TA貢獻1895條經(jīng)驗 獲得超7個贊

事實上,我已經(jīng)找到了解決這個問題的辦法。


在gensim.models.keyedvectors文件中class WordEmbeddingKeyedVectors,我們可以從


def init_sims(self, replace=False):

    """Precompute L2-normalized vectors."""

    if getattr(self, 'vectors_norm', None) is None or replace:

        logger.info("precomputing L2-norms of word weight vectors")

        self.vectors_norm = _l2_norm(self.vectors, replace=replace)


def init_sims(self, replace=False):

    """Precompute L2-normalized vectors."""

    if getattr(self, 'vectors_norm', None) is None or replace:

        logger.info("precomputing L2-norms of word weight vectors")

        self.vectors_norm = _l2_norm(self.vectors, replace=replace)

    elif (len(self.vectors_norm) == len(self.vectors)): #if all of the added vectors are pre-computed into L2-normalized vectors

        pass 

    else: #when there are vectors added but have not been pre-computed into L2-normalized vectors yet

        logger.info("adding L2-norm vectors for new documents")

        diff = len(self.vectors) - len(self.vectors_norm)

        self.vectors_norm = vstack((self.vectors_norm, _l2_norm(self.vectors[-diff:])))

本質(zhì)上,原始函數(shù)所做的是,如果沒有self.vectors_norm,則通過 L2-normalizing 計算self.vectors。但是,如果其中有任何新添加的向量self.vectors沒有被預(yù)先計算為 L2 歸一化向量,我們應(yīng)該預(yù)先計算它們?nèi)缓筇砑拥絪elf.vectors_norm.


我會將其作為評論發(fā)布到您的錯誤報告@gojomo 并添加拉取請求!謝謝 :)


查看完整回答
反對 回復(fù) 2022-03-09
?
手掌心

TA貢獻1942條經(jīng)驗 獲得超3個贊

看來該操作并未清除由類似操作add()創(chuàng)建和重用的歸一化到單位長度向量的緩存。most_similar()

在執(zhí)行 之前或之后add(),您可以使用以下命令顯式刪除該緩存:

del test.vectors_norm

然后,您test.most_similar('3')應(yīng)該在沒有IndexError.


查看完整回答
反對 回復(fù) 2022-03-09
  • 2 回答
  • 0 關(guān)注
  • 450 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號