請先下載示範腳本

簡介句圖比對作業

句圖比對作業(sentence-picture verification task)用於探討人類能否以視覺經驗理解句子,過去發現顯示閱讀描述物體的句子,暗示形狀、顏色、與方向等視覺屬性,判斷的物體圖片與脈絡一致,反應快於不一致的物體圖片(Connell, 2007; Stanfield & Zwaan, 2001; Zwaan et al., 2002; Zwaan & Pecher, 2012)。在此以 Stanfield & Zwaan (2001) 的程序示範OpenSesame腳本編輯,示範腳本源自 Chen et al. (2018) 使用的繁體中文版實驗。示範說明依照序列(sequence)階層排列,建議學習者下載示範腳本後,按照以下說明調整測試,學習建構腳本的技巧。

OSWeb顯示中文字的限制

OpenSesame以HTML語法控制在螢幕呈現的中文文字自動斷行,也就是說如果文字長度超出螢幕寬度,目前的版本(v3.3)無法自動斷行。因此所有顯示中文字的指導語及刺激項目,建意事先轉換為PNG圖檔,或在要斷行的文字之間使用斷行標籤。

善用notepad元件管理腳本

  • notepad元件不會執行。
  • 可隨意記錄筆記,放在其他元件之前,可註解後續元件的功能與設定內容。

File pool

  • 一套腳本要呈現圖片、聲音等檔案,要先將檔案存入File pool。在主畫面視窗按”Ctrl + P”,或選擇View -> Show file pool,開啟File pool子視窗。

  • 子視窗功能按鈕有加入檔案,開啟檔案總管視窗。使用者可依需要,操作功能管理檔案。

Variable inspector

  • 要檢視所有元件的可存取變項,在主畫面視窗按”Ctrl + I”,或選擇View -> Show variable inspector,開啟Variable inspector子視窗。

  • 在javascropt元件內定義的變項不會顯示。

  • 子視窗的三個欄位

    • Variable : 變項名稱
    • Value: 變項數值;無數值為紀錄實驗數據的空變項
    • Source(s): 變項有運作的實驗元件;global為全局變項
  • 由於3.3.9版起,線上實驗腳本要由使用者要自訂需紀錄的變項。上線前務必規劃要紀錄的變項。

Form元件的限制

OSWeb 1.4.4.0支援在視窗模式使用Form元件,但是由於各家瀏覽器的功能差異及限制,尚未支援全螢幕模式。如果實驗程序全程需要在全螢幕模式執行,務必考慮使用Form元件的必要性。若要在全螢幕模式執行實驗,腳本內不可有任何Form元件,包括回收桶

以下圖例與實際腳本內容因更新進度不一致,會有所不同。請以參加的課程講授內容為主。

建立主序列

圖 1展示句圖比對作業的主序列PSA002之下的實驗元件,主序列元件之下的實驗元件依順序執行,這個實驗程序有兩個次級序列:SP實驗作業;PostSurvey出口調查。每個實驗元件可設定執行條件Run if,預設總是執行(always),若要跳過某個元件不執行,只要點轉對應的Run if欄位文字,改成永不執行(never)。

圖  1: 主序列與次級序列,所有次級序列之下的實驗元件都會依序執行。

圖 1: 主序列與次級序列,所有次級序列之下的實驗元件都會依序執行。

圖  2: 設定不執行出口調查次級序列,點擊never文字可修改。

圖 2: 設定不執行出口調查次級序列,點擊never文字可修改。

序列元件是唯一可置入其他實驗元件到下一階層的實驗元件。方法有從左側常用實驗元件拖曳要加入的實驗元件,或者在要增加元件的序列點擊滑鼠右鍵,開啓選單選擇要置入的實驗元件。

圖  3: 經由滑鼠選單,選擇要增加實驗元件。

圖 3: 經由滑鼠選單,選擇要增加實驗元件。

完成代碼產生器

