Λ公開一周年記念記事『gpt2-japaneseとWord2Vecを用いた界隈曲の作詞システムの構築』

全て歌詞の所為です。 ブログ 2026年5月4日21:39

gpt2-japaneseとWord2Vecを用いた界隈曲の作詞システムの構築


論文要旨

ネット上にはアーティストである全てあなたの所為です。の曲を模倣する文化があり今日、2000曲以上の模倣した曲が存在する。しかし模倣する上での問題があり、それはその曲の歌詞のユニークな特徴を理解する必要がある為、作詞をすることが難しいことである。そこで本研究では「カテゴリタイプ」、「ソングタイプ」、「モデルタイプ」の計3つの生成タイプである歌詞生成システムを構築した。そして特徴をよく理解できていない人でも簡単にその歌詞生成システムを利用できるウェブアプリケーション「全て歌詞の所為です。」を制作し公開した。カテゴリタイプとソングタイプは単語ベクトルを扱うことができる言語モデルWord2Vecと自作した歌詞生成アルゴリズムを用いて、全てあなたの所為です。の曲の歌詞に似た歌詞を生成する。両者の違いは歌詞生成に使う単語の選び方にある。ソングタイプは全てあなたの所為です。のうちユーザーが指定する1曲と、その曲を模倣している曲の歌詞のうち、その歌詞に登場する単語自体とその単語を連想させる単語を歌詞生成に利用する。一方、ソングタイプは全てあなたの所為です。やその模倣曲を含めた界隈曲全体で模倣関係を無向グラフで表し、そのグラフを任意の条件下で探索することで曲を選択し、それらの曲に登場する単語とその単語を連想させる単語を歌詞生成に使う。他方、モデルタイプではファインチューニングを行うことができるgpt2-japanese言語モデルを用いて歌詞を生成するシステムを構築する。評価に関しては主観評価と客観評価の2つの評価を行った。主観評価では全て歌詞の所為です。上で生成した歌詞を事前に用意したメロディにつけ、使い勝手の良し悪しを調査した。結果、多少の文法ミスがあったものの、全体的に界隈曲のような歌詞を生成することができた。一方、客観評価では生成した歌詞を全て歌詞の所為です。上で1行ごと評価できるようにし、コミュニティ一に所属している方々を中心に評価をしてもらった。結果、一番評価が高かった生成タイプは言語モデルgpt2-japaneseを用いたモデルタイプであった。また、カテゴリタイプとソングタイプの中でも原曲の歌詞が支離滅裂なほど高い評価になり、逆にストーリー性がある歌詞の原曲のカテゴリは一部例外を除いて低い評価になることが分かった。


1. はじめに        

1.1. 背景と問題        

1.2. 研究の目的        

1.3. 貢献        

1.4. 本論文の構成        

2. 関連研究        

2.1. ユーザーが条件を指定可能な歌詞の候補を提示するソフトウェアに関する研究        

2.2. 事前学習済み言語モデルを用いて歌詞を生成する研究        

2.3. SeqGANを用いた歌詞生成の研究        

2.4. n-gram言語モデルに基づいた歌詞生成の研究        

2.5. パロディ音楽の歌詞を生成する研究        

3. 設計と実装        

3.1. 曲のデータの登録        

3.2. 模倣単語の生成        

3.2.1. 歌詞の整形        

3.2.2. 歌詞の分かち書き        

3.2.3. 各単語の品詞分析        

3.2.4. 単語のフィルタリング        

3.2.5. 模倣単語の末尾の編集        

3.2.6. 模倣単語の探索        

3.2.7. 模倣単語の保存        

3.2.8. 全て歌詞の所為です。へのPOST        

3.3. 歌詞のファインチューニング [12]        

3.3.1. セットアップの実行        

3.3.2. 歌詞のダウンロードと整形        

3.3.3. データセットの作成        

3.3.4. ファインチューニングの実行        

3.4. 歌詞生成の実装        

3.5. 全て歌詞の所為です。の実装        

3.5.1. ページについて        

3.5.1.1. トップページ        

3.5.1.2. 曲の一覧と検索ページ        

3.5.1.3. 曲ページ        

3.5.1.4. 歌詞の登録ページ        

3.5.1.5. 曲データの追記ページ        

3.5.1.6. 歌詞データの修正と削除提案ページ        

3.5.1.7. チャンネルページ        

3.5.1.8. 歌詞の生成ページ        

3.5.1.9. 生成結果ページ        

3.5.1.10. 生成された歌詞ページ        

3.5.2. データベース設計        

3.6. 研究全体のシステム図        

4. 評価        

4.1. 主観評価        

4.1.1. 主観評価の評価方法        

4.1.2. 作曲した結果        

4.1.3. 全て歌詞の所為です。を使ってみての評価        

4.2. 客観評価        

4.2.1. 客観評価の評価方法        

4.2.2. 評価結果と考察        

4.2.2.1. カテゴリタイプの評価        

4.2.2.2. ソングタイプの評価        

4.2.2.3. カテゴリタイプとモデルタイプの評価について        

4.2.2.4. モデルタイプの評価        

5. 結論        

5.1. まとめ        

5.2. 今後の課題        





  1. はじめに
  1. 背景と問題

ここ二十数年のネットの普及により様々なコミュニティが発生した。その一つである「界隈曲」とは全てあなたの所為です。を中心としたアーティストの作風を模倣するジャンル、及びそのコミュニティである。コミュニティは現在も発展し続けていて、コミュニティに属している180人以上のアーティスト(以下、界隈の人と称す)が模倣した曲(以下、模倣曲と称す)を2000曲以上リリースしている。

全てあなたの所為です。の曲(以下、原曲と称す)、及び模倣曲の歌詞には他のアーティストに存在しない特徴がある。

1つ目は歌詞が意味不明なところだ(以下、特徴1と称す)。原曲の歌詞は非文でない、つまり文法的な間違いのない文だが、歌詞に脈絡がなく支離滅裂である。支離滅裂の度合いは各曲に違うが例えば『エヌ』の場合は、

「因数分解とオタマジャクシは、刃物と日記を混ぜました。」 [1]

といった通常の文章には登場しないような単語の連なり方をしている。しかし曲によっては支離滅裂だが一部ストーリー性がある歌詞を含む曲も存在する。例えば『K²』の場合は

「形など無いはずの、憾がどろりと。こちらを向き、見つめていた。幽き声の詩が、幾重にも重なり。一つの意味になるのでしょう。」[2]

のように各文に注目すると若干のストーリー性がある。

2つ目は歌詞として使われている単語が難解なことだ(以下、特徴2と称す)。例えば合目的的・ラザロ徴候・第四の壁・門前雀羅を張るといった日本語がネイティブな人でも知らないマニアックな単語が歌詞に使われている。

3つ目は歌詞に使われている歌詞のうち漢字をひらかず、漢字表記にすることだ(以下、特徴3と称す)。例えば所為(せい)・只管(ひたすら)・徐(おもむろ)といったように、一般的にはひらがな表記にする単語を漢字に直すことが多い。

4つ目は模倣曲の歌詞に使う単語に原曲の歌詞で使われる単語そのもの、もしくは類語といったその単語を連想させる単語(以下、これらの単語を模倣単語と称す)を使うことだ(以下、特徴4と称す)。比較の一例として原曲の一つである『...』とその模倣曲である『|||』を挙げるとすると、歌詞の冒頭はそれぞれ

「穴の空いた両の手で、喉の渇きは潤せず、甘いはずの水は、掬っても零れてゆく。」 [3]

「手のひらに穴が開いて、杜撰な真実に気がついた。視界に見えるものだけが、にやりと嘲笑って見えた。」 [4]

となっている。この2つの歌詞の共通点は両方とも「手」と「穴」が登場することだ。つまり『|||』は歌詞の冒頭でこれら2つの単語を原曲から借用しているといえる。

