缺乏文本特征(音乐类型)矢量化的想法



我正在创建一个赛道流行度的预测模型。我的特点之一是音乐类型。该变量包含许多唯一但相似的值,例如:"当代乡村"、"乡村流行"、"陷阱"、"低保真陷阱"。我正在寻找一种以数字表示该列的方法

我想根据属于特定流派的曲目的音频特征为我的音乐流派变量创建 1D 嵌入。这真的可能吗?

如果能提供任何帮助,我将不胜感激。

将流派视为标记,并训练每个流派的向量应该是可能的。

对于培训,您需要同时使用不同流派的"文本"——这些可能是用户分配给单个曲目的多种流派,或者某个用户的收听历史中的流派序列,或者某个艺术家作品中的流派序列等。

而且,我怀疑这种方法可以很好地工作,成功地将流派放入一个坐标空间中,在这个空间中,它们彼此之间的相对距离/方向类似于人类的判断。然后,这些"密集嵌入"可以用作其他下游ML技术的输入。

一些可能有帮助的想法:

  • 对于良好的密集嵌入,您需要空间维度远小于唯一令牌的计数。也就是说,连续维度的数量比"一热"编码要小得多。所以你可能不想折叠相关的流派(比如low-fi traptrap(——这会抛弃数据中可能有用的微妙之处,即使它们是嘈杂的,当 *2vec 训练的重点是能够学习/数字建模这些微妙之处时(只要有足够的上下文使用示例(。

  • 当对非真正自然语言的数据进行训练时,并且出于特定的预测目的,一旦您有了一种可重复的方式来为不同的模型评分,那么与通常默认值相去甚远的训练参数更有可能是最佳的。(例如,在大多数word2vec实现中,负采样中使用的幂参数固定在0.75- 但最近的一篇论文表明,在推荐应用程序中,非常不同的值可能明显更好。因此,它在最新版本的Pythongensim库中是可指定的。

将分类数据转换为数值数据时,我们有两个选项:

  1. 单热矢量
  2. 实体嵌入

当唯一列的数量很少(几百个(时,使用单热向量。如果我们有大量的独特特征(数千个(,则使用实体嵌入。将要素嵌入到 1D 矢量中,并了解要素的接近程度。在您的情况下,国家和乡村流行音乐将比国家和陷阱更密切相关。听起来您拥有大量独特的"流派"功能。因此,我会选择一种嵌入技术。

正如gojomo在他的回答中指出的那样,您将需要一个用于培训的语料库,该语料库一起使用不同的流派并开发评分系统。训练模型后,可以将训练的输出与其他 ML 技术进一步用于下游。

这可能不是最佳方法,您可以使用keras中的text.preprocessing。 它的工作原理如下:

max_words = 1000
tokenize = keras.preprocessing.text.Tokenizer(num_words=max_words, char_level=False)
tokenize.fit_on_texts(train_text) # fit tokenizer to our training text data
x_train = tokenize.texts_to_matrix(train_text)
x_test = tokenize.texts_to_matrix(test_text)

输出如下所示:

array([[0., 1., 1., ..., 0., 0., 0.],
[0., 1., 1., ..., 0., 0., 0.],
[0., 1., 1., ..., 0., 0., 0.],
...,
[0., 1., 1., ..., 0., 0., 0.],
[0., 1., 1., ..., 0., 0., 0.],
[0., 1., 1., ..., 0., 0., 0.]])

您将拥有很多功能,但即使您使用"普通"ML 算法,它们也会从该功能中识别出不重要:例如lo-fi

但是之前将其映射到一般流派的部分可能非常复杂。

最新更新