怎么修改代码neg_embeds = self.embedding(neg_context_words)让他变成[batch_size, neg_count, embed_dim]
时间: 2024-09-25 09:18:10 浏览: 51
T_neg_float_6.rar_float_float_neg
如果你想要将`neg_embeds`从形状变为 `[batch_size, neg_count]` 转换为 `[batch_size, neg_count, embed_dim]`,意味着添加了一个额外的维度表示每个负面样本的嵌入维度,你需要在获取嵌入之前或者之后明确地添加这个维度。这通常是在循环或者列表推导中完成的,假设你的`embedding`函数返回的是一个形状为`(batch_size, embed_dim)`的张量:
```python
# 假设你有一个负采样词汇list,neg_context_words
# 假设embed_dim已经确定
# 使用numpy 或者 torch 的 expand 或 replicate 函数填充额外维度
neg_count = len(neg_context_words)
neg_dim_repeated = [self.embed_dim] * neg_count
neg_dim_tensor = torch.tensor(neg_dim_repeated).unsqueeze(0) # 添加了batch_size维度
# 确保neg_dim_tensor形状为(batch_size, 1)
neg_dim_batch = torch.broadcast_to(neg_dim_tensor, (batch_size, 1))
# 然后应用embedding并广播到所有negative sample上
neg_embeds = self.embedding(neg_context_words).expand(batch_size, neg_count, -1)
```
这样,`neg_embeds` 就会有所需的形状 `[batch_size, neg_count, embed_dim]`。
阅读全文