最後に5つ目は原曲以外にも模倣曲の歌詞も模倣されることだ(以下、特徴5と称す)。模倣曲は原曲の二次創作といえるが、それだけではなく模倣曲をさらに模倣した三次創作、さらに三次創作を模倣した四次創作、というように創作が再帰的に行われる特徴があり、模倣されたとき歌詞も模倣される。試しに界隈曲の模倣関係を有向グラフで表すと画像1のようになる。

画像1 模倣関係をグラフで表した画像

ここでノードは界隈曲を、エッジは始点は終点を模倣しているという事を表している。各界隈曲が複雑な模倣関係を成していることが分かるだろう。

さて、模倣曲の作詞において以上で述べたような5つの特徴を持った歌詞を作詞する必要があるが、これは原曲やその模倣曲に詳しくないと作詞することは困難だ。模倣曲全体として各特徴をどのように、またどのタイミング(Aメロ・Bメロ・サビ等)で継承するかは一種の定石が存在し、それを理解する為には原曲とその界隈曲を数十曲聴かなければならないだろう。

  1. 研究の目的

この問題を解決する為に、私は界隈曲の作詞を自動でしてくれるウェブアプリケーション「全て歌詞の所為です。」の開発に取り組んだ。具体的には原曲とその模倣曲である曲データを登録できるフォームを設置し、私と界隈の人が協力して曲データを登録する。そして、それらの情報を元にWord2Vecとgpt2-japaneseの2つの言語モデルを使用し「カテゴリタイプ」、「ソングタイプ」、「モデルタイプ」の計3つの歌詞生成システムを構築する。そして開発したシステムは全て歌詞の所為です上で利用できるようにする。

  1. 貢献

このシステムは界隈曲の歌詞を限りなく生成できるので、界隈曲の作詞に行き詰まった際に思い描いた通りの歌詞を見つけることができるだろう。また、全て歌詞の所為です。の普及により、界隈曲の作詞が難しいので界隈の人になることを躊躇する人が減る為、界隈曲のコミュニティの活性化に繋がることができるだろう。

  1. 本論文の構成

本論では以下のような構成になっている。まず第2章ではシステムの構築にあたり必要な言語モデルやウェブアプリケーションの制作にあたって、参考にした関連研究を紹介する。第3章では歌詞生成やウェブアプリケーションの設計と実装について説明する。第4章では主観評価としてウェブアプリケーションを使って作詞したサンプル曲を一例として挙げ、客観評価では実際に界隈の人に使ってもらった評価を提示する。第5章では研究の終えての結論を述べたいと考えている。

  1. 関連研究

この関連研究の章では上記で述べた言語モデルやウェブアプリケーションの制作にあたって参考にした関連研究を紹介する。

  1. ユーザーが条件を指定可能な歌詞の候補を提示するソフトウェアに関する研究 [5]

この研究は阿部千尋氏と伊藤彰教氏が行ったアマチュア・ミュージシャンを対象にn-gramをベースにした歌詞の続きを作詞する研究である。単語、もしくは歌詞・モーラ長(単語の長さ)・母音・アクセントの種類を条件として歌詞の続きにふさわしい単語を導き、ユーザーにその歌詞の候補を提示するソフトウェアを開発した。評価結果は想像力を膨らむ、ヒントが得られる、曲のテーマが決まっている場合に作詞に使える等の肯定的な意見の一方、似た単語しか候補に出ない、文法的なミスがある等のフィードバックがあったようだ。

  1. 事前学習済み言語モデルを用いて歌詞を生成する研究 [6]

この研究はMatheus Augusto G. Rodrigues氏、 Alcione de P. Oliveira氏、Alexandra Moreira氏、Maurilio de A. Possi氏らが行った英語とポルトガル語の歌詞からコーパスを作成し、それぞれファインチューニングを行い、そしてその言語モデルを使って歌詞を生成する研究だ。使用したモデルの規模は小規模と大規模があり、小規模モデルでは345MBのデータ量で大規模モデルになると762MBものデータ量があった。結果、小規模モデルのファインチューニングのみ成功し、Perplexityは最善で50で非常に良い結果を残し、歌詞生成に関しては若干のスペルミスや文法的なミスがあるものの、意味的な⼀貫性を備えた構⽂的に正しい歌詞の生成に成功したようだ。

  1. SeqGANを用いた歌詞生成の研究 [7]

この研究はYihao Chen氏とAlexander Lerch氏らが行った画像生成に使われているGANをベースとした、モデルであるSeqGANを用いて歌詞の生成をする研究である。メロディを条件に敵対的学習によるエンド・ツー・エンドシステムを構築し歌詞を生成する手法を取っている。また、この研究の一環として『lyrics-lab』と呼ばれるウェブアプリケーションが制作されていて、musicxmlといった曲のデータがあれば誰でも利用できる。

  1. n-gram言語モデルに基づいた歌詞生成の研究 [8]

この研究はRikiya Takahashi氏、Takashi Nose氏、Yuya Chiba氏、Akinori Ito氏が行ったEncoder-Decoderモデルを使って、現実的な時間で3単語以上の長期的な歌詞の文脈を考慮できる学習モデルを構築し、歌詞を生成する研究である。学習にはVOCALOID専門の歌詞投稿サイト『piapro』に掲載されている歌詞を使用した。制作した3-gramの言語モデルを主観評価実験で評価した結果は10個の出⼒シーケンスのうち3つは2-gramの言語モデルより良い評価者を得ることができた。

  1. パロディ音楽の歌詞を生成する研究 [9]

この研究はMark O. Riedl氏が行った曲の歌詞を入力するとそのパロディ曲の歌詞を生成する研究である。原曲の韻を検知しその韻を踏んだ歌詞を生成する為にXLNetとGPT-2の2つの言語モデルを使う仕組みになっている。

  1. 設計と実装

この章では本研究にて実装した全て歌詞の所為です。やその周辺のプログラムの設計と実装について説明する。

  1. 曲のデータの登録

まず界隈曲のデータを集める為、界隈曲の色々なデータを登録できるフォームを全て歌詞の所為です。上に実装する。なお、全て歌詞の所為です。はDjangoで実装するとし、外部のアプリケーションと情報のやり取りをする際はDjango REST Frameworkを通して行った。実際に制作したフォームは後述する。集めるデータは以下のとおりだ。

  • タイトル

その曲のタイトルで入力必須。プログラムの簡略化の為に、このカラムはユニーク属性にした。よって曲データベース内に2つ以上の同じタイトルのレコードを含めることができない。ただし、全て古文書の所為です。の『.』や全てわれらの所為です。の『.』といった異なる曲にもかかわらず、タイトルが被っている界隈曲もあるので今後のアップデートで両方登録できるような修正が必要だろう。

  • 作者

その曲の作者で入力必須。作者が複数名義ある場合は模倣曲をリリースしているYouTubeのチャンネル名、もしくはSound Cloudのアーティスト名がフィールドの値になる。

  • URL

その曲が聴けるウェブページへのURLで入力は任意。曲が削除された、もしくは不明の場合は空白になる。

  • 模倣

その曲の原曲を入力する。複数入力することができ、少なくとも1曲以上選択する必要がある。上限は井荷麻奈実の『.undred』のように100曲の原曲や模倣曲を模倣して作られた曲もあるため設けていない。具体的な入力は以下のようなケースが考えられる

  • 全てあなたの所為です。の原曲

全てあなたの所為です。のうち、日本語の曲である『.』、『..』、『教育』、『アブジェ』、『...』、『表』、『名の無い星が空に堕ちたら』、『エヌ』、『K²』の計9つの原曲。

  • 模倣曲

模倣曲を模倣した曲。例えば全て虞美の所為です。の『天秤にかけて』を模倣している全てあなたの所以です。の『線分でわけて』が該当する。

  • オリジナル模倣

全てあなたの所為です。の作風のみ模倣しているが、具体的な原曲が明示的に模倣されていない曲。例えば全て過去の所為です。の『色素』が該当する。

  • 歌詞

