目次
1.各種アプリをダウンロードする。
2.OpenAI、GoogleのAPIキーを取得する。
実行したいだけの人は下の「問診デモの実行方法」まで飛ばしてください
使うプログラムはGoogleDriveにのせてある
中身
下準備1.OpenAI,GoogleのAPIキーを取得
下準備2.上のZIPファイルをダウンロード
下準備3.Unity,VOICEBOXをダウンロード
以下にそれぞれの解説を行う
OpenAIのAPIキー取得方法を以下を参照 https://qiita.com/kurata04/items/a10bdc44cc0d1e62dad3
GoogleのAPIキー取得方法は以下 https://zenn.dev/tmitsuoka0423/articles/get-gcp-api-key
今回使用するプログラムを動かすアプリUnity
詳しいダウンロード手順は以下を参照
https://school.dhw.co.jp/word/cg/Unity_install.html
今回使用しているエディターのバージョンは3.33f1である初めからこれをダウンロードしてあると楽。
Unityを使用するにはVisual Studioがインストールされている必要がある。今回2022で動作確認済。
アバターから音声を出力してくれるアプリVOICEBOX
詳しいダウンロード手順は以下を参照
https://sosakubiyori.com/voicevox-introduction/
起動したらアバター選択になるがなににしてもよい。
以下の画面になればよい。
Unity起動中は常にこの画面で起動しておく。
「1.プレイリスト作成用プログラム」の中身はこのようになっている
#ref(): File not found: "使うプログラム2.1.1.png" at page "高田さん修論_backup"
2から順番に使っていきます
基本的にコードを実行していくだけでできます。
このプログラムでできること
・アーティスト名と楽曲名から歌詞を取得する
・スクレイピングで取得した歌詞の不要な部分の除去
ipynbはそれぞれのブロックに分かれているので、それぞれの重要な部分の解説を行う
コードを実行するとこのプログラムの実行に必要なモジュールがダウンロードされる
tokenに「下準備1」で取得した自分のアクセストークンを入れる
#ref(): File not found: "アクセストークン2.png" at page "高田さん修論_backup"
「clean_lyrics」は歌詞から不要な文字列を削除する関数。
#ref(): File not found: "2関数1.png" at page "高田さん修論_backup"
「get_lyrics」はアーティスト名と曲名を使って Genius から歌詞を取得する関数。
#ref(): File not found: "2関数2.png" at page "高田さん修論_backup"
これは削除したい不要な文字列を削除する部分。削除したい文字列を追加したい場合配列に追加する
#ref(): File not found: "2関数3.png" at page "高田さん修論_backup"
最後に、歌詞の列を追加したcsvが「data」の「2.ごみとり前歌詞付き楽曲特徴量1.csv」に保存される。
これは取得した歌詞から分析に関係ないごみを取るコード。
実行に200分くらいかかるので、実行したら放置。
最後に、歌詞のゴミとり処理を行った結果のcsvファイルが「data」の「3.ごみとり前歌詞付き楽曲特徴量2.csv」に保存される。
これは上と同じようにごみを取るコード
これはすぐ終わります
最後に、歌詞のごみとり処理を行った結果結果が「data」の「4.歌詞付き楽曲特徴量.csv」に保存される。
このプログラムでできること
・BERTのモデルを構築する
・構築したBERTモデルを用いて歌詞の感情値(0~1の連続値、1に行けば行くほどポジティブを表す)を推定する
BERTについて知りたい人はこちらを参考に↓
https://aisuite.jp/column/bert/
「3.BERTのモデル構築&歌詞の感情推定」の中身はこのようになっている。この中の「3.BERTのモデル構築&歌詞の感情推定.ipynb」を実行する
#ref(): File not found: "3の中身.png" at page "高田さん修論_backup"
実行するとこのプログラムの実行に必要なモジュールがダウンロードされる
「chABSA-dataset」は、TISが公開している感情分析を行うためのデータセット
詳しくはこちら↓
https://www.tis.co.jp/news/2018/tis_news/20180410_1.html
#ref(): File not found: "3.1.png" at page "高田さん修論_backup"
このコードは以下のサイトから「chABSA-dataset.zip」をダウンロードしている↓
https://github.com/chakki-works/chABSA-dataset?tab=readme-ov-file
コードを実行すると「chABSA-dataset.zip」が解凍される
#ref(): File not found: "3.2.0.png" at page "高田さん修論_backup"
このコードは「chABSA-dataset」を扱いやすいようにcsvファイルに変換している
ほぼこのページを参考にしました↓
https://zenn.dev/robes/articles/a7ba6e172f3a14
コードを実行すると「dataset.csv」が保存される
#ref(): File not found: "3.2.1.png" at page "高田さん修論_backup"
中身はこんな感じ。「label」は、「text」の文章がポジティブかネガティブかを表している(0ならネガティブ、1ならポジティブ)
#ref(): File not found: "3.3.png" at page "高田さん修論_backup"
このコードはさっき作った「dataset.csv」を使ってBERTを感情分析用に適用させる。
BERTは事前学習は東北大学が公開している「bert-base-japanese-v2」を使用している
「bert-base-japanese-v2」についてはこちら↓
https://www.math-joy-life.com/bert-base-japanese-v2
BERTのモデルのトレーニングに使用するトレーニング引数である
#ref(): File not found: "トレーニング引数.png" at page "高田さん修論_backup"
num_train_epochsはエポック数であり学習データを全て 1 回モデルに入力するプロセスの回数である
per_device_train_batch_size、per_device_eval_batch_sizeトレーニングと評価の際のバッチサイズであり、一度にモデルへ入力されるデータサンプルの数のことである
warmup_steps学習率が最大値に到達するまでのステップ数である
weight_decayは重み減衰率であり,モデルの過学習を防ぐためのパラメータである
logging_stepsはlogに記録を書き込む回数のことである
BERTの用語について詳しくはこちら↓
https://deepsquare.jp/2020/07/transformer/
このコードを実行するとBERTのモデルが作成される
#ref(): File not found: "完成したモデル.png" at page "高田さん修論_backup"
また、最後にモデルの評価結果が出力される。
#ref(): File not found: "モデルの評価.png" at page "高田さん修論_backup"
このコードは、作成したBERTの感情分析モデルで、歌詞の感情値を分析している
BERTで歌詞のポジティブ、ネガティブの割合を分析し、ポジティブの割合を感情値としている。
このコードを実行すると歌詞の感情分析結果を追加したcsvファイルが「data」の「5.歌詞感情値付き楽曲特徴量_列名修正前.csv」に保存される
csvファイルの列名を整えている
コードを実行すると列名を変更したcsvファイルが「data」の「6.歌詞感情値付き楽曲特徴量2.csv」に保存される
このプログラムでできること
・LDAを拡張したガイド付きLDAを用いて、歌詞から任意のトピックを抽出する。
LDAとは、それぞれのテキストを単語に分割して情報化して、各テキストについてのトピックを推定するもの
ガイド付きLDAとは、それぞれのトピックに「予約語」を設定することで、テキストを任意のトピックへクラスタリングするもの
LDAについて知りたい人はこちら↓
https://recruit.gmo.jp/engineer/jisedai/blog/topic-model/
ガイド付きLDAについて知りたい人はこちら↓
https://qiita.com/pocket_kyoto/items/23ebe43c7f647f2c6b6f
実行するとこのプログラムの実行に必要なモジュールがダウンロードされる
ここでは、ガイド付きLDAを用いて、歌詞を「恋愛」「青春」「応援」「友情」「絶望、孤独」「夢、目標」「人生」「ストーリー」「季節、風景描写」「地名場所」に分類している。
ここはストップワードを設定する部分。ストップワードとは、分析に必要のない単語のことであり、ストップワードを設定して分析に関係ない単語を除去している
#ref(): File not found: "4.1.png" at page "高田さん修論_backup"
ここは予約語の定義の部分。予約語として各トピックに関連するワードを設定することにより歌詞を任意のトピックに分類することができる。
それぞれのトピックの予約語は、トピックに関連するであろうワードを自分で設定しました。ここを変えればクラスタ結果が変わります。
#ref(): File not found: "4.2.png" at page "高田さん修論_backup"
ここは歌詞からストップワード、と英語を除去し、単語ごとに分割している
#ref(): File not found: "4.31.png" at page "高田さん修論_backup"
ここは予約語をもとに初期トピックの単語分布を設定している。
#ref(): File not found: "4.4.png" at page "高田さん修論_backup"
ここはLDAモデルのパラメータ設定部分。etaはトピックの単語分布を表し、さっき作成した単語分布を使用している
#ref(): File not found: "4.5.png" at page "高田さん修論_backup"
最後に、トピックのクラスタ結果を追加したcsvファイルが「data」の「7.歌詞感情値楽曲特徴量_with_cluster.csv」に保存される
また、クラスタとトピック対応表のcsvファイルが「data」に保存される
このプログラムでできること
・トピックと特徴量ごとにプレイリストを作成
・プレイリストを埋め込んだHTMLの作成
実行するとこのプログラムの実行に必要なモジュールがダウンロードされる
これは楽曲を、「高ネガティブ強度向け」「中ネガティブ強度向け」「低ネガティブ強度向け」にクラスタリングしている。
最後に、特徴量のクラスタ結果を追加したcsvファイルが「data」の「8.歌詞感情値付き楽曲特徴量_with_cluster_更新.csv」に保存される
これは、次の「プレイリストの作成とhtmlの作成」を実行するために必要なコードである。 まず、「CLIENT_ID」と「CLIENT_SECRET」は「下準備2」で取得したものを入れる
#ref(): File not found: "クライアント登録.png" at page "高田さん修論_backup"
実行すると、以下のurlが出てくるので、クリックする
#ref(): File not found: "実行1.png" at page "高田さん修論_backup"
そうすると以下の画面が出るので、このページのurlをコピーする
#ref(): File not found: "実行2.png" at page "高田さん修論_backup"
また、画面上部にurlを張り付ける部分が出てくるので、先ほどコピーしたurlを張り付ける
#ref(): File not found: "認証1.png" at page "高田さん修論_backup"
成功すると「認証成功!アカウント名:(ユーザの名前)」が表示される。もし認証に失敗したらもう一度urlを張りなおすか、client,clientsecretが間違っていないか確認する
#ref(): File not found: "認証結果.png" at page "高田さん修論_backup"
ここは、上の初回認証を終わった後に行う。 まず、「CLIENT_ID」と「CLIENT_SECRET」は「下準備2」で取得したものを入れる
#ref(): File not found: "クライアント登録2.png" at page "高田さん修論_backup"
実行するとurlの入力が要求されるので、「初回認証」で取得したurlを張り付ける
#ref(): File not found: "認証2.png" at page "高田さん修論_backup"
入力が成功すると、まず、自分のSpotifyアカウントにプレイリストが作成される
#ref(): File not found: "プレイリスト.png" at page "高田さん修論_backup"
また、作成されたプレイリストが埋め込まれたhtmlが「2.顔から感情推定用プログラム」の「static」の中の「楽曲」というフォルダにそれぞれの強度ごとのhtmlが保存される
#ref(): File not found: "作成されたhtml.png" at page "高田さん修論_backup"
表情から感情値を取得し、「1.プレイリスト作成プログラム」で作成されたプレイリストへ移動するコード 「2.顔から感情推定用プログラム」の中身は以下の通り
#ref(): File not found: "2の中身.png" at page "高田さん修論_backup"
「static」には「1.プレイリスト作成用プログラム」で作成されたプログラムが入っている。
「templates」にはhtmlの表示部分の「index.html」が入っている
「測定結果」には、表情から測定した各感情の確率が格納されているcsvファイルが保存される
「app.py」は実行プログラム
まずUnityHubを起動します。右上のディスクから追加を押してダウンロードしたzipファイルを選択します。
選択できたら起動します。
次に取得したAPIキーを入力。
Googleは以下に
OpenAIは以下に
それぞれ入力できたら中央上の再生ボタンを押す。(終了するときもこのボタン、横の停止ボタンではない)
起動したら「こんにちは」というと質問に答えてくれるモードになる。一定時間何も言わないと勝手に聞き取らなくなるのでそのときは再度「こんにちわ」という。
高田さん修論
おわり