jsPsychで自己ペース読み課題を作りました

はじめに

querie.meで次のような質問をいただいたのがきっかけで,この記事を書いています。ただ,今回は直接的な回答をブログ記事にしたというわけではありません。

Jspsychで自己ペース読解を作りたいと思っているのですが、なかなか良いリソースにたどり着けません。 何を参考にして作成されましたか。

https://querie.me/answer/FoiIeOGRo0FxWcSAnwvx

参考までに,私が作ったものを公開しましたというお話です。

jsPsychというJavaScriptのライブラリを使って,Webブラウザ上で実験を行うことができます。私もコロナ禍以降,オンラインでできる実験プログラムの構築を色々と模索していて,様々なものに手を出したりしたのですが,最終的にはjsPsychでいくことにしました。特に理由はないんですが,コードベースだとやっぱり細かいところに手が届くっていうのが大きいかなと思います。心理学分野だと,心理学の様々な実験のサンプルを見ることができるのですが,残念ながら言語実験はあまりサンプルがないんですよね。そこで,jsPsychで私が作った自己ペース読み課題をGitHubに公開しました。

https://github.com/tam07pb915/spr-jspsych-experiment

詳しくはこのレポジトリを見てもらえたらと思いますが,補足的なことをこのブログ記事にも書いておこうと思います。

メインの部分

自己ペース読み課題にはいろいろなバージョンがありますが,私が作ったのは単語提示・移動窓方式と呼ばれるもので,一語ずつ,左から右に読み進めるタイプのものです。以下のリンクから短いデモができます。

https://tamura-jspsych-demo.netlify.app/spr-demo.html

自己ペース読み課題のトリッキーなところは,刺激は文として作るけれども,それを単語に分割して提示するっていう部分なんですよね。その仕組みのところは,

Week 4 practical | Online Experiments for Language Scientists

というページがかなり参考になりました。これをベースに,ChatGPTやClaudeに手伝ってもらいながらカスタマイズをしたという感じです。Githubには,私が実際のデータ収集に使ったフル実験のバージョンと,上のリンク先のデモ課題の2つを載せています。フル実験の方には,単なる自己ペース読み課題だけではなく,同意取得や質問紙のページがあったりします。また,異なるリストのランダム化や,途中で休憩を挟む,プログレスバーを入れる等々の違いがあります。

基本的には,

  1. 下線のみが画面に提示される
  2. スペースキーを押すと下線の1つが単語に変わる
  3. スペースキーを押して読み進めると,読んだ単語はまた下線に戻る
  4. 最後までいくと,次の画面でTrue/Falseの理解質問が出るので,FまたはJキーで回答する
  5. 試行と試行の間には「スペースキーを押して次にいってください」みたいな文言がある

という流れで進むようになっています。フル・サンプルのどちらにも練習セクションとメインタスクセクションがあり,練習セクションでは理解質問の回答に対して,CORRECT/INCORRECTのフィードバックがあります。メインタスクセクションではフィードバックはありません。

少しコードをいじれば、任意の記号(例えば”|”)で区切られた英文をその区切りごとに例えばフレーズ単位で提示することもできると思います。

全体的なこと

Firebaseとの連携

私は実験をfirebaseと連携させて,そこにデータを蓄積するという感じでデータ収集をしています。よって,firebaseと連携するための仕組みもコードの中に入っています。ただ,firebaseをどう使うのかみたいなところはウェブ上にたくさん資料が転がっているので,それを見て自分で勉強してみてくださいという感じにすみませんが今のところはなっています。

データ分析

jsPsychで得られたデータはJSONフォーマットになっています。これはそのままではデータ分析に適していないので,JSONデータをテーブルデータに変換する必要があります。これはそこまで難しくなくて,オンライン上でフォーマットを変換してくれるサービスもありますし,今なら生成AIに頼んだら多分やってくれる(またはコードを提案してくれる)と思います。とはいっても,その部分も結構大事ではあるので,一応サンプルの出力をRで読み込んで整形する過程もRmarkdownでドキュメントにしました。下記リンクからご覧いただけます(もとの.Rmdも含めてGithubのレポジトリに入ってます)

https://tam07pb915.github.io/spr-jspsych-experiment/sample-experiment/sample-data-transformation.html

使っている刺激

フル実験のメインタスク部分は,number attractionを見るための刺激文が入っていて,私の自作です(まだ発表すらできていないデータ…)。サンプルの方は,下の論文の実験1に使われた英文の一部を使っています。

Trueswell, Tanenhaus, & Garnsey (1994) Semantic influences on parsing: Use of thematic role information in syntactic ambiguity resolution. Journal of Memory and Language, 33(3), 285-318. https://doi.org/10.1006/jmla.1994.1014

理解質問は自作です(Copilotが勝手にサジェストしたものを使いました)。

刺激はコードの中に埋め込まず,別ファイルで用意してそれを読み込むという方法もあると思います。しかしながら,今回はすべてコードの中に刺激を埋め込む形にしています。Excelファイルで一般的には実験刺激は管理されるでしょうから,そこからjsPsychで扱われる形式への変換が必要です。これもおそらくはそこまで難しいことではないと思いますが,いずれRの例を作ろうと思っています。

注意点

私が公開したコードを,様々な実験に応用しようとすると,刺激の部分を入れ替えるだけではおそらくうまく動かないと思います。というのは,読み込んだ刺激の形に応じて,記録されるデータを選択しているからです。例えば,サンプルの実験では,実験要因として主語名詞句の有生性しか入れていません。1要因の実験というわけです。よって,そのサンプルコードを使って2要因以上の実験を行おうとすると,記録されるデータに反映されない要因が出てくることになります。もちろん,事後的に復元することは可能ではありますが。そのあたり,ここをいじったらここも必ず変えてねみたいな丁寧なコメントアウトまでは残念ながらできていません。ご了承ください。汎用性を意識してどんどん機能を追加して選べるようにするみたいなのはちょっと素人の私には難しいです。

おわりに

この記事では,心理言語実験で使う自己ペース読み課題のプログラムをjsPsychで実装して、GitHubに公開しましたという記事を書きました。冒頭の質問者様の役に立ちますように。自己ペース読みよりロジックは簡単ですが,プライミング語彙性判断課題のプログラムも手元にあるので,反響があればまた公開しようと思います。

なにをゆう たむらゆう。

おしまい。

コメントを残す