“OSWeb”支授以javascript編譯的自訂程序,在序列之下置入inline javascript實驗元件 。進入inline javascript實驗元件編輯介面,直接編輯程式碼。 javascript程式碼執行成果只能在網頁瀏覽器檢視。

任何網路實驗應提供參與者實驗完成代碼,以供核實參與紀錄。使用javascript內建的亂數產生器,可提供每位實驗者專屬完成代碼。示範腳本generate_identifier實驗元件的javascript程式碼如下一行展示:

vars.identifier = Math.random().toString(36).substr(2, 9);

主序列完成執行generate_identifier,會將完成碼存入變數identifier。實驗結束前最後一個執行的實驗元件PSA002_End,在視窗呈現完成代碼。PSA002_End是標準的”sketchpad”元件,仼何要呈現在螢幕呈現的訊息或刺激,均可在這個元件設定。圖 4展示PSA002_End編輯介面,變數identifier呈現在畫面中間位置。

註: 這個sketchpad變數”duration”設定是0,以及是腳本內唯一呈現中文字的畫面。比較其他序列之內的sketchpad設定差異。

圖  4: 結束畫面編輯介面。上半是圖像化編輯視窗;下半是腳本編輯視窗。兩種視窗都能編輯畫面呈現資訊。

圖 4: 結束畫面編輯介面。上半是圖像化編輯視窗;下半是腳本編輯視窗。兩種視窗都能編輯畫面呈現資訊。

實驗作業序列

實驗作業程序首先執行SP_list_random,產生兩個變數[Plist][List]的數值,提供下層序列SP_PracticeSP_Task要執行那一個迴圈,每個迴圈差異在於設定的刺激列表。執行後先進行一段預訂六次嘗試的練習,再進行48次嘗試的正式實驗。練習與正式實驗程序分別以SP_PracticeSP_Task序列控制。兩段序列執行前都有置入sketchpad元件SP_InstructionSP_Start,呈現說明反應方式的指導語。

圖  5: 實驗作業序列元件一覽。

圖 5: 實驗作業序列元件一覽。

實驗刺激列表

為了達成交互平衡控制,練習有兩份刺激列表,正式實驗有四份刺激列表。每份激列表分別放置於迴圈元件(loop),執行練習與正式實驗序列之前,先經過隨機洗牌決定要執行的迴圈元件序號。練習與正式實驗的迴圈元件編輯介面如rr,決定序號的javascript程式碼如下,變數PListList分別儲存隨機決定的序號號碼:

// getRndInteger(min, max) returns a random number between min and max (both included):
function getRndInteger(min, max) {
  return Math.floor(Math.random() * (max - min + 1) ) + min;
}

vars.List = getRndInteger(1,4);
vars.PList = getRndInteger(1,2);

指導語畫面

指導語的skatchpad呈現即將開始的作業序列,必須要注意的事項。比較圖 6與圖 4,指導語畫面與結束畫面有兩點不同:(1) 指導語畫面的”duration”設定”keypress”,以參與者按下按鍵切換畫面。結束畫面的”duration”設定0,以下一個按鍵元件設定切換畫面;(2) 指導語畫面呈現圖檔,腳本內”draw image”一行可設定指定圖檔,呈現位置,以及呈現條件show_if。結束畫面呈現文字,腳本內”draw textline”一行可設定文字內容(支援html語法),設定字型,呈現位置,以及呈現條件show_if

圖  6: 指導語畫面編輯介面。由於部分句子長度超過螢幕寬度,指導語以圖檔呈現。

圖 6: 指導語畫面編輯介面。由於部分句子長度超過螢幕寬度,指導語以圖檔呈現。

練習序列

圖 7展示練習序列兩個迴圈,SP_Prac01, SP_Prac02,兩者差異僅在於刺激表單內容。從”Run if”設定變數[PList](數值來自SP_list_random)決定要執行那一個迴圈。

圖  7: 練習序列元件編輯畫面,變數PList決定要執行的迴圈。

