技術資料

[添付ファイル一覧] [全ページの添付ファイル一覧]
アップロード可能最大ファイルサイズは 16,384KB です。

目次


はじめに 

本研究では大まかに2つのことをやる
1.webから楽曲特徴量を取得し、特徴量に応じたHTMLの作成(下準備)
2.顔から感情値を取得し、感情値に応じてHTMLへ移動
実行したいだけの人は下の「楽曲推薦の実行方法」まで飛ばしてください

使うプログラム全て 

使うプログラムはこちら ※最終的に1.8GBの容量になるのでPCに1.8GB分の容量をあけておいてください

中身はこんな感じ

使うプログラム1.png

「1.プレイリスト作成用プログラム」は、HTML作成するプログラムで「2.顔から感情推定用プログラム」は顔から感情を取得するプログラムである。
「data」は「1.プレイリスト作成用プログラム」のプログラムの実行結果のcsvを格納するためのフォルダである

手順 

下準備1.GeniusAPIからアクセストークを取得
下準備2.SpotifyからClientid、Clientsecretを取得
1.「1.プレイリスト作成用プログラム」の「2.Geniusから歌詞の取得.ipynb」を実行
2.「1.プレイリスト作成用プログラム」の「3.BERTのモデルの構築&歌詞の感情推定」のなかにある「3.BERTモデル構築&感情推定.ipynb」を実行
3.「1.プレイリスト作成用プログラム」の「4.LDAによるトピック分類.ipynb」を実行
4.「1.プレイリスト作成用プログラム」の「5.トピックと楽曲特徴量によるHTMLの作成.ipynb」を実行
ここで、HTML作成は終わり
5.「2.顔から感情推定用プログラム」のapp.py実行用のモジュールをインストール(インストールするモジュールは後述)
6.「2.顔から感情推定用プログラム」のapp.pyをコマンドプロンプトから起動

以下にそれぞれの解説を行う

下準備 

下準備1(Geniusのアクセストークンを取得) 

GeniusAPIから歌詞を取得するには、以下のサイトの、「Geniusのアカウント登録」、「Genius APIにおけるトークンの取得」を行う

https://self-development.info/%E3%80%90%E6%AD%8C%E8%A9%9E%E5%8F%96%E5%BE%97%E3%81%8C%E3%81%A7%E3%81%8D%E3%82%8B%E3%80%91genius-api%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E6%96%B9%E6%B3%95/

登録したら、アクセストークンをコピーする。これは2.Geniusから歌詞の取得.ipynbで使用する

アクセストークン.jpg

下準備2(SpotifyからclientID、clientsecretを取得) 

spotifyから楽曲の特徴量を取得するには、spotifyに会員登録をし、clientid,crientsecretを取得する必要がある。
以下のサイトの、「ここまででCLIENT ID と CLIENT SECRET ID を取得する流れは完了です」までを実行する
https://zenn.dev/tteaoocl/articles/6cce2e7615c11c アプリを作成の部分で、アプリ名とアプリの説明は何でもよいが、リダイレクトURLは以下を入力する
https://example.com/callback/

アクセストークン22.png
アクセストークン333.png

「1.プレイリスト作成用プログラム」の解説 

「1.プレイリスト作成用プログラム」の中身はこのようになっている

使うプログラム2.1.png

2から順番に使っていきます

基本的にコードを実行していくだけでできます。

「2.Geniusからの歌詞の取得ipynb」の解説 

このプログラムでできること
・アーティスト名と楽曲名から歌詞を取得する
・スクレイピングで取得した歌詞の不要な部分の除去
ipynbはそれぞれのブロックに分かれているので、それぞれの重要な部分の解説を行う

モジュールのインストールの部分 

コードを実行するとこのプログラムの実行に必要なモジュールがダウンロードされる

Geniusから歌詞の取得の部分 

tokenに「下準備1」で取得した自分のアクセストークンを入れる

アクセストークン2.png

「clean_lyrics」は歌詞から不要な文字列を削除する関数。

2関数1.png

これはアーティスト名と曲名を使って Genius から歌詞を取得する関数。

2関数2.png

これは削除したい不要な文字列を削除する部分。削除したい文字列を追加したい場合配列に追加する

2関数3.png

最後に、結果が「data」の「2.ごみとり前歌詞付き楽曲特徴量1.csv」に保存される。

取得した歌詞のごみとり1の部分 

これは取得した歌詞から分析に関係ないごみを取るコード。
実行に200分くらいかかるので、実行したら放置。
最後に、結果が「data」の「3.ごみとり前歌詞付き楽曲特徴量2.csv」に保存される。

取得した歌詞のごみとり2の部分 

これは上と同じようにごみを取るコード
これはすぐ終わります
最後に、結果が「data」の「4.歌詞付き楽曲特徴量.csv」に保存される。

「3.BERTのモデル構築&歌詞の感情推定」の解説 

このプログラムでできること
・BERTのモデルを構築する
・構築したBERTモデルを用いて歌詞の感情値(0~1の連続値、1に行けば行くほどポジティブを表す)を推定する
BERTについて知りたい人はこちらを参考に↓
https://aisuite.jp/column/bert/ 
「3.BERTのモデル構築&歌詞の感情推定」の中身はこのようになっている。この中の「3.BERTのモデル構築&歌詞の感情推定.ipynb」を実行する

3の中身.png