曲の歌詞で入力は任意。歌詞は後から入力できるように必須にはしていない。

  • その他メタデータ

その他システムに関わる界隈曲の情報を入力する。具体的には以下の2つのカラムがある。

  • 日本語の曲

界隈曲は海外でも人気で、例えば全てわたしの言行です。の『▷』は中国語の曲だ。本当はそれらを界隈曲データの一部として利用したいが、本研究では日本語の界隈曲のみを扱う為、歌詞の生成の材料として使う素材から除外したい。その為、曲データに日本語の曲かどうかのBoolean型カラムを加え、プログラムがその曲の歌詞は日本語かどうかを判別できるようにする。デフォルトはTrue。

  • ネタ曲

界隈曲の中には界隈の人ではないと分からないインサイドジョークを扱った曲がある。例えば全て雲考え所為。の『☁️』がそれに当たる。これらの曲は界隈曲の特徴から著しく異なることがある為、「日本語以外の曲」同様に歌詞の生成の材料として使う素材から除外したい。その為、曲がネタ曲かどうかのBoolean型カラムを加え、プログラムがそれを判別できるようにする。デフォルトはFalse。

  1. 模倣単語の生成 [10] [11]

界隈曲には模倣曲の歌詞に模倣単語を使う特徴があるが、それを導く為にWord2Vecの類似度を利用し模倣単語を導く。ただし日本語に存在する全ての品詞の模倣単語を導き出すのではなく、日本語の品詞のうち、単語を同じ品詞ならどのような単語に変えても、文法的な誤りが無い品詞(以下、置換可能品詞と称す)である単語を扱うとする。例えば、“全て(副詞)あなた(代名詞)の(格助詞)所為(名詞)です(助動詞 終止形)。(句点)”の場合、“全部(副詞)彼(代名詞)の(格助詞)譫(名詞)です(助動詞 終止形)。(句点)”のように置換できる。よって副詞・代名詞・名詞が置換可能品詞といえるだろう。この研究では文字列操作しやすい品詞である名詞・動詞・形容詞を模倣可能品詞として扱う。また品詞自体はpythonの形態素解析ライブラリであるJanomeを使い求める。

これら要件の実装は全て歌詞の所為です。上にではなく、Google Colaboratory上で実装した。また、模倣単語は本論文の冒頭で述べた「カテゴリタイプ」と「ソングタイプ」の歌詞生成に利用し、「モデルタイプ」には利用しない。

大まかなフローとしては以下のような流れだ。

  1. 歌詞のダウンロード

歌詞をpythonのライブラリであるrequestsを使って全て歌詞です。からダウンロードを行う。ダウンロードしたデータのうち歌詞データがあり日本語の曲かつネタ曲でない曲のみをデータに残してそれ以外は除外する

  1. 歌詞の分かち書き

Janomeのjanome.tokenizer.Tokenizer.tokenizeメソッドを使い整形した歌詞データの分かち書きを行う。このとき、wakatiオプションをFalseに設定して表層データ以外にもTokenizerデータを取得する。

  1. 各単語の品詞分析

分かち書きしたデータから各単語を抜き出し、品詞の分析を行う。具体的には置換可能品詞の単語のうち、その単語が名詞ならTokenizerデータから品詞と活用形のデータを、品詞が動詞もしくは形容詞ならTokenizerデータから品詞・品詞細分類1・品詞細分類2・品詞細分類3のデータを取りだす。それ以外の品詞の単語はスルーして何もデータを参照しない。

  1. 単語のフィルタリング

以下のような単語は模倣単語を求める単語から除外する。

  • 品詞が置換可能品詞以外の単語

上記で挙げた名詞・動詞・形容詞以外の品詞の単語。

  • ひらがな・カタカナ・漢字を1つも含まない単語
  • Unicodeの\u3041(ぁ)から\u309f(ゟ)の範囲のひらがな
  • Unicodeの\u30a1 (ァ)から\u30ff (ヿ)の範囲のカタカナ
  • Unicodeの\u4e00 (一)から\u9ffc(鿼)の範囲のである漢字

である文字を1つも含めない単語。模倣曲には記号や非文で構成されている歌詞の曲がある為、このようなフィルタリングを設けた。また、全てGehennaの所為です。の『ダチュラ』のような歌詞の一部に古文が使われることがあるので、ひらがなとカタカナの範囲に五十音以外の文字であり、古文で登場する合略仮名や現代で使われない捨て仮名を含めるようにした。

  1. 模倣単語の末尾の編集

動詞の音便である促音便・撥音便・イ音便である単語はtokenizeで分かち書きをした際に単語の末尾がそれぞれ「ん」、「っ」、「い」になってしまい、それら以外の動詞・形容詞の単語から置換したときに文法的に誤った文になってしまう。なので模倣単語を求める際、その単語が動詞でかつ単語末尾の文字が「ん」、「っ」、「い」の単語は自動で助動詞である「て」、「で」を末尾で適切な形に加えるように、プログラム上に修正を加えた。ただし、形容詞の音便であるウ音便は大部分が古文に登場する単語で、模倣曲のうち歌詞が古文である曲は少数なので、編集をしていない。

  1. 模倣単語の探索

フィルタリングした各単語をpythonの自然言語処理ライブラリGensim のメソッドであるgensim.models.Word2Vec.most_similarを使い模倣単語を求める。most_similarとは引数に単語を入力することで、その単語の単語ベクトルのcos類似度が最も高い単語ベクトルを求めることができるメソッドである。cos類似度の高い単語はその単語の類語やその単語を連想させる単語を導くことができるので、本研究ではそれで求めた単語を模倣単語として利用した。

オプションとしてtopnを10に設定してcos類似度の高い上位10個の単語を模倣単語として登録する。また、これらの単語も上記で述べたような品詞の分析・フィルタリング・模倣単語の末尾の編集を行う。

  1. 模倣単語の保存

模倣単語はpythonの辞書のリストに保存する(以下、模倣単語辞書と称す)。辞書のキーは品詞・品詞細分類1・品詞細分類2・品詞細分類3を全て結合した文字列を登録し、値にはそのキーの品詞・品詞細分類1・品詞細分類2・品詞細分類3に一致する単語をリスト形式で登録する。単語は頻度を加味する為に重複可能になっている。例えば全てあなたの所為です。の「.」の模倣単語は以下のようになる。

{'名詞名詞,サ変接続,*,*': ['携帯', '電話', 'いたずら', 'イタズラ', '悪戯', '腐敗', '終了', 'モニタ', '在学', '絶賛', '在学', '絶賛', '装置', 'メモ', '恐く', 'こわく', '言及', '輸血', '在学', '絶賛', '在学', '絶賛', '在学', '絶賛', '在学', '絶賛', '目と', '通算', '凝視'], '名詞名詞,固有名詞,組織,*': ['ケータイ', ・・・(略)・・・'全て', 'すべて', '総て', '全部', '殆ど', 'せい', 'たくさん', '多く', '多数', '目今'], '名詞名詞,固有名詞,人名,名': ['スライドイン', '出', 'ブラッドバンク'], '名詞名詞,非自立,副詞可能,*': ['中', '中', '中', '中', '以外', '中', '中', '以外', '以外'], '名詞名詞,固有名詞,人名,一般': ['風の音', '風の音', '風の音'], '名詞名詞,接尾,助動詞語幹,*': ['そう'], '形容詞ガル': ['甘', 'たまらな'], '名詞名詞,代名詞,一般,*': ['それら', 'これら', 'あなた', '貴方', '私', 'わたし', '誰', '僕', 'あんた', '彼', 'それら', 'これら'], '形容詞未然': ['無かろ', '無かろ'], '名詞名詞,数,*,*': ['一杯'], '名詞名詞,接尾,助数詞,*': ['度目']}

合計987単語の模倣単語が導きだされた。

  1. 全て歌詞の所為です。へのPOST