圖 7: 練習序列元件編輯畫面,變數PList決定要執行的迴圈。

練習迴圈

圖 8展示其中一個迴圈SP_Prac01之下的序列串連的實驗元件。練習迴圈設定參與者要答對所有題目才能結束,否則重新開始。這項設定由三個inline javascript控制,Prac_setup設定正確紀錄計數器,Prac_Reset負責重設正確紀錄計數器,Prac_Count累進正確反應到正確紀錄計數器。留意每一個inline javascript都是放置在一項序列。

圖  8: 練習序列元件內迴圈執行順序,序列元件SP_Prac_sequence以關聯式複製置入所有迴圈。

圖 8: 練習序列元件內迴圈執行順序,序列元件SP_Prac_sequence以關聯式複製置入所有迴圈。

圖 9展示SP_Prac01編輯介面。要注意的參數有:

Repeat: 設定最多重覆次數。
Order: sequential ~ 刺激依表格順序呈現。
Break if: 設定迴圈停止條件。[correct_count]=6表示正確反應累進達6次即停止。
Source: 刺激來源。table ~ 迴圈編輯介面的表格; file ~ 另存於”file pool”內的格式化文字檔,通常是csv格式。

刺激表單欄位說明

“Probe”: 提供實驗元件Probe_Prac呈現的刺激句
“Target”: 提供實驗元件Target_Prac呈現的目標圖像
“correct_response”: 對應Target_response_Prac的參數”correct_response”
“Task”: 匯出紀錄檔標記反應資料來源為”Prac”

圖  9: 練習迴圈元件編輯畫面,表格置入預定呈現的刺激及正確反應。

圖 9: 練習迴圈元件編輯畫面,表格置入預定呈現的刺激及正確反應。

迴圈SP_Prac01與迴圈SP_Prac02之下都是序列SP_Prac_sequence,製作程序是先在其中一個迴圈完成編輯,再使用關聯式複製Copy(Linked),拷貝到另一個迴圈。之後只要修改其中一個迴圈之下的序列,另一個迴圈之下的序列同步變更。這種方式適用不同迴圈執行程序相同的腳本,仼何實驗元件都能使用關聯式複製,只要以滑鼠右鍵點擊要複製的元件,就能從選單選擇關聯式複製Copy(Linked)(見下圖)。

迴圈元件右鍵選單

練習嘗試

圖 10 陳列Prac_trial序列的所有實驗元件。Prac_trial構成一次練習嘗試參與者依序經歷的所有事件,下列標示的元件名稱搭配說明執行設定:

圖  10: 練習嘗試序列元件編輯畫面,設定執行條件決定反應回饋訊息。

圖 10: 練習嘗試序列元件編輯畫面,設定執行條件決定反應回饋訊息。

點擊實驗元件,開啟編輯介面,切換”split view”可檢視圖形介面與腳本參數。重要參數設定見以下截圖內標示。

  1. 第一次凝視點First_Fixation_Prac呈現1000毫秒

凝視點sketchpad元件

  1. Probe_prac呈現刺激句,刺激句來自迴圈內選單欄位[Probe];Probe_response_prac參與者充分閱讀後按下指定反應鍵

左:刺激句sketchpad元件;右:切換keyboard response元件

  1. 第二次凝視點Second_Fixation_Prac呈現500毫秒

凝視點sketchpad元件

  1. Target_Prac呈現目標元件圖像,元件圖像來自迴圈內選單欄位[Target];Target_response_Prac參與者要在限時2000毫秒內按下指定反應鍵”j”或”f”

左:目標圖sketchpad元件;右:反應keyboard response元件

  1. 根據反應結果呈現500毫秒的回饋訊息:正確([correct]=1)Target_response_correct_Prac錯誤([correct]=0)Target_response_wrong_Prac反應太慢([response_time]>1499)Target_response_noans_Prac

