You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Amazon评论数据集,Word2Vec结合TF-IDF遇NaN值问题求助

解决Word2Vec与TF-IDF结合时出现NaN值的问题

嘿,我来帮你搞定这个问题!你遇到的invalid value encountered in true_divide报错和所有sent_vec都是NaN的情况,核心原因很明确:你的weight_sum变量在某些句子里变成了0,导致执行sent_vec /= weight_sum时触发了除以0的操作,直接生成了NaN。咱们一步步拆解原因,再给出针对性的修复方案:

问题根源拆解

  • 情况一:某个句子里的所有词,要么不在Word2Vec模型的词汇表中,要么对应的TF-IDF值为0,最终导致weight_sum累加后还是0,除以0就会得到NaN。
  • 情况二:list_of_sent和final_data['CleanedText']的顺序不匹配,导致遍历的句子和TF-IDF矩阵的行对应不上,也会出现大量找不到词、权重为0的情况。

修复方案与优化代码

我给你调整了代码,既解决了除以0的问题,还优化了效率:

1. 先校验数据一致性

首先确保你的句子列表和TF-IDF矩阵的行数完全匹配,避免行对应错误:

assert len(list_of_sent) == final_tf_idf.shape[0], "句子列表和TF-IDF矩阵的行数不匹配!"

2. 修改核心循环逻辑

把原来的循环改成下面这样,重点处理weight_sum为0的场景,同时优化词索引的查找效率:

# 提前把TF-IDF特征名转成字典,提升查找速度(比list.index()快很多)
tfidf_word_to_idx = {word: idx for idx, word in enumerate(tfidf_feat)}
vector_dim = 50  # 和你的Word2Vec向量维度保持一致

tfidf_sent_vectors = []
row = 0

for sent in list_of_sent:
    sent_vec = np.zeros(vector_dim)
    weight_sum = 0.0
    
    for word in sent:
        # 跳过不在Word2Vec词汇表中的词
        if word not in w2v_model.wv:
            continue
        # 获取词在TF-IDF中的索引,不存在则跳过
        word_idx = tfidf_word_to_idx.get(word)
        if word_idx is None:
            continue
        # 获取该词的TF-IDF值,为0则跳过
        tfidf_val = final_tf_idf[row, word_idx]
        if tfidf_val == 0:
            continue
        
        # 累加加权后的词向量和权重总和
        sent_vec += w2v_model.wv[word] * tfidf_val
        weight_sum += tfidf_val
    
    # 处理权重总和为0的情况,避免除以0
    if weight_sum != 0:
        sent_vec /= weight_sum
    else:
        # 可选方案1:如果句子里有有效Word2Vec词,用平均词向量代替
        valid_word_vecs = [w2v_model.wv[word] for word in sent if word in w2v_model.wv]
        if valid_word_vecs:
            sent_vec = np.mean(valid_word_vecs, axis=0)
        # 可选方案2:直接保留全0向量(如果没有有效词)
    
    tfidf_sent_vectors.append(sent_vec)
    row += 1

3. 额外优化建议

  • 预处理文本时,可以过滤掉停用词和极低频率的词,减少无效词的数量,提升weight_sum不为0的概率。
  • 如果你的Word2Vec模型是用当前数据集训练的,可以检查一下训练时的参数(比如最小词频),避免漏掉太多常见词。

这样修改后,你就不会再遇到除以0的报错,NaN值的问题也能彻底解决啦!

内容的提问来源于stack exchange,提问作者kunwarvikrant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:39:28