導きだした模倣単語の辞書データは文字列に変換して全て歌詞の所為です。にPOSTする。POSTされたデータは歌詞データベースの模倣単語カラムのフィールドに保存される。

  1. 歌詞のファインチューニング [12]

界隈曲全体の特徴をもつ歌詞を生成する為に界隈曲のデータセットを作成して、歌詞のファインチューニングを行う。ファインチューニングは模倣単語を求めたときと同様にGoogle Colaboratory上で実装する。また、模倣単語は本論文の冒頭で述べた「モデルタイプ」の歌詞生成に利用し、「カテゴリ」と「ソングタイプ」には利用しない。大まかなフローとしては以下のような流れだ。

  1. セットアップの実行

ファインチューニングを行う為にGoogle Colaboratory以下のようなセットアップを行う

  • git cloneコマンドでgpt2-japaneseをクローンする
  • gpt2-japaneseを動かすのに必要なライブラリをrequirements.txtからインストールする
  • 学習済みモデルをダウンロードして展開する

本研究ではSakamoto's AI Lab.よりgpt2ja-smallを利用させていただいた。総パラメータ数は101642496でレイヤー数は12 heads、12 layersになっている

  • git cloneコマンドでJapanese-BPEEncoderをクローンする

  1. 歌詞のダウンロードと整形

模倣単語を求めたときと同様に全て歌詞の所為です。から歌詞をGoogle Colaboratory上にダウンロードする。ダウンロードした歌詞データのうち、日本語以外の曲、ネタ曲、歌詞に一つも改行コード(\t\n)が含まれていない歌詞データは除外してそれ以外をデータセットとして利用する。また、改行コードはファインチューニングを行うプログラムが文末を判別する為、文字列<|endoftext|>に置換する。

  1. データセットの作成

ファインチューニングを行う際に使われるデータセットはnumpyのnpzファイルである。よって一度整形したデータをtxtファイルに書き込み、それをさらにnpzにエンコードし、ファインチューニング用のデータセットを作成する。

  1. ファインチューニングの実行

gpt2-japaneseをクローンした際にデータセットを用いてファインチューニングを行うファイルrun_finetune.pyがダウンロードされるので、それを用いて実際にファインチューニングを行う。Google Colaboratoryのメモリ制限を超過しないように、オプションにbatch_sizeを加え、最小である1を設定する。また、ファインチューニングはエンドレスに学習が進むが、損失値が0.00、平均損失値が0.01になるステップ5000あたりにプログラムを中断し、学習データを保存する。

  1. 歌詞生成の実装

全て歌詞の所為です。上に生成方法の違う3つの生成タイプを実装する。生成方法や生成アルゴリズムの詳細は以下のとおりだ。

  • カテゴリタイプ

カテゴリタイプは原曲の特定の曲とその曲を模倣している曲の歌詞を模倣単語として歌詞を生成する方式である。

ダイアグラム

    自動的に生成された説明

図1 カテゴリタイプ(.模倣の場合)

例えば、図1のようなケースで説明すると、全てあなたの所為です。の『.』を指定した場合、全て言の葉の所為です。の『。』や全て画質の所為です。の『』といった『.』を模倣した複数の曲と原曲自身を模倣単語を使用する。歌詞の生成は原曲を分かち書きしたとき、各単語をその単語の品詞が同じ模倣単語のうち、ランダムな模倣単語に置換する。ただし原曲の中で名詞が連続している単語がある場合は、1つの名詞として扱う為に2つ目以降の名詞は置換されずに削除される。

この生成タイプはその性質上、「はじめに」に述べた特徴のうち、特徴1・特徴2・特徴3・特徴4を継承した歌詞を生成できる。ただし、模倣曲の模倣曲は考慮していない為、特徴5の特徴は継承できない。

模倣単語を導き、1つの模倣単語辞書に保存する擬似コードは以下のとおりだ。

inp_category = 入力された原曲のタイトル

ins_imitates = 模倣曲のSongインスタンスの空集合

ins_original = 原曲のSongインスタンス

dict_sim = 複数の曲の模倣単語を一箇所にまとめる空の模倣単語辞書

for ins_song in 全て歌詞の所為です。上の全てのSongインスタンス do

if ins_songのタイトル == 原曲 then

    ins_imitatesins_songを加える

elif ins_originalのID in ins_songの原曲リスト then

    ins_imitatesins_songを加える

for ins_imitate in ins_imitates do

dict_ruigo = ins_imitateの模倣単語辞書

for hinshikatsuyou, words in dict_ruigoのキーと値のタプル do

if hinshikatsuyou in dict_simのキーの値 then

dict_sim [hinshikatsuyou]にwordsを加える

else

dict_sim [hinshikatsuyou] = words

擬似コードの文中に登場したSongについては後述する。

そして、歌詞を生成する擬似コードは以下のとおりだ。

toklist = 模倣単語、品詞、活用をタプルで保存する空のリスト

for tok in 分かち書きした歌詞の単語リスト do

hinshi = tokの品詞

if hinshi == 名詞 then

katsuyou = tokの品詞と活用形

if hinshi == 動詞 then

katsuyou = tokの品詞・品詞細分類1・品詞細分類2・品詞細分類3

if hinshi == 形容詞 then

katsuyou = tokの品詞・品詞細分類1・品詞細分類2・品詞細分類3

else then

katsuyou = “”

toklistにタプル(tokの模倣単語, hinshi, katsuyou)を追加する

lyrics = 生成する歌詞の空文字

before_hinshi = tokの前の品詞である空文字

dict_sim = 複数の曲の模倣単語を一箇所にまとめた模倣単語辞書

for word, hinshi, katsuyou in toklist do

if hinshi in 置換可能品詞 then

if hinshi == 名詞 and before_hinshi == 名詞 then

continue

before_hinshi = hinshi

hinshikatsuyou = hinshi + katsuyou

if hinshikatsuyou in dict_simのキーの値 then

pickwords = simDのうち品詞と活用、もしくは品詞と品詞細分類が一致しいる模倣単語を保持する長さ1で0番目にwordが保存されたリスト

for pickwords in dict_sim[hinshikatsuyou] then

pickwords pickwordを加える

lyricsの語尾にpickwordsのうち1つランダムな値を加える

else

lyricsの語尾にwordを加える

以上が歌詞生成アルゴリズムとなっている。

実際にカテゴリを「表/裏模倣」で歌詞を生成したところ、以下のような結果が得られた。

干からびた二の腕がいただかなくて ぬめりに抑揚の歌声の底無しが鳴る 悲鳴といらっしゃいのほうで 気配の手前が弱りて物悲しそうに合わせた 小さな悲鳴が気づいて 和やかな前歯の 通算が声を合わさって 不明瞭な只今で帰り道を交えて欹てた方です 咽喉と落とした欹て静かなしみ アイデンティティーと絞めるアイデンティティ 両脚の中のといの無くって心胆に 沼を澄ましては掛ってません 唸りの甲高いインチキが浸けれかけよて そばだた流し込みた真っ赤 ほうがの貪欲が迎え箱 咽喉の明確に不穏を有る 六なるトタンに 掻き出さない中 切狭の無い当為が 音色の意見を 絞まってて合ってたのです あやふやな兆し といとガチャンが馬鹿げた情感 右腕と折るわけ 三のの ノドをほのめかしては欹てません 小さな咽喉が呻いて 不鮮明な寸法の 意識が意欲を落ち着いて 支離滅裂な歯で 抑揚を交えてはりあげたのです 茅葺きと喘ぎた馬鹿げ不明瞭なのど 正味と滲みる針金 腕前の以内の犬歯の無く情感に 不透明な前歯 煙出しと湯垢がつむってた湯垢 歯茎とほのめかす腕 十のの 二度と有りはいらっしゃらないほうです

  • ソングタイプ