反應正確訊息sketchpad元件

  1. 正確次數紀錄器Prac_Count,正確次數紀錄於[correct_count],累積達6即中止迴圈,有錯誤即歸零

正確次數紀錄器程式碼

  1. 實驗嘗試紀錄Task_logger:此元件必須放置於最底層序列的最後位,OpenSesame/OSWeb才能逐次輸出紀錄。
  • 3.3.9版調整logger元件記錄欄位設定方法,線上實驗必須以自訂模式設置需要匯出分析的欄位,以下截圖是示範腳本設定的欄位。控制視窗一次只能設定,可看到設定的欄位儲存那些實驗元件的資料,例如在inline javascript內設定的變數都是”custom”。需要設定的欄位數目太多,可從腳本視窗依格式新增。

logger元件內設定欄位

實驗序列

圖 11 展示正式實驗序列四個迴圈,SP_list01, SP_list02, SP_list03, SP_list04,四者差異僅在於刺激表單內容。從”Run if”設定變數[List](數值來自SP_list_random)決定要執行那一個迴圈。

圖  11: 正式實驗序列元件編輯畫面,變數List決定要執行的迴圈。

圖 11: 正式實驗序列元件編輯畫面,變數List決定要執行的迴圈。

執行正式實驗序列之前,presetup準備執行記憶檢測題需要的變數。javascript程式碼內變數及註解如下:

// 自訂函式,從任意最小及最大數值之間取得一個數值:
function getRndInteger(min, max) {
  return Math.floor(Math.random() * (max - min + 1) ) + min;
}

// 儲存已呈現的刺激句檔案
vars.probe_list = [];
// 已執行的實驗嘗試次數紀錄器
vars.trial_seq = 0;

// probe_list儲存刺激數紀錄器,數值大於5即執行`Probe_import`的程式碼
let list_length; 

// 記憶檢測呈現的刺激句檔案
vars.rectarget = 'Probe_filler_0.png';

// 執行記憶檢測的實驗嘗試順序
// 每個變數儲存隨機函式結果,其中之一等於trial_seq,該次嘗試就執行記憶檢測
vars.check_0 = getRndInteger(7,9);
vars.check_1 = getRndInteger(10,12);
vars.check_2 = getRndInteger(13,15);
vars.check_3 = getRndInteger(17,19);
vars.check_4 = getRndInteger(21,23);
vars.check_5 = getRndInteger(25,27);
vars.check_6 = getRndInteger(29,31);
vars.check_7 = getRndInteger(33,35);
vars.check_8 = getRndInteger(37,39);
vars.check_9 = getRndInteger(41,43);
vars.check_10 = getRndInteger(45,47);

實驗迴圈

圖 12展示SP_list01編輯介面。要注意的參數有:

Repeat: 只執行1次。
Order: random ~ 刺激依隨機順序呈現。
Break if: 設定迴圈停止條件。never表示直到所有刺激呈現完畢。
Source: 刺激來源。table ~ 迴圈編輯介面的表格。

刺激表單欄位說明

“Orientation”: 目標元件圖像呈現方向。H ~ 水平, V ~ 垂直, F ~ 填充
“Match”: 刺激句暗示方向與目標元件圖像呈現方向是否一致。Y ~ 一致, N ~ 不一致, F ~ 填充
“Probe”: 提供實驗元件Probe呈現的刺激句
“Target”: 提供實驗元件Target呈現的目標圖像
“correct_response”: 對應Target_response的參數”correct_response”
“Task”: 匯出紀錄檔標記反應資料來源為”SP”

圖  12: 正式實驗迴圈元件編輯畫面,表格置入預定呈現的刺激及正確反應。

圖 12: 正式實驗迴圈元件編輯畫面,表格置入預定呈現的刺激及正確反應。

實驗嘗試

圖 13 陳列SP_trial序列的所有實驗元件。SP_trial構成一次實驗嘗試參與者依序經歷的所有事件,除了memory check,多數元件設定與Prac_trial相同。下列標示的元件名稱搭配說明執行設定:


