機械学習は音楽界を征服するのに役立ち、あなたは次のヴィンセント・ファングになるでしょう

機械学習は音楽界を征服するのに役立ち、あなたは次のヴィンセント・ファングになるでしょう

私はアークティック・モンキーズが大好きですが、彼らはもう何年も新しいシングルをリリースしていません。長い間精神的な栄養が不足していたのですが、ある夜、突然、自給自足できるというアイデアが浮かびました。そこで、簡単なコードを書き、Keras と TensorFlow を使ってテキスト生成モデルをトレーニングし、アークティック モンキーズのまったく新しい曲を書きました。

[[336229]]

しかし、条件が限られているため、本物のアークティック・モンキーズの曲と比較することはできませんが、それでも長い間新曲を聞き逃していた自分を慰めてくれます。

この記事では、このコードについて簡単に紹介します。完全なコードは私の GitHub にあります: https://github.com/Rajwrita/Sequence-Models-for-Literature/blob/master/NLP-AM2.0.ipynb。

まず、Arctic Monkeys のほぼすべての曲のデータセット (https://github.com/Rajwrita/Sequence-Models-for-Literature/blob/master/AM.txt) を構築し、その後このコードの実行を続行して、独自のデータセットを使用してテキストを生成してみます。

輸入

まず、ディープラーニング モデル用の共通データ フレーム操作ライブラリと TensorFlow および Keras ライブラリ パッケージをインポートする必要があります。

  1. numpyをnpとしてインポートする
  2. tensorflow.keras.preprocessing.sequenceからpad_sequencesをインポートします
  3. tensorflow.keras.layersから埋め込み、LSTM、高密度、ドロップアウト、双方向をインポートします
  4. tensorflow.keras.preprocessing.textからTokenizer をインポートします
  5. tensorflow.keras.modelsからSequential をインポートします
  6. tensorflow.keras.optimizersからAdam をインポートします
  7. tensorflow.kerasからregularizersをインポートする
  8. tensorflow.keras.utils をkuとしてインポートします。

次に、データをインポートします。

  1. データ = open ( 'AM.txt' ). read ()

次に、テキストにトークナイザーをインストールします。トークナイザーは、コーパス全体をカバーする単語の辞書を生成できます。これは基本的にキーと値のペアです。キーは単語であり、値はその単語に対して生成されたトークンです。つまり、トークナイザーは文の文字列を個々の単語に分割し、各単語に一意の整数値を割り当てます。このステップは非常に重要であり、後続の埋め込みレイヤー データの準備の基礎となります。

単語インデックスの長さを取得することで、コーパス内の単語の総数を取得できます。これに1を加えることで、外部語彙を導入することができます。対応するコードは次のとおりです。

  1. tokenizer = Tokenizer()data = open ( 'AM.txt' ). read ()
  2. tokenizer.fit_on_texts(コーパス)
  3. 合計単語数 = len(tokenizer.word_index) + 1

次に、トークン リストを使用してインポート シーケンスを作成します。簡単に言えば、インポートされたシーケンスは Python リストです。テキスト コーパスの各行は、トークナイザーを通じてトークン リストを生成します。次のようなテキスト行です:

このプロセスを通じて、これらの単語を表すトークンの文字列に変換されます。これはデータセットの各行に対して実行されます。コードは次のとおりです。

  1. 入力シーケンス = []
  2. コーパス内のの場合:
  3. token_list = tokenizer.texts_to_sequences([行])[0]
  4. i範囲(1, len(token_list))内にある場合:
  5. n_gram_sequence = トークンリスト[:i+1]
  6. 入力シーケンス.append(n_gram_sequence)

ご覧のとおり、インポートされたシーケンスは、単に文をフレーズに分割し、その後にコーパス内の最長の文の長さを取得したものです。このステップは非常に簡単で、すべての文をループして、最も長い文を見つけるだけです。

  1. max_sequence_len = max ([len(x) はinput_sequences内のxについて])

ここで、すべてのシーケンスが同じ長さになるようにパディングします。シーケンスをゼロで事前に埋めておくと、ラベル値の抽出が容易になります。ラベル値を取得するには、最後のトークンを取得するだけです。

  1. input_sequences = np.array(pad_sequences(input_sequences,maxlen=max_sequence_len, padding= 'pre' ))

パディング後、予測値とラベル値が作成され、シリーズは基本的に x 配列と y 配列に分割されます。ここでは Python の slice 属性が使用されます。コードは次のとおりです。

  1. 予測子、ラベル = input_sequences[:,:-1]、input_sequences[:,-1]

データが x 配列と y 配列に分割されたので、特定のフレーズの分類予測を行うニューラル ネットワークの作成を開始できます。

埋め込みレイヤーから始める

埋め込み層は、単語を理解するあらゆるディープラーニング モデルにとって不可欠な層です。その実際の機能は、同じ意味を持つ単語に同じ数値を割り当てることで、高次元空間から低次元空間にベクトルを投影し、ベクトルに対して直接数学的演算を実行できるようにすることです。

テキストの行では、すべての単語が処理され、ニューラル ネットワークで意味が付与されます。最初のパラメーターは単語を扱い、2 番目のパラメーターは描画される単語ベクトルの次元、最後のパラメーターは入力次元のサイズです。これは実際には最長シーケンスの長さから 1 を引いた値です。 1 を減算する理由は、ラベル値を取得するために各シーケンスの最後の単語を切り取るため、結果のシーケンスは最大シーケンス長より 1 少なくなるためです。

  1. モデルを追加します(Embedding(total_words, 100, input_length=max_sequence_len-1))

LSTM (Long Short-Term Memory) レイヤーの追加

[[336231]]
画像ソース: unsplash

LSTM レイヤーのセル状態はコンテキスト全体を保存し、次の単語が隣接する単語だけでなく他の単語からも影響を受けることを保証します。

単一の LSTM レイヤーに加えて、積み重ねられた LSTM レイヤーを使用することもできます。双方向 LSTM レイヤーを使用すると、生データを最初から最後まで学習アルゴリズムに入力し、また戻すことができるため、ニューラル ネットワークがテキストをより適切に理解できるようになります。双方向 LSTM は、ニューラル ネットワークの収束を高速化するのに役立ちま す。

シーケンス情報が最終状態に直接渡されるのではなく、2 番目の LSTM レイヤーに渡されるように、戻りシーケンス アノテーションを True に設定します。

  1. モデルを追加します(Bidirectional(LSTM(150, return_sequences = True )))

次に、密なレイヤーを使用して線形関係をさらに捕捉し、上記のレイヤーの出力を単語の確率に変換します。ソフトマックス活性化関数は、すべての入力単語の確率を (-∞,∞) から (0,1) に変換します。

  1. model.add ((total_words/2, activation= 'relu' ,
  2. kernel_regularizer =regularizers.l2(0.01)))model.add (Dense(total_words )
  3. 、活性化 = 'ソフトマックス' ))