モジュールインストールの部分 

実行するとこのプログラムの実行に必要なモジュールがダウンロードされる

同じディレクトリにある「chABSA-dataset.zip」を解凍するコードの部分 

「chABSA-dataset」は、TISが公開している感情分析を行うためのデータセット
詳しくはこちら↓
https://www.tis.co.jp/news/2018/tis_news/20180410_1.html

3.1.png

このコードは以下のサイトから「chABSA-dataset.zip」をダウンロードしている↓
https://github.com/chakki-works/chABSA-dataset?tab=readme-ov-file
コードを実行すると「chABSA-dataset.zip」が解凍される

3.2.0.png

「chABSA-dataset」のデータの形を整え感情分析用のデータセットのcsvを作成の部分 

このコードは「chABSA-dataset」を扱いやすいようにcsvファイルに変換している
ほぼこのページを参考にしました↓
https://zenn.dev/robes/articles/a7ba6e172f3a14

コードを実行すると「dataset.csv」が保存される

3.2.1.png

中身はこんな感じ。「label」は、「text」の文章がポジティブかネガティブかを表している(0ならネガティブ、1ならポジティブ)

3.3.png

「bert-base-japanese-v2」の事前学習モデルを使って「chABSA-dataset」のデータセットでファインチューニングを行ってBERTの感情分析モデルを完成させるの部分 

このコードはさっき作った「dataset.csv」を使ってBERTを感情分析用に適用させる。
BERTは事前学習は東北大学が公開している「bert-base-japanese-v2」を使用している
「bert-base-japanese-v2」についてはこちら↓
https://www.math-joy-life.com/bert-base-japanese-v2
各行の このコードを実行するとBERTのモデルが作成される

完成したモデル.png

作成したモデルを用いて歌詞の感情分析の部分 

列名を整えるの部分 

csvファイルの列名を整えている コードを実行すると「data」に「6.歌詞感情値付き楽曲特徴量2.csv」が保存される

「4.LDAによるトピック分析.ipynb」の解説 

このプログラムでできること
・LDAを拡張したガイド付きLDAを用いて、歌詞から任意のトピックを抽出する。
LDAとは、それぞれのテキストを単語に分割して情報化して、各テキストについてのトピックを推定するもの
ガイド付きLDAとは、それぞれのトピックに「予約語」を設定することで、テキストを任意のトピックへクラスタリングするもの

LDAについて知りたい人はこちら↓
https://recruit.gmo.jp/engineer/jisedai/blog/topic-model/
ガイド付きLDAについて知りたい人はこちら↓
https://qiita.com/pocket_kyoto/items/23ebe43c7f647f2c6b6f

モジュールのインストールの部分 

実行するとこのプログラムの実行に必要なモジュールがダウンロードされる

#ref(): File not found: "モジュールのインストール4.png" at page "水上さん修論_backup"

ガイド付きLDAを用いて歌詞からトピックを抽出するの部分 

「5.トピックと楽曲特徴量によるHTML.ipynb」の解説 

このプログラムでできること
・トピックと特徴量ごとにプレイリストを作成
・プレイリストを埋め込んだHTMLの作成

モジュールのインストールの部分 

実行するとこのプログラムの実行に必要なモジュールがダウンロードされる

特徴量によるクラスタ分けの部分 

初回認証の部分 

プレイリストの作成」とhtmlの作成の部分の部分 

「2.顔から感情推定用プログラム」の解説 

表情から感情値を取得し、「1.プレイリスト作成プログラム」で作成されたプレイリストへ移動するコード 「2.顔から感情推定用プログラム」の中身は以下の通り

2の中身.png

「static」には「1.プレイリスト作成用プログラム」で作成されたプログラムが入っている。
「templates」にはhtmlの表示部分の「index.html」が入っている
「測定結果」には、表情から測定した各感情の確率が格納されているcsvファイルが保存される
「app.py」実行プログラム

楽曲推薦の実行方法 

環境はPython 3.10.1で実行できました。ほかのバージョンでもできると思いますが、実行できなかったらpython 3.10.1でやってみてください

以下のモジュールをインストール。多分これでいけます。モジュールのインストールエラーが出たら適宜インストールする。

pip install flask==3.1.0
pip install deepface==0.0.93
pip install tensorflow==2.18.0
pip install tf-keras==2.18.0

コマンドプロンプトから「2.顔から感情推定用プログラム」の中の「app.py」を実行
学籍番号と名前を入力(測定結果のcsvファイルの名前を区別するためなので、何でもよい)

動作1.png

以下の画面になったら、ctrlボタンを押しながら「https:://127.0.0.1:5000」のところを押す

動作2.png

実行できたら以下のフロント画面が表示される。
この画面はカメラから表情を認識し、

動作3.png

「楽曲を表示」ボタンを押すと、ネガティブ強度の平均値に応じたサイトに別タブで移動する

動作4.png

フロント画面の「終了する」ボタンを押すか、フロント画面のタブを閉じると測定終了。「測定結果」のファイルにcsvファイルが保存される。
「感情値(前)」の方は、フロント画面を起動してから「楽曲を表示する」ボタンを押す前(音楽を聴く前)までの各感情のスコアが保存されている。
「感情値(後)」の方は「楽曲を表示する」ボタンを押してからフロント画面を閉じる(音楽を聴いた後)の各感情スコアが保存されている

動作5.png

おわり


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS