假设我有一个名为 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/