# 用机器学习生成披头士的歌词 | 项目实战

• When you’ve seen beyond yourself
• Then you may find peace of mind is waitingthere²

• My sweet little darling can’t you see,
• how wonderful it is when you’re mine.
• If only I could be your lover forever,
• I can never get my heart, I can’t get my mind.

## 语言模型

```previous_words = [...] #已经生成的单词列表
while True:
previous_words.append(model.sample(conditioned_on=previous_words))```

Unigram模型忽略任何条件，只是从训练数据中随机选择下一个单词。这相当于把我们的训练数据扔进搅拌机，搅拌10分钟后就把里面的内容倒出来。换句话说，我们不会创造出任何类似英语的东西。

## 建模

```import collections
import numpy as np
class ProbabilisticBigramLanguageModel(object):
"""一种二元概率语言模型

"""

def __init__(self):
self._model = collections.defaultdict(int)

def fit(self, bigrams):
for current_word, next_word in bigrams:
self._model[current_word] += 1

def predict(self, current_word):
words, counts = list(zip(*self._model[current_word].items()))
counts = np.array(counts)
probs = counts / np.sum(counts)
return np.random.choice(words, p=probs)```

```song = ['XXSS']
while song[-1] != 'XXES':
song.append(model.predict(song[-1]))```

## 一首从未见过的披头士的歌曲

• She’s so I love her heart.
• Well they are; they said I’m so many,
• She no surprise
• When you’re mine
• Sad and the Amsterdam Hilton
• they make my way,
• Yes I wait a boy been born with a rich man,
• all share

## GPT-2 模型

OpenAI的GPT-2模型[1]最近因为“too dangerous to release.”而成为头条新闻。模型生成那样令人信服的文本,以至于作者担心被恶意使用⁴而没有发布完整的版本。相反，他们发布了两个更小的版本供人们玩耍和实验。我们将使用其中最小的一个来生成披头士的歌词。

GPT-2是一个基于transformer的模型，它经过了数百个小时在GPU对海量的Reddit数据进行训练。在训练期间，它学习了一个非常好的英语模型(或者至少是在Reddit上使用的英语模型)。这意味着它能够理解像“tall”这样的单词可以用来描述人、建筑物或长颈鹿。

## 新的披头士

• Ev’ry I Love You
• Lennon & McCartney
• Ev’ry I will always be
• Ev’ry you love me.
• Ev’ry you love me,
• Ev’ry you love me too.
• Ev’ry I will always be

• Woman in Black
• Lennon & McCartney
• I’d make a scene
• If you don’t want me to appear
• You might as well leave me alone.
• I’m near death and I’m in love

• Get Back (Get Back)
• Lennon & McCartney
• Yellow Submarine
• Lennon & McCartney
• On a Saturday night as the sun shines down onme
• The sun is out, the sails are clear
• The sun is in, the sails are clear
• Oooh — Hey

## 结论

### 脚注

¹ 尽管我认为最好的独唱音乐家应该是另一个60年代的传奇人物，Bob Dylan。他的单曲《Like a Rolling Stone》可能是有史以来最好的歌曲，这也不仅仅是我的观点。

² 来自歌曲《Within You Without You》

³ 为了简洁起见，略过了一些小细节。可以在GitHub上看到所有细节.

⁴ 有些人认为这只是一个巨大的宣传噱头，但事实并非如此。

### 参考文献

[2] S. Todorov, Generating FakeConversations by fine-tuning OpenAI’s GPT-2 on data from Facebook Messenger (2019)

443 篇文章79 人订阅

0 条评论