ソングタイプは概ねカテゴリタイプと同じアルゴリズムだが、やや歌詞生成アルゴリズムが異なる。まず1つ目は原曲に全てあなたの所為です。以外の曲である模倣曲を選択できる点だ。そして2つ目は各模倣関係を全てのリンクのウェイトが1の無向グラフで考えたとき、原曲を意味する任意のノードからユーザーが指定したホップ数内で到達可能なノードを模倣単語として使う歌詞の曲とする点だ。具体例として以下の図を使って説明すると、例えば『』を原曲としてユーザーが指定するホップ数を1とする。すると図2でいう『』から1ホップ内で到達可能な『∴∴∴∴』や『-』など(つまり図2でいう背景色が黒色の最上段と上から2段目の界隈曲)が模倣単語として使う歌詞の曲として選ばれる。

テキスト

    自動的に生成された説明

図2 ソングタイプ(原曲を、ホップ数を1とする)

一方、ホップ数を4まで引き上げることで図3のように、ホップ数4までのエッジを模倣単語の歌詞として使う曲として選ぶことができる。

テキスト

    中程度の精度で自動的に生成された説明

図3 ソングタイプ(原曲を、ホップ数を3とする)

ホップ数を導入し模倣単語の量を調節することで原曲からどれだけ似ている曲が生成かできるかコントロールできるようになる。また、模倣曲の模倣関係も歌詞生成時に考慮している為、はじめにの述べた全ての性質を継承することが可能だ。

模倣単語の歌詞として使う曲を選ぶアルゴリズムは以下のとおりだ。

imitates = 模倣単語の歌詞として使う曲の情報を保存する空のリスト

for ins_song in全て歌詞の所為です。上の全てのSongインスタンス do

for imitate in ins_songの原曲リスト do

imitatesにタプル(ins_songのid, imitete, 1)を追加する

for imitated in ins_songの模倣曲リスト do

imitatesにタプル(ins_songのid, imiteted, 1)を追加する

G = imitetesをエッジとする無向グラフ

ins_original = 入力された曲のSongインスタンス

length = ダイクストラ法によって導き出されたins_originalのidと同じGのノードから各ノードへの距離が保存されたタプルのリスト

inp_pops = 5 - 入力された類似度

ins_imitates = 模倣曲のSongインスタンスのins_originalが保存されている集合

for id, pops in length do

if pops <= inp_pops then

idがidであるSongインスタンスをins_imitatesに追加する

また擬似コードで登場した、inp_pops = 5 - 入力された類似度についてだが、「ホップ数」という表現はユーザーにとって分かりづらいので、代わりに範囲が1から5の自然数である「類似度」を導入し、類似度の定義を

に定義することでユーザーに意図を汲み取りやすく設計した。なお、類似度の制約は0から5までの整数である。

実際に類似度を「3」に設定し、原曲に全てあなたの所以です。の『∴∴∴∴』を選択すると以下のような歌詞が生成された

儘娘策謀を混んでて見れくれ着けた、その向う側は暗かって同様で、糸の手の甲にたちふりて認めた、約束事を折り重なってて写ってた。さなか呻く日導ける、絡めひびく数列の遺産は、度の既知に描いてつどいてた、なにかが遡ってて見つめた。売ってた私欲のレスポンスも、裏側の黄色い人達の耳も、大きな温かい中身も、真夜中のコトバです。脊髄に零れるない秒針も、輝けるいざこざ絡まって過去も、咲いてた僕の幾つも、場合の南側です。輪郭の意味合いの歌詞、復活の憶えた泳ぎの様、捕われたかさならを廃れしまってで、毛糸つかう贋作に近付けて関わってたのか。そしていき中ってて、しまいてた段ボールの規範では、避石止まるほうがじゅばくしまう、誰かが泳がせて行なってた。記憶の歌も、短針呼ぶ今も、わたしかの透るレスポンスも、過去の自身です。炙って移り住む到達も、授業拾いてた終盤も、欠片の八の期間?も、初頭の極秘です。会う筈も、緩まってた彼かの逆立ちも、短針に測ってた人々も、自らの夜長です。七の音色の度も、悲傷の櫛も、ありた三の裏返し?も、前の経緯です。絶賛有ってて、明滅括りて、軽蔑おぼえて、通算掘り起こす。判然乱して、回避覚えて、望遠鏡を繰り返せる筈です。首謀凍てついてて、失念鳴り響いてて、改稿絡まりて、闇取引いる。あの後に迷わしたことは、づつを書きた傾向。発祥のものも、確信を残ってだ段ボールも、後ろ姿に結ば苛立ちた、野蛮を語らいてて転がってた。ぱっくがなる制約も、浜辺のいきの格段も、左腕の覗きも、今宵の***です。出来の葉も、網膜をかさなってた決別の逢っても、耳殻に帰そない線路も、全部の一身上です。認めた天の川の半畳を、常態の秒針に群がり、開始閉じ込めて落とした、今の必然です。程度の麦わら帽子のヒビの、事に腐り出来、エヌの繰返し。あざ笑ってた粗大、鳴りだす程度もほど近いはずで、只、思い出すことです。哀れ無く型付きを浸かってては、灯用欲しかって真っ赤を動く。中立を凍りついてた言の葉数え上げ短調が、同様を押し迫ってて!貴女のへたくその後で、私のリハビリテイションを探る。通算を崩した蓋開けの片目は、幽かを挫けて!悲心

  • モデルタイプ

モデルタイプは前述した2つの生成タイプとは異なり、gpt2-japaneseを使いデータセットとして界隈曲全体でファインチューニングを行った言語モデルで歌詞を生成する方法だ。この生成タイプはその性質上、「はじめに」に述べた特徴のうち、特徴1・特徴2・特徴3・特徴4を継承した歌詞を生成できる。ただし、原曲とその模倣曲を全て1つにまとめてファインチューニングを行ったモデルを用いてテキストを生成する為、特徴5の特徴は継承できない。

テキスト生成はgpt2-japaneseをクローンした際にダウンロードされるgpt2-generate.pyを実行できる。gpt2-generate.pyのオプションは表1の通りだ。

表1 gpt2-generate.pyのオプション

オプション名

説明

model

gpt2ja-finetune_run1-small

テキスト生成に使用する言語モデル。ファインチューニング済言語モデルを指定する。

num_generate

100

生成するテキストの数。

min_length

100

生成するテキストの最小の文字数。

top_k

10000

ステップおきの単語の候補数。gpt2において値を40にすることが推奨されているが、界隈曲の生成においては大きめの価にしたことで界隈曲らしさが出た為10000に設定した。

temperature

0.99

ファインチューニングで用いた単語の出現率各率の影響度。0に近いほど似た文章を出力する。本研究ではより多くの界隈曲を出力するので被りを減らす為に1に近い0.99に設定した。

以上の設定で出力した文章は以下のとおりだ。

弔いの言葉。弔いの言葉。全て飽和した、あっしは何も知らずにいたのでした。全て**の所為です。。。。弔いの言葉。弔いの言葉。全てジオープで、作ったうのでした。。。。。。。。。。。。。。手紙は水滴で、冷えた指先で、冷たい手を、振り解き、合わせる。。。。。。。手紙は起こる。

========

幾億と残るのだろう。(いぬき雨に身を捧げ、十重二十重は誤飲滅別と、幾億と寂かの理に突破された、漏れ出る包容の無エンタン。)寂寞の元となり、灼き尽くされるのだ。(独り、最後まで生き、輝いた文字達。)祈りに浸り、意味を繋ごうとし試みて、空に溶けて逝いっていう。

========

大人の国から抜け出した、儘ならな夢の絢爛で草葉の下、輝ける昏い過去が在った。達磨が吐き出した言葉が、脳を締め付けた。其の中には、幾つもの罪が塗れていた。罪を犯した自分が、罪を償えることが出来ず、パンを噛み千切っていた。其の中の幾つもの罪が、黒に染まったモノで。

========

・・・(略)・・・

