我是作曲家和程序员。我想用 ML 来作曲。已经有针对已知音乐风格的机器作曲的一般问题的研究。我更感兴趣的是使用计算机来帮助自己作曲的具体问题……加快某些重复性任务,或者用意想不到的想法让我高兴。
首先,我想设计可以在单个短文中进行好/坏分类的机器学习。(起初不打算生成音乐。)
将这样的段落分解为重要的特征要容易得多。我可以说像
- 也许存在特定的“间隔”(和声),而其他的则不存在
- 也许音符从低到高均匀分布,或者可能不是
- 也许音符聚集在某个音域周围,而不是分散开来
- 可能节奏特别不均衡
- 也许一个特定的音符经常出现
我可以很容易地编写算法,为任何给定的段落生成这些特征的列表,我什至可以很确定我包含了所有相关的特征。对于一种“艺术形式”来说,音乐令人惊讶地易于分析。
诀窍在于,首先,会有数百个观察结果,其次,这些观察结果中没有一个本身是好是坏。假设我们有 A、B 和 C 三个因素。A 单独一个并不坏,但也许当 A 和 B 同时出现时,那就不好了。但也许如果 A、B 和 C 同时出现,它又会变好!然后可能是第四个因素 D,改变了上下文,使得 A、B 和 C 不再重要。
这似乎是一个 ML 问题,但我想知道最好的方法是什么?
我可以构建或创作数百个标记为好和坏的音乐示例,并在每个示例中识别数百个“特征”。一些特征是“存在/不存在”类别,而另一些则是可以从 0 缩放到 1 的数字。
是否有一个通用且简单的学习算法,即使是像我这样的 ML 新手(但我是一位经验丰富的程序员)也可以实现?
我必须生成自己的训练示例,并且限制在 300 到 1000 个左右,因为我正在以我的风格在简单的段落上训练它。这实际上可能是个好问题……与一般的音乐智力相比,我的工作并不复杂。
我将把这项任务与图像识别进行对比。图像具有数百万像素,并且特征分散,以无穷无尽的排列发生。试图弄清楚深度神经网络中发生了什么让我头疼。
但是,在音乐中,最多会有几百个特征。这些模式不会以无穷无尽的排列出现。事实上,在精简的情况下,我的疯狂猜测是,通过查看 10 个特征(假设您的权重和组合训练有素),您可以做出 80% 准确率的分类器。我的目标比这要高一些(我需要更多的功能和更准确的一点)。
让您对我的数据集有所了解:我正处于编写软件以提取特征的早期阶段,但我对自己的目标有一个很好的心理想法(多年来一直在手工编写)。为了使这一点更具体,我创建了一个网页,显示数据的外观。这很简单,完全是虚构的。
http://theunexpectedpearl.com/dataset.html
这显示了四行。每一行都是我将自动创作或生成的一段音乐示例。每一行都被我自己的耳朵分类为“好”或“坏” 。该行的其余部分是一长串特征,每个特征要么是“是/否”,要么是从 0.0 到 1.0 的单个数字。
我认为朴素贝叶斯分类器不会为此工作(如果我理解正确的话),因为特征本身既不好也不坏……只有它们(上下文)的组合才重要。事实上,同样的特征可以在一种情况下有助于“好”,并在另一种情况下立即成为“坏”的强烈指示。
数据的结构可能不同。在实践中,这个电子表格将是“稀疏的”,也许特性应该以某种方式分组,或者排列成树。