圖  13: 正式實驗嘗試序列元件編輯畫面,設定執行條件決定反應回饋訊息。

圖 13: 正式實驗嘗試序列元件編輯畫面,設定執行條件決定反應回饋訊息。


  1. 第一次凝視點First_Fixation呈現1000毫秒
  2. 呈現刺激句Probe,參與者充分閱讀後按下指定反應鍵Probe_response
  • 收集已呈現的刺激句probe_collect為後續memory check預備,參考以下javascript程式碼註解說明
// 己呈現的刺激句存入probe_list
if(vars.probe_list.length == 0){
// 存入第一次嘗試刺激句
   vars.probe_list.splice(1,0,vars.Probe);
} else if (vars.probe_list.length > 0 & vars.probe_list.length < 6) {
// 存入刺激句滿6個之前的程序
   vars.probe_list.unshift(vars.Probe);
} else {
// 存入刺激句滿6個後,先移除最早存入的刺激句,再存入最新的刺激句
   vars.probe_list.pop();
   vars.probe_list.unshift(vars.Probe);
}
// 記錄此次嘗試probe_list已存數值個數 
vars.list_length = vars.probe_list.length;
// 實驗嘗試次數累進
vars.trial_seq += 1;
  1. 第二次凝視點Second_Fixation呈現500毫秒
  2. 呈現目標元件圖像Target,參與者充分閱讀後按下指定反應鍵Target_response
  3. 根據反應結果呈現回饋訊息:正確([correct]=1)Target_response_correct錯誤([correct]=0)Target_response_wrong反應太慢([response_time]>1499)Target_response_noans
  • Probe_import挑選要呈現於memory check的刺激句,從第六次嘗試開始執行([list_length]>5),參考以下javascript程式碼註解說明
// 自訂函式,從任意最小及最大數值之間取得一個數值:
function getRndInteger(min, max) {
  return Math.floor(Math.random() * (max - min + 1) ) + min;
}

// 儲存已呈現probe至5個以上開始執行
if(vars.list_length > 5){

// 決定probe_list的位置序號
  vars.anchor = getRndInteger(0,5);

// 依anchor位置序號,從probe_list載入該序號的刺激檔案至rectarget
// 序列`Memory_seq`下元件`Probe_sti`呈現rectarget
  vars.rectarget = vars.probe_list[vars.anchor];

// 設定`Probe_sti_response`正確反應按鍵,小於3為"是",否則為"否"
  if(vars.anchor < 3) {
        vars.correct_response = 'j';
  }
  else{
        vars.correct_response = 'f';
  }
}

// 儲存辨別目標正確至變數correct_response_Target
vars.correct_response_Target = vars.correct_response

// 標記此次嘗試有無記憶測試
if( (vars.trial_seq == vars.check0) | (vars.trial_seq == vars.check_1) | (vars.trial_seq == vars.check_2) | (vars.trial_seq == vars.check_3) | (vars.trial_seq == vars.check_4) | (vars.trial_seq == vars.check_5) | (vars.trial_seq == vars.check_6) | (vars.trial_seq == vars.check_7) | (vars.trial_seq == vars.check_8) | (vars.trial_seq == vars.check_9) | (vars.trial_seq == vars.check_10) ){
        vars.memory = "y";
} 
else{
        vars.memory = 'n';
}
  1. 序列Memory_seq執行memory check。“Run if”設定其中11次嘗試執行,每次實驗要執行的嘗試由presetup決定(見圖 11)。
  • 序列內元件:Probe_sti不限時呈現刺激句及問題;Probe_sti_response等待反應;反應後回饋正確([correct]=1)Probe_sti_correct錯誤([correct]=0)Probe_sti_wrong 各元件設定同Target,Target_response,Target_response_correct,Target_response_wrong