明るい旋律で首を落とす。全て**の所為です。**の所為です。**の所為です。**の所為です。**の所為です。**の所為です。**の所為です。**の所為です。**の所為です。**の所為です。**の所為です。**の所為です。**の所為です。**の所為です。**の所為です。

ファインチューニングに用いた界隈曲のうち、歌詞に「全て」という単語が含まれている曲が220曲中110曲、「所為」いう単語が含まれている曲が220曲中75曲含まれている所為か、出力した歌詞に「全て」や「所為」といった単語が目立つ。

 これらのデータはそのまま言語モデルが生成した歌詞として登録するのではなく、原曲の歌詞のフォーマットに近づける為に整形をする。整形アルゴリズムは以下のとおりだ。

set_lyrics = モデルタイプで生成され整形された歌詞を保存する空の集合

gpts = gpt2-generate.pyの出力

for gpt in gpts do

if gptが生成された文と文の間の区切り文字以外だったら then

sentence_gpts = 文字「。」で分割されリストになったgpt

for sentence_gpt in sentence_gpts do

sentence_gptの末尾に文字「。」を加える

lyrics_gpts =文字「、」で分割されリストになったsentence_gpt

for lyrics_gpt in lyrics_gpts do

lyrics_gptから括弧があれば削除

set_lyricslyrics_gptを追加

lyrics_tmp = 歌詞の一文が短かった場合に一時的に保存される歌詞の空の文字列

for ai_lyrics in set_lyrics do

if lyrics_tmpが空文字でなければ then

ai_lyricsの末尾にlyrics_tmpを加える

if ai_lyricsの文字数が7文字以下なら then

lyrics_tmp = ai_lyrics

elif ai_lyricsの文字数が20文字以下なら then

if ai_lyricsの末尾が文字「、」でも「。」でもなければ

ai_lyricsの末尾に文字「、」を加える

ins_ai = 新規作成されたAiインスタンス

ins_aiのlyricsカラムのフィールドにai_lyricsを保存する

ins_aiのgenetypeカラムのフィールドに文字列「model」を保存する

ins_aiをセーブする

lyrics_tmpを空文字にする

コード中で登場したAiについては後述する。整形された歌詞は以下のとおりだ。

質量を生み出し此方も、

怖くてたまらないのに。

因数分解念撮真夜中、

灼き尽くされる。

裏方要員。独りよがりの、

心が折れそうになりました。

終わりの始る前のうに殺される者は、

誰も居ないこの世界で日を見てた。

。いは届かず。此の世に

熱く燃やしていくのです。セは、

全て此の世の理の事象が、

妬み続け藁をも。

花が咲いた。あなたの為に、

***の歌は紙に宿る。

全て飽和した夙に見える。

身体を濡らして頬頬に触れた。

舞い散った一度は忘れられない、

其の中の幾つもの罪が、

身体を壊していた。

  1. 全て歌詞の所為です。の実装

今まで述べたような歌詞生成システムはこれで全てだが、これを界隈の人に使ってもらわなければ意味がない。なので本研究では、グラフィカルユーザーインタフェースを備えたウェブアプリケーション「全て歌詞の所為です。」を実装し、ウェブ上にデプロイして実際に使ってもらうようにする。

  1. ページについて

全て歌詞の所為です。は歌詞を生成する為のフォームページと前述した曲のデータの登録フォームページ以外にも、界隈の人が参考になるように様々な界隈曲の情報をまとめてあるページがある。以下、それらのページも含めて各ページのコンテンツを説明する。

  1. トップページ

携帯電話の画面のスクリーンショット

    自動的に生成された説明

画像2 トップページのファーストビュー

URL: https://subekashi.izmn.net/

[13] [14] [15] [16] [17] [18]

トップページは全て歌詞の所為です。のあらゆる情報がまとめてあるダッシュボードの役割を果たしている。

具体的には以下のようなセッションがある

  • 新着の曲

全て歌詞の所為です。上に登録された曲データを新着順に6つ表示する

  • 生成された歌詞

生成された歌詞を新着順に11行表示する

  • 情報不足の曲

全て歌詞の所為です。上に登録された曲データのうち、その曲が聴けるサイトのURLのカラム、もしくは歌詞のカラムのフィールドが埋まっていない曲データを6つ表示する。

  • 未登録の曲

全て歌詞の所為です。上に登録された曲データのうち、その曲が聴けるサイトのURL・歌詞・作者のフィールドが全て埋まっていない曲データを6つ表示する。

  • リンク

全てあなたの所為です。のYouTubeチャンネル、Imitate Communityの公式ウェブサイト、及び全て歌詞の所為です。のYouTubeチャンネルのリンクが載せられている。

  1. 曲の一覧と検索ページ

モニター画面に映るウェブサイトのスクリーンショット

    自動的に生成された説明

画像3  曲の一覧と検索ページのファーストビュー

URL: https://subekashi.izmn.net/search

[19] [20] [21] [22]

全て歌詞の所為です。に登録されている曲の閲覧や検索ができる。検索欄に文字を入力することでその文字を含むチャンネル名(作者)、タイトル、歌詞の検索を包括的に行う。またカテゴリ欄には原曲を選択、もしくは模倣曲のタイトルを入力することでその曲を模倣している曲に検索範囲を絞ることができる。さらに、情報不足の曲やオリジナル模倣曲のみ検索するといったフィルタ機能も備えている。

  1. 曲ページ

テキスト

    自動的に生成された説明

画像4 曲ページのファーストビュー

URLパターン: https://subekashi.izmn.net/songs/>

[20]

全て歌詞の所為です。に登録された曲のデータを閲覧できるページ。表示される要素はタイトル・チャンネル名(作者)・URL・原曲・模倣曲・歌詞である。

  1. 歌詞の登録ページ

グラフィカル ユーザー インターフェイス, テキスト

    自動的に生成された説明

画像5  歌詞の登録ページのファーストビュー

URL: https://subekashi.izmn.net/new

全て歌詞の所為です。上に界隈曲の情報を登録できるページ。曲名はユニーク制約があるので、既存の曲を登録しようとすると警告トーストが出現し、「登録」ボタンが非活性化するような仕様にした。また、複数の模倣曲の追加は「模倣2を追加」ボタンをクリックすると新たなインプットフォームが加わるように設計し、1つのページで入力が完結できるようになっている。

  1. 曲データの追記ページ

グラフィカル ユーザー インターフェイス

    中程度の精度で自動的に生成された説明

画像6  曲データの追記ページのファーストビュー

URLパターン: https://subekashi.izmn.net/edit?id=

曲のURLや歌詞の情報を追記できるフォームのページ。歌詞の登録ページではURLや歌詞が後から入力できるような仕様にしていて、曲ページにてそれらの情報が無い場合にこのページへのリンクが載せられる仕様になっている。

  1. 歌詞データの修正と削除提案ページ

グラフィカル ユーザー インターフェイス, テキスト

    自動的に生成された説明

画像7  歌詞データの修正と削除提案ページのファーストビュー

URLパターン: https://subekashi.izmn.net/wrong/

間違った情報がある模倣曲を報告できるフォームのページ。修正・削除理由とコメントを開発者である私宛に送信することができ、フォーム内容はDiscord Webhookを通じて画像4のように全て歌詞の所為です。のDiscordサーバーへ通知される。

コンピューターのスクリーンショット

    自動的に生成された説明

画像8 全て歌詞の所為です。のDiscordサーバー

  1. チャンネルページ

モニター画面に映るウェブサイトのスクリーンショット

    自動的に生成された説明 

画像9 チャンネルページのファーストビュー

[19] [20] [21] [22] [3] [23]

URLパターン: https://subekashi.izmn.net/channel/

ある特定のチャンネル名(作者)が作曲した界隈曲を閲覧できるページである。

  1. 歌詞の生成ページ

モニター画面に映る文字のスクリーンショット

    自動的に生成された説明

画像10  歌詞の生成ページのファーストビュー

URL: https://subekashi.izmn.net/make

