word2vec推荐系统KeyError: "单词'21883'不在词汇中"

问题描述 投票:0回答:1

代码在包含500000+实例的数据集上运行得非常好,但是每当我把数据集减少到50001000015000的时候,它就会抛出一个关键错误:单词 "***"不在词汇表中。 [1]: https:/i.stack.imgur.comYCBiQ.png我不知道如何解决这个问题,因为我对这个问题的了解很少,我还在学习中。

    purchases_train = []
    for i in tqdm(customers_train):
        temp = train_df[train_df["CustomerID"] == i]["StockCode"].tolist()
        purchases_train.append(temp)

    purchases_val = []
    for i in tqdm(validation_df['CustomerID'].unique()):
        temp = validation_df[validation_df["CustomerID"] == i]["StockCode"].tolist()
        purchases_val.append(temp)


    model = Word2Vec(window = 10, sg = 1, hs = 0,
                     negative = 10, # for negative sampling
                     alpha=0.03, min_alpha=0.0007,
                     seed = 14)

    model.build_vocab(purchases_train, progress_per=200)

    model.train(purchases_train, total_examples = model.corpus_count, 
                epochs=10, report_delay=1)


    model.save("word2vec_2.model")
    model.init_sims(replace=True)

    # extract all vectors
    X = model[model.wv.vocab]

    X.shape

    products = train_df[["StockCode", "Description"]]

    products.drop_duplicates(inplace=True, subset='StockCode', keep="last")


 products_dict=products.groupby('StockCode'['Description'].apply(list).to_dict()

    def similar_products(v, n = 6):
        ms = model.similar_by_vector(v, topn= n+1)[1:]
        new_ms = []
        for j in ms:
            pair = (products_dict[j[0]][0], j[1])
            new_ms.append(pair)

        return new_ms

        similar_products(model['21883'])
gensim word2vec
1个回答
0
投票

如果你得到一个 KeyError 说一个词不在词汇中,这就是一个可靠的指标,说明你要查的词不在训练数据中喂给 Word2Vec或出现的次数不够(默认 min_count=5)次。

所以,您的错误说明了词令牌 '21883' 在案文中至少出现5次以上(见附件一)。purchases_train)提供给 Word2Vec. 你应该做其中之一或两者。

  • 确保所有你要查找的词出现足够的次数,要么用更多的训练数据,要么用更低的数据。min_count. (然而,只有一个或几个出现的词往往是 来获得好的向量&而只需将包围词的向量的quaality拖低--所以保持这个值高于 1,甚至将其提高到高于默认的 5 摈弃 更多 罕见的单词,只要你有足够的数据,都是一个比较好的路径)。)

  • 如果你后面的代码要查找可能不存在的词,要么先检查它们是否存在(word in model.wv.vocab)或建立一个 try: ... except: ... 来抓&处理他们不在场的情况。

© www.soinside.com 2019 - 2024. All rights reserved.