machine-learning - 如何对具有可变长度的分类数据进行编码,以便可以将其提取到 PyTorch 中的 nn.Embedding

标签 machine-learning pytorch data-mining encode word-embedding

假设我有一个名为 movie_genre 的数据字段,用于每个示例电影,它是从以下类型中选择的:

Action
Adventure
Animation
Comedy
...

对于每部电影,它可能包含多种类型:

mid    genres
1      Action | Adventure
2      Animation
3      Comedy | Adventure | Action

这意味着,电影的类型是一个变量列表。

如果我使用一个热向量来编码流派, Action 可以编码为(1, 0, 0, 0),冒险可以编码为(0, 1, 0, 0) ,等等。

因此,mid1 的电影可以编码为 (1, 1, 0, 0),mid2 的类型可以编码为 (0, 0, 1, 0),依此类推。

但是,pytorch 嵌入层 nn.Embedding 将包含索引的张量作为输入,而不是 one-hot 向量。那么我应该如何对数据进行编码,以便可以将其提取到嵌入层中?

最佳答案

目前我可以想到两种方法:

  • 将多标签问题转化为多类别问题。也就是说,为每个标签组合创建一个新标签(例如 Action | Adventure 成为其自己的标签),然后照常嵌入这些新标签。
  • 单独嵌入每个类别,并对列表中出现的所有类别的嵌入进行求和。

编辑:您可以使用 pytorch nn.EmbeddingBag 以高效的方式执行第二个操作:https://pytorch.org/docs/stable/nn.html?highlight=nn%20e#torch.nn.EmbeddingBag

关于machine-learning - 如何对具有可变长度的分类数据进行编码,以便可以将其提取到 PyTorch 中的 nn.Embedding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56972512/

相关文章:

machine-learning - 训练 TensorFlow 修改图像

machine-learning - 比 k 均值聚类更准确的方法

matlab - 如何使用 MATLAB 在卡车中查找木材?

python - 为什么损失函数在第一个纪元之后总是返回零?

dataset - 多维数据聚类

python - 防止 RandomizedSearchCV 预测 KNN 分类器的所有一类

python - 使用 CNN 进行图像反卷积

optimization - 如何使用带渐变但不调整权重的图层?

algorithm - 从全文搜索结果中提取小的相关位文本(如 Google 所做的那样)

c - 水库采样算法不起作用