前述で述べた歌詞生成の条件を入力するフォームのページ。ページ上部の生成タイプを変更することで画像11・画像12・画像13のようにフォームが自動で切り替わる。

グラフィカル ユーザー インターフェイス, テキスト

    中程度の精度で自動的に生成された説明

画像11 生成タイプがカテゴリタイプのときのフォーム

グラフィカル ユーザー インターフェイス

    自動的に生成された説明

画像12 生成タイプがソングタイプのときのフォーム

テキスト

    自動的に生成された説明

画像13 生成タイプがモデルタイプのときのフォーム

  1. 生成結果ページ

テキスト

    自動的に生成された説明

画像14  生成結果ページのファーストビュー

URL: https://subekashi.izmn.net/make

歌詞の生成ページで指定した条件の元で生成した歌詞を表示するページ。各行で「最高」、「良い」、「普通」、「微妙」、「悪い」の5段階で歌詞の評価をできる。

  1. 生成された歌詞ページ

テキスト

    低い精度で自動的に生成された説明

画像15  生成された歌詞ページのファーストビュー

URL: https://subekashi.izmn.net/ai

このページは生成結果ページとは異なり、全て歌詞の所為です。上で生成された全ての歌詞を閲覧できる。また、この行でも生成結果ページと同様に評価を行うことができる

  1. データベース設計

全て歌詞の所為です。はDjangoで動いている為、歌詞のデータや生成された歌詞の保存はモデルを用いている。ER図は図4の通りだ。

ダイアグラム

    自動的に生成された説明

図4 全て歌詞の所為です。のER図

Songモデルには全て歌詞の所為です。上に登録した曲の情報を保存する。そして、Aiモデル・Genecategoryモデル・Genesongモデルには生成した歌詞自体、歌詞の生成条件、及び後述する点数を保存する。また生成タイプをカテゴリにした場合、AiモデルにGenecategoryモデルが紐づく。同様に生成タイプをソングにした場合、AiモデルにGenesongモデルが紐づく。

  1. 研究全体のシステム図

以上の設計と実装の内容を踏まえ、システム図を書くと図5のようになる。

グラフィカル ユーザー インターフェイス, テキスト

    自動的に生成された説明

図5 研究全体のシステム図

全て歌詞の所為です。のDjangoプロジェクトはpythonanywhereと呼ばれるPaaSにデプロイした。pythonanywhereにはbashが動くコンソールを利用できる為、全て歌詞の所為です。に更新があった場合はGitHubを通してプルとプッシュを行う。

  1. 評価

本研究では主観評価と客観評価の2つの評価方法で評価を行う。

  1. 主観評価

主観評価では実際に私が界隈の人として、全て歌詞の所為です。を使い界隈曲を作曲する方法で評価を行った。具体的な方法は以下のとおりだ。

  1. 主観評価の評価方法

はじめに作曲する界隈曲について、原曲である『.[short]』の模倣曲『Λ[short]』の歌詞を作詞する。.のショートバージョンなので短い曲で手軽に作詞できるという理由でこの曲を選んだ。次に全て歌詞の所為です。の歌詞生成ページでカテゴリタイプ・ソングタイプ・モデルタイプの3つ全ての生成タイプを使い、歌詞を生成する。このときカテゴリタイプは条件として.模倣を選択し、ソングタイプは曲名を『.』で類似度を3に設定する。

以上により生成された歌詞を予め用意したメロディに沿って一音ずつ歌詞を入れ作詞する。

  1. 作詞した結果

楽譜1のような曲が完成した。

図形

    低い精度で自動的に生成された説明

楽譜1 Λ[short]

8小節目の4拍目から14小節目の3拍目の2番の歌詞は1番と同じなので省略している。歌詞は以下のとおりだ。

携帯ゲーム機の蓋は消えたけど、

ただ呼ぶだけの雨粒は、

盲言の如く。

それは不可逆的な理を、生み出した終焉。

戯れに欠いた現実は、

枯れてゆくのでした。

手のひらで描いた円は質すけど、

捻れた現実を少しずつ受けれてゆく、

それは不可逆的な理を、

生み出した終焉。

戯れに欠いた現実は、

全て歌詞の所為です。

        

  1. 全て歌詞の所為です。を使ってみての評価

多少の文法的なミスがあったものの、全体的に界隈曲のような歌詞を生成できていた。具体的には始めに、カテゴリタイプとソングタイプで歌詞の大枠を作り、その後モデルタイプで歌詞の語彙力や難読性を増やす、といった方法で作詞をするとうまく界隈曲を作詞できる。以上より、全て歌詞の所為です。は強力な界隈曲作詞サポートツールになりうるだろう。

  1. 客観評価

客観評価では界隈の人が生成された歌詞を各行に対して評価してもらう評価方法である。具体的な方法は以下のとおりだ。

  1. 客観評価の評価方法

前述した生成結果ページと生成された歌詞ページには生成した歌詞の各行を「最高」、「良い」、「普通」、「微妙」、「悪い」の5段階で評価できるアンケート機能がある。本研究ではこの機能を使って生成された歌詞の良し悪しを評価する。なお、「最高」を5点、「良い」を4点、「普通」を3点、「微妙」を2点、「悪い」を1点として扱い、定量的に評価ができるようにする。

  1. 評価結果と考察

評価の結果、表2のような評価になった。

生成タイプ

評価件数 (件)

平均点 (点)

カテゴリタイプ

1132

3.10

ソングタイプ

599

3.21

モデルタイプ

270

3.87

合計

2001

3.34

2001行の評価があり、平均値はそれぞれカテゴリタイプでは5点中3.10点、ソングタイプでは5点中3.21点、モデルタイプでは5点中3.87点になった。それぞれの生成タイプについての詳細と考察を述べたいと思う。

  1. カテゴリタイプの評価

カテゴリタイプでは私が実装した生成タイプのうち、平均的に一番低い点数になってしまった。各カテゴリの平均点や評価の割合に注目するとグラフ1、グラフ2のような結果が得られた。

グラフ1 各カテゴリの平均点

※小数第三位を四捨五入している

※可読性を高める為、「名の無い星が空に堕ちたら模倣」は「名の無い星模倣」と略している。

グラフ2 各カテゴリの各評価の割合

ただし各カテゴリの評価件数は表3の通りだ。

表3 各カテゴリの評価件数

カテゴリ

評価件数 (件)

.模倣

166

..模倣

104

教育模倣

102

アブジェ模倣

68

...模倣

88

表/裏模倣

76

名の無い星が空に堕ちたら模倣

83

エヌ模倣

134

K²模倣

311

合計

1132

表3 各カテゴリの評価件数

ここで注目してほしいことは、はじめにで述べた特徴1の特徴がより強い曲、つまり支離滅裂な曲のカテゴリほど高い点数を得ているところだ。逆に言うと「教育模倣」や「K²模倣」といったカテゴリは原曲の歌詞にストーリー性があるので、それを加味していないカテゴリタイプでは界隈の人から高い評価を得にくかったと考察できる。

ただし例外的に「名の無い星が空に堕ちたら模倣」の曲は比較的ストーリー性があるにも関わらず、3.43点とカテゴリタイプ全体の平均以上の点数を得ることができた。具体的に「最高」と評価された行は以下のような歌詞だ。

目を覚えたら空が溺れていた

影の陰が伸ばせるでしょう

空の空が揺らめくでしょう

歌を墜ちるわたしのくじら

この日は早い鯨の日で

伸ばせる風の唄は

そっと聞えて思い出したけど

笑い声を墜ちたら空がしまってて響いてた

歌声の遅い鯢が唄に聞えたら

夕やけの美声はとても青くて

夕やけの陰があるでしょう

手遊びが笑えた

笑い声のやけはとても遠くってて

星の方へ

なずむのに

事を憶え

わらべの寄り道は

いうやおぼろ月夜走り抜けてやってた

