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

TensorFlow中如何遍历张量实现嵌入查找并计算用户平均词嵌入?

生成用户平均词嵌入Tensor的解决方案

嘿,我来帮你搞定这个需求!你想要的是每个用户对应词向量的平均嵌入,最终生成的Tensor形状应该是 (N, 100) ——其中N是用户总数,100正好匹配你嵌入矩阵的列数。下面我分步骤给你讲清楚怎么做,再附上代码示例。

核心思路

  1. 字符串转索引:因为你的user_words里是字符串形式的词,得先转换成嵌入矩阵对应的整数索引(你需要一个词到索引的映射字典,比如word_to_idx)。
  2. 提取对应嵌入:根据索引从word_emb里取出每个词的嵌入向量。
  3. 计算平均嵌入:对每个用户的所有词嵌入求均值,得到该用户的代表向量。
  4. 堆叠成最终Tensor:把所有用户的平均向量堆叠起来,就得到了目标形状的Tensor。

PyTorch实现示例

import torch

# 假设你已经有词到索引的映射字典
word_to_idx = {'20': 0, '56': 1, '58': 2, '10': 3, '105': 4}
# 示例嵌入矩阵,形状为[词汇表大小, 100]
word_emb = torch.randn(5, 100)
# 你的用户词列表
user_words = [['20','56'],['58','10','105']]

# 初始化存储用户平均嵌入的列表
user_avg_embs = []
for words in user_words:
    # 将当前用户的词转成索引张量
    indices = torch.tensor([word_to_idx[w] for w in words])
    # 从嵌入矩阵中提取对应的词向量
    word_vectors = word_emb[indices]
    # 对词向量求平均(dim=0表示沿着词的维度计算均值)
    avg_vector = word_vectors.mean(dim=0)
    user_avg_embs.append(avg_vector)

# 堆叠所有用户的平均向量,得到最终Tensor
final_user_embs = torch.stack(user_avg_embs)
print(final_user_embs.shape)  # 输出: torch.Size([2, 100])

TensorFlow实现示例

如果你用TensorFlow,思路完全一致,代码如下:

import tensorflow as tf

word_to_idx = {'20': 0, '56': 1, '58': 2, '10': 3, '105': 4}
word_emb = tf.random.normal((5, 100))
user_words = [['20','56'],['58','10','105']]

user_avg_embs = []
for words in user_words:
    indices = tf.convert_to_tensor([word_to_idx[w] for w in words], dtype=tf.int32)
    # 用tf.gather提取对应嵌入
    word_vectors = tf.gather(word_emb, indices)
    avg_vector = tf.reduce_mean(word_vectors, axis=0)
    user_avg_embs.append(avg_vector)

final_user_embs = tf.stack(user_avg_embs)
print(final_user_embs.shape)  # 输出: (2, 100)

额外处理:空词列表的情况

如果存在用户没有任何词(空列表),可以给这类用户分配一个默认向量(比如零向量),避免报错:

# PyTorch版本的空列表处理
for words in user_words:
    if not words:
        # 用零向量作为默认值
        avg_vector = torch.zeros(100)
    else:
        indices = torch.tensor([word_to_idx[w] for w in words])
        word_vectors = word_emb[indices]
        avg_vector = word_vectors.mean(dim=0)
    user_avg_embs.append(avg_vector)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:42:30