takyamamoto / brain-encoding-model

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

brain-encoding-model

データの前処理

NWJC-BERTへの入力データの作成

収集されたDVDセリフ書き下しデータは,MeCabにより形態素解析され,映画ごとにconull形式で保存されている.

また,取得された脳活動データと対応するように1秒ごとにデータが重複されるように入っている.

ファイルから1秒ごとに文を取り出し,それに対応する時制を付与し,NWJC-BERTへの入力データを作成する.

1.all_sentence_extraction.py

一文ごとに書き下し文が形態素解析されているファイルを使用して,1秒ごとに文を取り出す.

一映画一つのファイルではなく,いくつかに分かれているので,ファイルを変えてプログラムを実行する.

<実行コマンド>

python all_sentence_extraction.py

2.sentence_count.py

all_sentence_extraction.pyで作成したファイルを脳活動と対応させるため1秒ごとに整列させる.all_sentence_extraction.py同様にrunごとにファイルを変更させてプログラムを実行する.

<実行コマンド>

python sentence_count.py

3.sen_tence.py

sentence_count.py で作成したファイルに "ninjalconll"のファイルを参照しながら時制をつける.時制がついているイベントがなかった場合 [その他] のタグをつける.

<実行コマンド>

python sen_tence.py

4.run_tag.py

run_tag.pyで作成したファイルに文ごとのIDをつける.最初の20秒は脳活動データとの関係で使用しないため,削っている.

<実行コマンド>

python run_tag.py

脳活動データの前処理

1.load_data.py

脳活動データは1秒間隔で計測され,時点毎の脳画像のサイズは $96x96x72(= 663552ボクセル)$となっており,映画ごとにmat形式で保存されている.

マスクデータとして,皮質(cortex)・皮質下部(subcortex)についてのデータも付属されている.

このプログラムは,mat形式の脳活動データの必要な部分のみを取り出し,pickle形式で保存する.

生の脳活動データから必要な部分(大脳皮質部分)だけを取り出す.

被験者(subjectCode)ごと,映画(movid),runidを変更しながら実行する.

maskデータは被験者ごとに違うのでその部分の変更も忘れずに.

最初の20秒は不要部分なので削るようになっている.

<実行コマンド>

python load_data.py

符号化モデル作成

NWJC-BERTからの特徴量抽出

<使用プログラム>

1.new_temp2.py

2.bert_process_functions.py

3.optimizer_Adamw.py

new_temp2.pyでNWJC-BERTから時間的特徴量を抽出する.

また,bert_process_functions.pyoptimizer_Adamw.pynew_temp2.pyに必要なプログラム.

マルチステップファインチューニングを行う場合は,このプログラムを用いてBERTを学習させ,そのモデルを保存.

再びこのプログラムを用いて,保存したモデルで目的タスクで学習を行う.

モデルの変更は,BiLSTMクラス内のself.bert_model,state_dictを変更.

bert-process-functions.pyoptimizer-Adamw.pyは同ディレクトリ内に置く.

<実行コマンド>

python new_temp2.py

時間特徴量と脳活動データの回帰

ridge.py

new_temp2.pyから得た時間特徴量と,load_data.pyから得た脳活動データを使用して,符号化モデルを作成する.映画ごとに訓練データと評価データを変えている.

回帰モデルにはRidge回帰を採用し,ボクセルごとに最適な$alpha$を選択して予測するようにする.

また,被験者が動画を見てから fMRI で観測される脳活動に影響が出るまでに生じる時間のずれを考慮して,脳活動データと時間識別モデル特徴量を4秒ずらして対応.この際,前後の刺激に対する応答が重なるため,ある時点tの脳活動について,書起特徴の複数時点が対応するように,BERTの埋め込みベクトルを結合した行列を使用.

脳活動データと時間特徴量の対応が同じになるように注意.(脳活動データと時間特徴量の対応は図を参照)

#####<実行コマンド> python ridge.py

時間特徴量のみを使用した回帰

BandedRidge.py

作成した時間識別モデルの上位層の特徴量から事前学習済みBERTの埋め込みベクトルが入力される低層の純粋な言語特徴量を取り除くと, 純粋に時間識別のための特徴量が得られるとの考えから,それぞれの特徴量から推定された脳活動状態の差異を観測した.

この際,Banded Ridge Regressionを用いた.

基本的なプログラム内容はredge.pyと同じなのでそちらを参照. #####<実行コマンド> python BandedRidge.py

予測脳活動の可視化

demo_show_result_using_pycortex.ipynb

作成した符号化モデルから予測した脳活動データを可視化する.

被験者ごとにマッピングデータが異なるので,被験者を変更しながら可視化を行っていく. 可視化のためにはpycortexのダウンロードが必要.

About


Languages

Language:Jupyter Notebook 75.8%Language:Python 24.2%