『名の無い星が空に堕ちたら』やその模倣曲はストーリー性があり、かつ他の原曲とは異なり「夕焼け」、「鯨の歌」、「瑠璃色」といったエモーショナルな単語が登場する。模倣単語にもそういった単語が現れた結果、エモーショナルな歌詞を生成した為、評価が高くなったと考察できる。

  1. ソングタイプの評価

ソングタイプは生成する歌詞の原曲を全てあなたの所為です。以外に選べることができ、評価では原曲を含めた計14曲の評価をもらった。本研究ではそのうち価件数が10件未満でかつ、平均的が5点満点ではない曲である9曲の評価の分析を行った。各行の点数の平均点はグラフ3の通りだ。

グラフ3 各曲の平均点

ただし各曲の評価件数は表4の通りだ。

曲名

評価件数 (件)

...

135

57

教育

78

。。。

45

22

アブジェ

26

信号

72

全てわたしの所為です。

88

21

セル

55

合計

599

表4 各曲の評価件数

結果、カテゴリタイプと同様に支離滅裂な曲のカテゴリほど高い点数を得ていることが考察できた。一方、類似度と平均点の相関は-0.13でほとんど相関は無かった。また、ソングタイプはカテゴリタイプと違い、原曲となる界隈曲と類似度を選択できるが故に、生成パターンが界隈曲の数である約2000曲×類似度1~5で約10000パターンあり、実際に評価が各パターンに分散してしまった為、統計的に有意な結果を得られているとは言えないだろう。よってこの生成カテゴリの評価を行う為にはさらなる評価件数が必要であると言える。

  1. カテゴリタイプとモデルタイプの評価について

さて、カテゴリタイプとモデルタイプの「最高」の評価について、一つ興味深い評価が得られた。

七なる歯に

重ならな庇で

軋轢と重なってた腐らし明瞭な愁い

これらの行の歌詞は文法的に間違っているにも関わらず、「最高」の評価を貰った。この要因として、界隈曲には稀に歌詞の流れの響きを変える為に、日本語の文法を崩すことがある。例えば全てあなたの所以です。の『偶』の一節

「予測されるは不変のアルファ・アルゴリズム。」 [23]

の場合は「予測される」の後に名詞が続いていないので、文法的な間違いがある。界隈の人はそういった文法的なミスも加味して「最高」の評価をしたのではないかと考察できる。

  1. モデルタイプの評価

モデルタイプは全て歌詞の所為です。上に登録された全ての界隈曲を元にgpt2-japaneseという高精度な言語モデルを用いて歌詞生成した為、その生成タイプよりも高い3.87点もの点数を得ることができた。

「最高」で評価された行の歌詞を詳しく見ると

睡蓮アルウェーンが高圧炉の中、

都合よく書き取る狼煙ですが、

嘘で塗れた水平線の彼方、

警報が発しこちらを向いていました。

希望を引き裂いて悪を為す妖怪たちが、

渇いた音を紡いでいく。

マイクロ波を追いかけて、

誰が為に道を塞ぐのか。

こういった意味不明な歌詞も「最高」と評価されていて更に

分からなくて退廃に沈んだ儘ただの愛よりも、

愛おしそうに抱く。

華奢な骸の春が甘い水を、

夢を見る其の時まで。

わらべ歌の意味は歌詞も消えていた、

心地よい音へと誘うピアノの様。

それは雪の積もるお伽噺で、

蘇る事の無い景色の夢語り。

こういったエモーショナルな歌詞も「最高」と評価されていた。

支離滅裂な歌詞もエモーショナルな歌詞も生成できるモデルタイプは結果的に高い点数を得ることができたのではないだろうか。

  1. 結論
  1. まとめ

本研究では全てあなたの所為です。の模倣曲を作詞できるようなウェブアプリケーション「全て歌詞の所為です。」を制作した。サイト上には「カテゴリタイプ」、「ソングタイプ」、「モデルタイプ」の計3つの生成タイプで歌詞を生成できる機能があり、生成した歌詞の各行に対して「最高」を5点、「良い」を4点、「普通」を3点、「微妙」を2点、「悪い」を1点で評価を行ったところ、平均価はそれぞれカテゴリタイプでは5点中3.10点、ソングタイプでは5点中3.21点、モデルタイプでは5点中3.87点でモデルタイプの一番点数が高かった。

具体的に、カテゴリタイプの中でも原曲が支離滅裂な歌詞のカテゴリは平均点数が高くなり、逆にストーリー性がある歌詞の原曲のカテゴリは一部例外を除いて平均点が低くなる傾向があった。また、モデルタイプはその両方を考慮して歌詞を生成できるので高い点数を得ることができた。ソングタイプは統計的な有意な結果を得ることができなかったが、概ねカテゴリタイプと同じように支離滅裂なほど点数が高くなる傾向があった。また、カテゴリタイプとソングタイプに関しては文法的な間違いのある歌詞にも関われず、最も良い「最高」の評価をしているケースがあった。

  1. 今後の課題

今後の研究としては歌詞生成時に文法的に間違えている歌詞を修正した場合の各生成タイプの評価の影響について調査したいと考えている。また、gpt2-generate.pyのオプションであるtop_kやtemperatureの値を変えた場合、より界隈曲に近い文章は生成できるか研究を行いたい。

参考・引用・参考文献

[1] 全てあなたの所為です。 (2020) 『エヌ』

[2] 全てあなたの所為です。 (2022) 『K²』

[3] 全てあなたの所為です。 (2020) 『...』

[4] 全て夢見の為す事です。 (2022) 『|||』

[5] Abe, C., & Ito, A. (2012, December). A Japanese lyrics writing support system for amateur songwriters. In Proceedings of The 2012 Asia Pacific Signal and Information Processing Association Annual Summit and Conference (pp. 1-4). IEEE.

[6] Rodrigues, M. A., Oliveira, A., Moreira, A., & Possi, M. (2022, May). Lyrics Generation supported by Pre-trained Models. In The International FLAIRS Conference Proceedings (Vol. 35).

[7] Chen, Y., & Lerch, A. (2020, December). Melody-conditioned lyrics generation with seqgans. In 2020 IEEE International Symposium on Multimedia (ISM) (pp. 189-196). IEEE.

[8] Takahashi, R., Nose, T., Chiba, Y., & Ito, A. (2020, October). Successive Japanese Lyrics Generation Based on Encoder-Decoder Model. In 2020 IEEE 9th Global Conference on Consumer Electronics (GCCE) (pp. 126-127). IEEE.

[9] Riedl, M. (2020). Weird AI Yankovic: Generating Parody Lyrics. arXiv preprint arXiv:2009.12240.

[10] Mocobeta. (2022, February 25). WELCOME TO JANOME’S DOCUMENTATION! (JAPANESE). Janome v0.4 Documentation (Ja). https://mocobeta.github.io/janome/

[11] Tedboy. (2016, September 13). API — Gensim. NLP APIs. https://tedboy.github.io/nlps/api_gensim.html

[12] Tanreinama. (2022, September 11). Tanreinama/Gpt2-Japanese: Japanese GPT2 Generation Model. GitHub. https://github.com/tanreinama/gpt2-japanese

[13] 全て幻だろうか。(2020)「◆[short]」

[14] 全てあなたの音です。(2022)「♩♩」

[15] 何時か忘れて仕舞うのでしょう。(2022)「Morgenrot」

[16] 全て行方の所為です。(2022)「

[17] 全て幻だろうか。(2020)「◇[short]」

[18] 全てあの世の所為です。(2022)「E403」

[19] 全てあなたの所為です。(2018)「.」

[20] 全てあなたの所為です。(2018)「..」

[21] 全てあなたの所為です。(2018)「教育」

[22] 全てあなたの所為です。(2018)「アブジェ」

[23] 全てあなたの所以です。(2021)「偶」

トップ

新規登録

検索

編集履歴

歌詞生成

宣伝

記事

お問い合わせ

設定

全てあなたの所為です。

2026-07-26(ver.2637)