記憶檢測序列下的實驗元件

  1. task_break中間休息提示,在第24次嘗試後顯示([trial_seq] = 24),呈現時間無限制
  2. 實驗嘗試紀錄Task_logger:從Prac_trial關聯性複製
  • 輸入Task_logger的多數欄位都是紀錄實驗序列的重要變項,例如:由於其中11次嘗試有記憶檢測,兩種嘗試反應的正誤紀錄分別儲存於”correct_Probe_sti_response”與”correct_Target_response”欄位。

出口調查序列

建議1 問卷題目建議使用Form元件支援的格式呈現,請參考範例腳本的示範。
建議2 本範例僅調查參與者性別與出生年,題目皆為單選題。

如果你的實驗必須採用全螢幕模式,建議不要使用Form元件設計問卷。因為OSweb尚未支授Form元件以全螢幕呈現。

圖 14 顯示出口調查序列PostSurvey的元件。

圖  14: 出口調查序列元件一覽。Post_info呈現調查說明,Survey迴圈依序執行調查問題,

圖 14: 出口調查序列元件一覽。Post_info呈現調查說明,Survey迴圈依序執行調查問題,

Post_info呈現已到最後段落的訊息。設定與正式實驗指導語呈現元件SP_Instruction,SP_Start相同。

題目迴圈

圖 15 呈現調查題目迴圈Survey,參數設定大致與練習嘗試迴圈SP_Practice相同,除了”Repeat”與”Break if”是元件預設。表單內欄位”Question”與”Options”置入要呈現的題目與作答選項說明,依序呈現於題目序列Survey_seqSurvey_board

圖  15: Survey迴圈元件編輯畫面,表格置入調查問題與選項。

圖 15: Survey迴圈元件編輯畫面,表格置入調查問題與選項。

題目序列

圖 16展示調查執行序列Survey_seq,題目只有一套,執行二項題目即結束。

圖  16: Survey_seq序列元件一覽。

圖 16: Survey_seq序列元件一覽。

  1. post_survey_input是Form元件,能讓參與者自行輸入按鍵資訊。題目迴圈Survey內選單欄位[Question]與[Options],呈現題目資訊與作答選項,無回答時間限制。

調查表單元件設定

  1. 實驗嘗試紀錄Task_logger:從Prac_trialSP_trial關聯性複製

上一步:Open Sesame開工預備        下一步:JATOS部署與測試


參考文獻
Chen, S.-C., Szabelska, A., Chartier, C. R., Kekecs, Z., Lynott, D., Bernabeu, P., Jones, B. C., DeBruine, L., Levitan, C., Werner, K. M., Wang, K., Milyavskaya, M., Musser, E. D., Papadatou-Pastou, M., Coles, N., Janssen, S., Ozdogru, A., Storage, D., Manley, H., … Schmidt, K. (2018). Investigating Object Orientation Effects Across 14 Languages. https://doi.org/10.31234/osf.io/t2pjv
Connell, L. (2007). Representing object colour in language comprehension. Cognition, 102, 476–485. https://doi.org/10.1016/j.cognition.2006.02.009
Stanfield, R. A., & Zwaan, R. A. (2001). The effect of implied orientation derived from verbal context on picture recognition. Psychological Science, 12(2), 153–156. https://doi.org/10.1111/1467-9280.00326
Zwaan, R. A., & Pecher, D. (2012). Revisiting mental simulation in language comprehension: Six replication attempts. PLoS ONE, 7, e51382. https://doi.org/10.1371/journal.pone.0051382
Zwaan, R. A., Stanfield, R. A., & Yaxley, R. H. (2002). Language comprehenders mentally represent the shapes of objects. Psychological Science, 13, 168–171. https://doi.org/10.1111/1467-9280.00430
創用 CC 授權條款
本網站由慈濟大學人類發展與心理學系副教授陳紹慶創建維護,網站內容採用創用 CC 姓名標示-非商業性 4.0 國際 授權條款授權.