BERTによる感情分析 & シーン認識

近況

期末試験&面接という怒涛の1週間が終わりました_:(´ཀ`」 ∠):

 

「現在の環境にあわせたBGMを再生して、日常を彩る(ゲームやアニメの世界)」という昔からの夢の一つを叶えるアプリをカメラによるシーン認識と最適な音楽の選定で実現できるかも?

 

BERTによる感情分析

音楽を「どんなシーン・精神状態・環境で聴きたいか」を決めるには、さまざまな方法が考えられりゅ。

  • 再生したタイミングに近い音楽のテンポ・歌詞・ジャンルから似たものを採択
  • ユーザのフィジカルデータの推移を評価指標に(緊張状態を緩和する音楽の特徴の学習など?)
  • カメラ映像に映り込む物体を言語化し、関連した名称を含む音楽を検索

他にもセミナーのハッカソン表彰やイベントで多くの事例もあり、最適な方法が確立されているわけではない。そもそも確率的な指標があるわけではなく、「顧客の購買意欲が向上し売上が伸びた」とか「アンケートで高評価が増加」みたいな指標でしかシステムの評価ができない。

シーン認識

現在の環境(勉強・運動・睡眠・食事・etc...)に合わせた音楽を再生するには、映像から判断するのが最もシンプルで直接的だと思う。センサは補助的な役割でなら使える、毎日の行動ログから次の動作を予測することも考えられるが、そもそもデータの取りようがないし何よりお金が高そう。。。高性能なモデルが発表されてその人の行動データでファインチューニングできるなら話は別かな。

 

これから

現時点で、音楽の詳しい知識はなく、小学生で習った音楽の三要素とテンポしかわからない。フィジカルデータもFitbitを買うまで使えない。そうなると、音楽の客観的な評価から「どんなシーンで聞きたいか」「どういった音楽なのか」などを元に音楽にラベル付けし、カメラからの映像から取得したシーンとAPIなどから天候・時間をもとに音楽を選定するなら、それらしい音楽を選定すれば実現できそう。

BERTには、ひとつの文にある"極性対象"(感情のかかる単語)と"観点"(感情を表す要素)の二つを入力としてセンチメント分析を行う手法がある。*1

これなら動画によせられたシーンや環境に対するコメントがポジティブかネガティブもしくはニュートラルかによって客観的に動画の特徴を抽出できそう。自分なりにノートに構想を書いたので機会があれば載せようと思う。

 

*1 :はじめての自然言語処理 BERT を用いた自然言語処理における転移学習 | オブジェクトの広場

 

はじめてのGitHub【1/19】

今までは、書籍でコードを書きながら機械学習ニューラルネットワークの原理、CNNの構成の勉強を。kaggleではテストデータに対する予測値をcsv形式でsubmitするだけでした。これからも数学・統計学的な面からの勉強も続けるが、学習させたモデルを実環境にデプロイ(利用可能)することも大事だと思いDjangoでのWebアプリ開発をしました。(ものづくりの大変さと楽しさを実感)

GitHubは夏頃、JetsonNanoの環境構築やdarknetのyolo-v3のインストールのためにアカウントを作成したがソフトウェア管理には使っていませんでした。今回作成したアプリと個人的に作ったPHPGitHubにあげてみた。

やったこと

  •  リモートリポジトリへのcommit&push
  • .gitignore(管理対象外ファイルの指定)
リモートリポジトリへのcommit&push

いろいろと調べるとソースコード管理だけでなく複数人でのソフトウェア開発管理などに使われ、奥が深そうだった。とりあえずブランチもろもろは置いておいてGitHubソースコードをあげて管理できる状態にすることを目的にしました。

.gitignore(管理対象外ファイルの指定)

PHPはデータサイズも小さいため公式チュートリアル通りに進めてGitHubにあげることができた。しかしデータサイズの大きいDjangoGitHubの制限である100MBを超えてしまい失敗してしまいました。主に独立した開発環境を用意するための"venv"とvgg16をファインチューニングさせたモデルをまとめた.h5ファイルなどが原因でした。

他にも各OSに依存したドットファイルGitHub的に不要なので上記のデータサイズの大きいファイル同様に管理対象から外したい。

 

これらを可能にする.gitignoreに対象ファイルを書くことで無視できるのだが、一体何が必要で何が不必要なのかが十分に理解できておらず、「別の環境に移したくてもうまくいかない」みたいなことが起きてしまう懸念。

 

これから

GitHubはエンジニアに限らず、これから必須になるツールの一つだと思うので全容が把握できるようにしたい。今回もcommit前の状態に戻すためrevertコマンドを打ったらローカルのファイルが消失する事故も。。。しっかりと経験しながら理解していきたい。

Kaggleも参加しやすい新しいコンペが出たら、自分自身で一から上位を狙っていきたい。

近況【1/13】

近況

今週から来週まで期末試験期間なので、ここで勉強の記録を残せていませんがいろいろ進めています。デプロイの知識を得るためDjangoを使ったアプリ開発してからアプリ開発にも興味が出てきてしまい、今は、環境にあったBGMを提案するアプリをつくってみました。ユーザの閲覧データは入手困難なので、「コメント欄やタイトル、サムネイルなどから自然言語処理で環境情報と類似した動画からユーザの好みに寄せたBGMを提案する」といったような構想はあるけど知識不足なので、第二次AIブームのルールベースでの処理になっています。これも前回の画像推定と同様に githubやqiitaに投稿する予定。

 

これから

ニューラルネットワークバックプロパゲーション、CNN、DCGAN、ファインチューニング(転移学習)などの深層学習に関連したものを勉強してきて、ついに自然言語処理にも足を踏み入れてしまいそう。CycleGANや行動解析、BERTなどなど気になることが山ほどあるので、毎日少しずつ首を突っ込んでいこうと思う今日(昨日)でした。

Webアプリ完成【12/6】

あけましておめでとうございます。年明けから5日まで風邪で頭が働きませんでした...

 

やったこと

  • ファインチューニングさせたモデルのバージョン変更
  • 教師データの水増し処理を加えて汎化性能を向上
  • その他のブラッシュアップ
ファインチューニングさせたモデルのバージョン変更

【問題】

Django上で、tensorflow2.0 keras2.3.1で書かれたモデルを実行するとAttributeErrorが発生する。原因はファイル名かモジュールのバージョンに起因している。

【解決】

新規ファイルを作成し、その直下にvenv仮想環境でダウングレードしたモジュール(tensorflow1.14.0 keras2.0.0)をインストールする。

その後、tf.keras→keras(スタンドアロン)でvgg16をファインチューニングさせるプログラムを書き直す。

【結果】

AttributeErrorが解消され、アプリが正常起動した。

 

教師データの水増し処理を施し汎化性能を向上

【問題】

berry系の画像を自動取得して教師データにすると異物が混入し性能が向上しない。手作業だと手間がかかり、検索方法を工夫してもデータ数が大幅に減ってしまう

【解決】

動物の画像は比較的良質な画像を集められデータ数も多いのでそちらにした。動物の画像はデータの水増しで拡大・回転などの処理を施しても性能に悪影響を与えない。

【結果】

f:id:uta_07:20200106230530p:plain

モデル学習ログ

train_data 350×3 validation_data 150×3

train_accuracy 99.72% validation_acuracy 97.33%

 

これから

Git系( github,git.gitlab )で開発管理をする。

Qiitaでアプリ開発までの過程をまとめる。

近況【12/30】

近況

昨日と今日で実家の大掃除。合間にKaggleのKernelやEDAを読んでいました。

Kaggle

EDAの勉強にはカラムが隠されているコンペが本質がつかめると聞いたので、今参加している Santander Customer Transaction Prediction | Kaggle が条件に合致しているので、このコンペを中心に精度向上を目指す。

深層学習Webアプリ

フロントエンドとサーバサイドの両方に問題はないが、Kerasのバージョンに起因するエラーの問題を切り分けしても、ファインチューニングしたモデルのダウングレードしかなくなったので年明けで落ち着いたら集中する。

Jetson Nano

めちゃくちゃ触りたいけど実家にいるため、アパートに帰ったら寝ずに遊ぼと思う。

都市伝説とAI

宇宙時代を迎えている2019年12月28日、「やりすぎ都市伝説」5時間スペシャルでした。子供の頃から「宇宙はどうして生まれたのか」「宇宙に果てがあるならどんな形状をしているのか」「そもそも人間はなんなのか」などと、よく考えては言葉にできないゾッとした感情を感じています。今回はいろいろと考えさせられることがあったので感じたことを

全ての言語の起源である「祖語」

最近、Google社員のブログにて約40種類に対応した言語処理モデルBERTを発表した。現在は、日本語で学習し直したBERTモデルも公開されており、NLP(自然言語処理)は新たな段階に進んでいる。

人間のルーツを探る段階で、言語が生まれたことは人間が知恵を手に入れたことは大きなターニングポイントである。全ての言語のボトルネックである「祖語」が言語の本質かもしれない。NLPが多言語に対応できる理由は、言語の本流である「祖語」を解釈できているのかもしれない。

人間は何者かによってつくられた存在である

ダーウィン進化論では、人間は海洋生物から進化を遂げて今の状態になったと考えられているが、実際は「クババという地球外生命体から知恵を与えられた存在である」。クババは、地球という環境下で人間(に近い哺乳類?)に知恵を与え、どんなプロセスを辿るのかをシミュレーションしているという。シミュレーションであれば、地球の外側が想像できないことも合点が行くし、宇宙について追求する活動もクババのシミュレーションの一環であることも考えられる。人類が第7世代アヌーヘットに到達することはクババのシミュレーションの終了を意味する。人間が生きる理由は、クババのシミュレーションの完遂のためなのか......?

IPhoneWindowsで「9」が使われなかった理由

それぞれのナンバリングは現在、IPhoneは11・Windowsは10となっている。しかし、どちらもという数字が使われることはなかった。今までは「9という数字は周期の終結を示していて流行の終わりはふさわしくない」とか「Windows95,98とWindows9が別の意味として混合されてしまうことを避けた」とされている。4は死、9は苦として避けれられたとも言われているがそれは日本特有なので考えにくい。

クラシック音楽界では、著名な音楽家が自身で生み出した交響曲に順に数字をつけ、交響曲第○番というように発表している。しかし、多くの作曲家が第9番を発表した後、相次いで亡くなっているらしい。それらを踏まえ、AppleMicrosoftは9という数字を避けたのではないかとされている。

 

感想

都市伝説はあくまで噂の類だという人もいるけど否定からは何も生まれないし、全てを受け入れたうえで各々が考えないといけないというメッセージを関さんから私は受け取った。いつノアの箱舟が現れてもいいように体・心・精神を研ぎ澄まし来たる日に備えたいと思う。

 

信じるか、信じないかは、あなた次第。

Kaggle 【12/26】

やったこと

  • Santander Custmer Transaction Prediction
  • 不均衡データへのアプローチ法
  • 不均衡データの考え方

 

Santander Custmer Transaction Prediction

これは、提供する商品を顧客が買うか買わないかを予測するコンペティション。このコンペの特徴↓

  1. 二値分類 (不均衡データ)
  2. IDと目的変数以外のカラムは全て隠されている
  3. 評価指標は真理値と予測値のROC曲線間の面積

 

不均衡データへのアプローチ法

不均衡データへのアプローチ法は以下の3つに代表される。

  1. データレベル:不均衡なデータのどちらかに合わせる
  2. コスト考慮型学習::少量データへの誤分類に大きなペナルティを課す
  3. 異常検知:少量データを異常値とみなす

 

不均衡データの考え方

不均衡な目的変数になるような分析対象は頻度が少ないデータほど社会的な影響が大きいと感じた。病気判定やスパムメールの判定などは、'偽を真'と誤分類することは取り返しはつくがその逆はあってはいけない。本コンペも購入される機会が少ないということはそれだけ購入することが稀であると捉えられる。そのため少量データに潜在的な価値が生まれる。

目的変数が不均衡である評価指標に"正解率"を適用し精度を上げるなら全て多量データと判定すれば、それなりの精度が出せる。しかし、上で述べた社会的な影響を考慮すると、正解率という評価指標では機械学習モデルは意味をなさない。このような不均衡データに対して、偏りに依存しない評価指標が必要になる。それが"ROC","AUC"である。

 

これから

  • データの偏りに依存しない評価指標の理解
  • カラムの意味が不明な特徴量のEDA
  • モデルの選定・評価