ここではカテゴリ分類を行っているため、カテゴリクロスエントロピーの法則を設定する必要があります。オプティマイザに関しては、ここでは Adam オプティマイザが選択されます。

最終段階 — エポック

最後に、モデルのトレーニングには時間がかかります。データセットにはデータがあまりないので、モデルのトレーニングには約 500 エポックかかります。

  1. history = model.fit(予測子、ラベル、エポック=100、詳細=1)

予測する単語が増えるほど、生成される文字化けした文字も増えます。これは、すべての単語だけでなく、その前後の単語も予測する必要があるため、次の単語の不確実性は常に前の単語よりも高くなるからです。最終的にネットワークが予測したテキストを見てみましょう。

  1. seed_text = 「私はアークティックモンキーズが大好きで  

十分な単語を網羅したコーパスを構築することで、ニューラル ネットワークをコーパス上でトレーニングし、次の単語を予測することで複雑なテキストを予測できるようになります。

機械学習を使えば、コンテンツ制作はもはや難しくありません。このコードを使って、お気に入りの歌手のために曲を書いてみてください。

<<:  心が開かれました! Adobeなどの研究者が「自撮り」を「他人が撮った写真」に変え、感動的な魔法の写真編集効果を実現

>>:  Weilingsi チームは、グラフ同型性の下での同変性と高い計算効率を備えた「自然グラフ ネットワーク」メッセージ パッシング メソッドを提案しました。

ブログ    
ブログ    

推薦する

マスク着用時の顔認識成功率は80%以上。顔はどうやってあなたを裏切るのでしょうか?

[[388175]]今年の315では、物議を醸している顔認証が再び前面に押し出されました。自分の顔...

詩人のような機械学習: ML の仕組みについての素晴らしい啓示

機械学習はデータ内のパターンを使用して物事にラベルを付けます。魔法のように聞こえますが、核となる概念...

画期的なニューラルネットワークが量子AI研究への道を開く可能性

海外メディアの報道によると、イタリアの研究者らは最近、量子コンピュータ上で特殊なアルゴリズムを実行す...

...

Google、機械学習を使用して医療イベントを予測するFHIRプロトコルバッファツールをオープンソース化

先月26日、GoogleはarXivに「電子健康記録のためのスケーラブルで正確なディープラーニング」...

ジェネレーションオートメーション:AI主導の労働力

生成 AI は AI の「津波」を引き起こし、AI 駆動型アプリケーションの急速な開発、広範な採用、...

2019 年に知っておくべき機械学習向け Python ライブラリ トップ 10

この記事では、開発者がデータを解析、クリーンアップ、表現し、既存のアプリケーションに機械学習を実装す...

...

あなたの頭上に「ロボット」がやって来ます!起業家の知恵:リアルタイムで位置を特定し、自動的に警報を鳴らすスマートヘルメットの開発

[[317160]]建設作業中には、火災、電気、機械など、多くの潜在的な安全上の危険が存在します。安...

ビル・ゲイツ: 生成AIは限界に達した

ビル・ゲイツ氏の暴露は機械学習コミュニティで話題となっている。 「GPT-5 は GPT-4 よりそ...

ジェネレーティブAIの力を最大限に引き出す方法

生成 AI により、機械はコンテンツを作成し、人間の行動を模倣し、創造的な仕事に貢献できるようになり...

AIが監督者になる。それでも仕事をサボれるのか?

「仕事でサボるのは楽しいが、いつもサボっているのも楽しい」ということわざがあります。 [[3583...

運転教習業界にも「AI」の波が吹き荒れる、普及規模に注目

[[422314]]近年、都市化と道路交通建設の加速により、自動車旅行の需要が継続的に増加しており、...

...