2016年7月24日 星期日

機器學習與文字探勘於學生情緒分析與輔導的運用

(這篇曾在噗浪八年會心跳300分組分享過,是大數據小數據分析無誤@@)

(這是約莫在七年前做的小實驗,當時是帶著班上孩子進行未來教室的方案,所以有機會一玩,而當時數據分析技術與工具較為陳舊,現在的工具較當年已經方便很多惹,甚至還有許多Cloud Service or API可以使用,所以請不用找我要程式碼XDDD)





(這是噗八的投影片)

高年級的孩子,尤其在升上六年級之後,因身心狀況已進入青春期,
已趨近於國中生的發展狀態,有許多時候孩子自身心理的狀況、家庭狀況或者是與同儕相處的狀況,往往不會輕易被老師所發現,也不甚願意表露;
甚至是孩子們出現需要援助狀況或者是發生問題時,老師往往未能在第一時間掌握與得知,只能在狀況發生之後,老師才能介入與協助處理。
但在學生不輕易顯露與表達內心想法的狀況下,而如何最快得知學生的狀況?

    
其一便是透過同儕或者是學生家人透露或告知,老師才能掌握與了解相關訊息;

其二則是透過孩子的日記來發現。後來偶然發現孩子們平時可能拙於言辭、或在學校不願意輕易表達內心想法時,卻意外發現學生喜歡在社群網絡上暢所欲言,侃侃而談。

因此萌生一個想法:若是能透過自動化的方式,了解孩子們在社群網絡發表的內容,並加以自動化分析之,提早了解孩子的狀況,是否能及時提供協助,甚至是防患於未然?



好了,開始動手進行實作囉!

  1. 先寫一支 簡單的爬蟲 script 定期(每天)去爬學生的公開文(當年最紅也最多人使用的是無名部落格)。
  2. 爬完後的資料,存入資料庫當中。
  3. 將上述收集的文章,呼叫中研院的斷詞系統API(是的,當年只有這個能用@@),以及自己的辭庫,建立每篇文章的特徵向量。
  4. 採集上述樣本後,開始針對學生的文章進行分類。(例如說這篇是難過文、這篇是攻擊文、這篇是開心文….等等)。
  5. 運用詞頻統計等方式,去除贅詞或者是停用詞,取出關鍵字作為文件的特徵值,作為分類演算法的前處理。
  6. 以步驟三為樣本進行訓練。採用Apriori、Naive Bayes、SVM等演算法進行分析建模。
  7. 學生新的部落格文章預測與模型修正。
  8. (建立時間序列,若連續異常,則系統會主動通知老師。


優點:

  1. 老師可以藉由分析與預測結果,提早了解孩子的身心狀況,可洞察先機,即刻進行了解與處理。
  2. 一切自動化,老師不用辛苦爬文與分析,省卻工人智慧勞心勞力之苦。
  3. 文章分類預測準確率高(約80%,還是會有誤判的狀況,或者是心情已經雨過天青)
  4. 文章可以串連,分析其相關度。

缺點:

  1. 有的學生根本不用無名,或者是潛水。
  2. 學生文章會情緒會有所偏頗(例如只報喜不報憂,只發開心文)。


案例分享:
系統去爬某生A與某生B,以及別班某生C的文章,發現其用詞關聯度甚高,甚至是情緒已偏向負面,發生以文章彼此互相攻擊的狀況,導師得知後遂與該班導師聯手處理,遏止一場即將由虛擬衝突轉為實體衝突的狀況。(學生驚呆云:老師你怎麼發現的??)




後記:現今社群網絡較之當年更為發達,若是能善用此技術,能得知學生的狀況,不論在偏差行為發生之際,或者是學生及需要協助之時,相信能更早得知學生的狀況,並適時給予協助,成為輔導的利器之一。

2016年2月16日 星期二

一次親子創客專案的歷險:燈籠君,你好


(完工後的囂張貌)



(燈籠君實際運作影片)



這完全是一個誤打誤撞,結果到最後欲罷不能的專案
也是這小孩第一次製作困難度較高,且整合多樣素材的專案
但是證實    只要有心   人人都可以是 Maker...................................燈籠君
(附註:親子要進行本專案很讚,但請大人要非常非常有耐心陪伴喔 XDD)

這個燈籠我們父子搞了多久呢?
包括討論、設計、教學、動手實作、測試
是的,整整半個月,因為我只有限度的動手幫忙
他能夠來的,就讓他自己來
整個專案貢獻度:老爸約貢獻35%,小孩貢獻65%

起因是因為小一生寒假有一項作業,是學校舉辦花燈比賽,
每位小朋友需要使用環保素材製作燈籠,
其實本來想大概做個燈籠就好,(根本就是混啊啊啊啊)
沒想到後來和小子討論,他居然想玩很大,
打算弄個類似機器人花燈之類的@@,會動的那種
(就跟外面燈會的頗像)


稍稍交代一下小孩的起點行為:
最早玩 Lego Wegdo,
後來玩 mBot,會使用類Scratch介面撰寫程式控制紅外線遙控自走車,
對電路板有粗淺的認識,會使用電表測量電壓
玩過 Code.org , LightBot,LittleBits
有一點點函式、變數、以及迭代的概念

而這次我也在思考,我要怎麼教?專案怎麼進行?怎麼引導而非主導? 
之前大多是以套件為主體,按圖索驥組裝以及寫程式不會是太大問題,
而這次的寒假作業也算是個契機,可以讓他學習利用非套件素材,
也就是在沒有完整套件配件以及機構的前提下,尋覓適合的素材,並結合其他素材來製作,
因此我的步驟,大約會讓孩子先產生想法,接著進行引導,並教導相關技術,結合既有技能與概念,測試修正,但我僅提供有限度的幫忙(PBL Base)

好,那就開始囉

一、畫個設計圖先

其實這部分花不少時間,需要與小孩詳加討論
因為要釐清需求,才能決定要做甚麼?怎麼做?規劃後續步驟?
評估可行性,需要準備那些工具和材料
其實在後續過程中,設計是一直變更的,
(你一定沒看過一個四十歲的男人和一個七歲的小孩,因為爭執設計的問題搞得大家面紅耳赤....)


整體需求就是要做花燈機器人,當有人靠近時,會揮手、眼睛會轉動、身體會發亮,
因為要環保...所以身體通通是用空面紙盒組合而成,
還需要電路板、伺服馬達、LED燈、電線、直流馬達...........等
(因為要求環保,所以電路板就是拆之前買的 mBot 自走車套件上的零件來使用)


二、準備材料


電子材料大致如圖示
  1. mBot電路板  X1(控制眼睛和板子上的LED燈)
  2. 1.5V AA X4 電池盒 + 1.5V AA電池 X4
  3. 超音波Sensor X1
  4. 6P6C線 X1(RJ11接頭)
  5. 減速馬達 X2 (做眼睛)
  6. Arduino Uno R3板 X1  (為何要這個?等等交代)
  7. DFRobot 擴展板 X1(為何要這個?等等交代)
  8. SG90 伺服馬達 X1
  9. 9V電池供電 X1

(相關電子材料一覽)

為何需要兩塊板子?
因為很怪的一件事,我們測試 mBot 裝上伺服馬達後,
若在離線狀態(就是不接電腦電源),僅靠電池供電,
伺服馬達一啟動,板子會重啟,
用電表一量,發現電壓會不足,電池全部換新也一樣
可能是我這塊板子的問題?

正當苦惱時,小子建議,是否能將伺服馬達移到另一塊板子,
然後再使用紅外線或藍芽控制?
(一句話點醒我夢中人啊......雖然不一定是最佳解,但至少是方向)
所以結構上是這樣:

mBot板子控制超音波Sensor、減速馬達(眼睛)、發射紅外線訊號、以及控制板子上的LED明滅(我稱他為 A板),
Arduino 板以及擴充板則是接收紅外線訊號,還有控制伺服馬達(揮手動作)(我稱他為 B板)

流程就是當有人靠近A板-->超音波偵測距離小於設定-->發射紅外線訊號給B板-->A板眼睛轉動(減速馬達)-->A板板載LED亮
而B板接收到紅外線訊號-->揮手(伺服馬達)


( 開始拆自走車零件 )

( 測試零件擺放配置 )


對了,非電子材料與工具的部分,
大概就是面紙盒做結構主題,還需要玻璃紙、白膠、膠帶、熱熔膠、噴漆、小刀、電烙鐵等等

三、製作步驟

(製作手掌)

( 測量電池電壓 )


(翻翻老爸工具材料箱是否有可用零件)



(面紙盒噴漆,噴漆技能 Get!! )

(因為不小心把馬達線扯斷,所以需要焊接電路,哭哭@@  焊接技能 Get!! )

(製作眼睛)


(結合硬體撰寫程式,驗證功能和概念)


(開始鑽孔,組裝電子零件與燈籠本體)




(用熱溶膠黏合眼球,手掌,伺服馬達)


(線路整理)




(燈籠君 Beta 版)






(整線進行最後組裝)

(我想讓燈籠君走路....有請掃地機器人)

(燈籠君不夠亮?感謝阿公捐贈LED X3)




(燈籠君實際運轉中)

(失敗就多嘗試幾次吧)


(燈籠君最終版)

三、歷程省思

  1. 他並沒有很炫的外貌,但是將心中想法具體做出來時,爽度破表啊啊...其實這是個簡單的作品,但我喜歡的是整個歷程,一起付諸實現的歷程(比賽有沒有得獎倒是其次惹)。
  2. 這個專案不同於以往,除了從零開始建構之外,多元的素材、多種新工具的使用與技能的學習,而不是單純採用套件中現有的機構,感覺比較貼近 Maker 的真實樣貌。
  3. 家長(或老師)會不會涉入太多? 整個專案貢獻度:老爸約貢獻35%,小孩貢獻65%,從開始構思、繪製設計圖,老爸試著引導而不主導;有問題有困難就是討論,不直接給答案(當然老爸許多時候心中已經有答案,但是還是得忍啊啊啊,所以耐心很重要,請跟我說一百遍)。兩塊電路板程式,B板子上的程式因為牽涉到紅外線接收,所以這部分是我寫的,其他都由他使用 mBlock 完成。
  4. 這次專案的重點,對象是一年級小小孩,除了在設計時的引導外,其實有一塊很有趣:如何將心中實體且模糊的想法(例如我要會轉動的眼珠,但是要怎麼轉動?這個得很明確,因為最後須要將之以程式語言敘述以及演算法來實現,不能有模糊空間),轉化為元件實際的運作(其實骨子裡是減速馬達的運轉,但得將眼珠轉動的概念連結到馬達轉動上),然後用程式將想法實際敘述出來(程式裡就得清楚寫出馬達轉的方向、力道、時間等等),再轉化為演算法(當超音波偵測距離小於五公分時,馬達順時鐘方向轉動3秒鐘,速度50,並重複做三次),最後又再回歸到硬體面,實際編程與測試硬體運作狀況,以及錯誤修正。這個歷程我覺得最有趣,整個流程是將心中模糊的想法,進行清晰的定義,之後再依照定義,轉化為更為抽象的概念與描述,並透過演算法的編訂以及實際編程來針對硬體進行操作,反覆測試修正,有那麼點運算思維的味道在其中。
  5. 新工具的使用是必須要教導的,但儘可能在安全的範圍下還是得讓孩子盡量操作,不要越俎代庖,不論是電烙鐵、小刀、或者是熱熔膠皆然。當然有些關鍵點孩子實在會遇到困難,畢竟小肌肉還在發展中,適時的幫忙還是需要的。由於整個歷程大部分都是由孩子實作,再加上引導以及教學,整個實際製作時間會拉的非常非常的長,要有心理準備(所以耐心很重要,請再跟我說一百遍XDDDD)。
  6. 跌跌撞撞和失敗是一定的,克服困難後,那種感覺宛如打電動破關,不但問題解決了,就是那種湧現而出的滿足感和自信,那種是花再多錢也買不到的。
  7. 當然,同時可以讓孩子演練,萬一故障時或不 work 了,要如何修復?是電路的問題?還是電池沒電?這時候就可以來狀況模擬一下,讓孩子從原理更深入了解,如何發現問題和解決問題。基本上若是孩子真正參與整個製作過程,也確實了解運作原理,維修這部分倒是孩子很快就能解決。
  8. 燈籠君會走,是因為小朋友將他之前組裝的掃地機器人加上,但最後實在太重了,加上容易重心不穩,所以交成品時是固定版,並將行走納為未來優化時的考量。(而且半夜看到燈籠君晃來晃去,會發亮會走動,感覺也是毛毛的@@)



2015年7月2日 星期四

自己的讀卡機系統自己做!! 窮人版自動閱卷系統製作~

<<文獻探討>>

在目前測驗體制下,幾乎都會有選擇題題型
國小大部分還是直接書寫在測驗卷上,
國高中則視狀況會採用2B鉛筆搭配答案卡進行填答,
這就需要專用的讀卡機   專門的答案卡  專門的評測系統
評分系統仍在本地機器上
例如說  這個

也有某些系統已經可以將成績透過網路上傳到雲端
例如說像 這個系統

但據了解目前市面上這些傳統的讀卡機系統(以下稱之為自動閱卷系統)
大多會有以下問題
  • 讀卡槽無法一次放太多,一次通常只讀一個班
  • 需要使用專用的答案卡與專用的讀卡機
  • 重覆或有問題的卡會卡住,等人工處理完後,再進行下一張
  • 成績在本機端
  • 建置成本一般較為昂貴
但後來發現   有一個叫做 GradeCam 的APP
幾乎可以解決掉上面許多的問題
這邊就不再贅述其使用方式 請見 黃老師的部落格 還有 這裡 的相關介紹
這個APP不需要使用專用的答案卡
你的平板或手機+APP  搖身一變即成為閱卷讀卡機
閱卷完畢  成績可直接在雲端呈現 不賴吧

但是其最大的問題是   老師還是得手工一張張去掃描考卷
太累惹   太人工   也太不自動化

<<系統需求>>
  • 建置一個自動閱卷系統
  • 將人工涉入的因素降至最低
  • 掃完答案卡後,成績直接上傳至雲端
  • 成本無需太高

<<準備材料>>
  • Arduino UNO R3 X1
  • SG90 Servo X1
  • 閒置雷射印表機 X1
  • 線材(杜邦線)若干
  • 紙箱與塑膠椅(好摺凳...)數個
  • 平板 X1(要能上網喔)
  • 廢棄電腦 X1

<<製作過程>>

原理整個其實很簡單,
平板+APP是讀卡機,
Arduino+SG 90 伺服馬達+雷射印表機負責自動進紙
如此而已
(請看下方影片,好弱.....)

  • 將平板 GradeCam APP安裝好,以及至系統將相關的試題答案,還有班級學生等設定(這邊不贅述了,請大家自己Google一下吧)
  • 請利用紙箱和好摺凳擺好龍門陣,下方擺好雷射印表機
  • 紙箱蓋上挖一個洞,放置於剛剛搭好的龍門陣上,將平板鏡頭對準下方印表機出紙閘,以利待會兒掃描
  • 右邊紙箱擺好廢棄電腦(因為要增加重量壓艙用的,因為馬達力道太大@@)














  • Arduino 接上 SG90,寫好程式,他的功能是每隔八秒鐘壓一次雷射印表機進紙按鈕
  • 將Arduino + SG90 裝到紙箱上,對準印表機進紙按鈕


  • 將學生的答案卷擺上來進行掃描,上工!!!


系統實際運作:


讀卡機(平板+APP)掃描過程:


伺服馬達進紙近拍:


或許有人會問   為何不拆開雷射印表機
直接控制其進紙機構呢?
因為....因為...因為這台印表機還沒除帳,
還在服役狀態,豈敢亂拆?
但截至目前壓力測試
一次掃200張沒發生問題挺順的
整個成本,若不算印表機和平板,還有紙張耗材
大概就只需要買個 Arduino 板子+SG90 Servo,
頂多再一個行動電源吧
耗費絕對不超過 NT$1000

雖然醜醜的,可是實際上work的不錯哩~
歡迎大家試試~

2015年6月7日 星期日

孩子,是天生的 Maker

一直在測試底線 ,究竟Maker的下限(年齡)到哪裡?
小小孩真的能 Maker 一下嗎??
(因為許多朋友看見我給敝校幼兒園小朋友到電腦教室玩樂高機器人和寫程式,有點傻眼...)

好了 ,話說之前自己訂的 mBot 機器人套件入手了,
大班生一看到就凍未條了
這小子就興致勃勃的一直要我拆封,
不拆還好,一拆開始組裝就停不下來,
小子總共耗費約 1hr 20 mins 組裝(含閱讀說明書以及清點零件,還有組裝),
在歷程發現,小子已經能夠除錯,或找出不合裡之處,
甚至是發現套件中某些不合理或弔詭之處,或者是說明書可能有問題的地方,
整個歷程中,老爸只發現他有一處螺絲鎖錯,稍作提醒,
其他完全一整個不理我啊啊啊啊~
(不過坦白說這組機器人組裝設計是真的蠻容易上手的,連大班生也能組喔,推~)


























然後這小子不打算睡的 ,組裝完便要求我教他寫程式
但是由於這個程式介面與之前他寫的 Lego Wedo 差異甚大,
需要花一點時間教學,
(至少  他目前識字不多  使用 mBlock會有障礙)
(事實上是他老子想睡惹......)
以上是昨晚的進度

今天 ,大班生就要求開始要寫程式,要讓它動起來,
我只教認識一些基本的積木
還有一個最基本的,如何讓機器人前進,如此而已

後續他便自行變化出折返跑、反覆折返跑,
這個歷程耗時約 1.5hr,

因為他還要實驗機器人走的距離,時間,速度,
在程式中做設定,取得最適合的參數,
以及折返跑時  迴轉所需要的最佳時間





所以,Maker這件事能不能往下推?
我的答案是肯定的,
而且越小的孩子,越能樂在其中,
孩子,是天生的 Maker

還是想強調,絕非這傢伙天資聰穎、很強或者是天才兒童之類的,
(根本就不是好嗎?沒有遺傳到我.....哭.......咦?)
整個過程其實我並沒有介入太多,
只有適度的引導和基本教學,
剩下就是他自己發揮囉

你說我這樣算不算過度?
其實我覺得還好耶,
因為我並沒有耗許多時間去教導他,去盯他,
或陪他練習,甚至是排進度授課,完全沒有,
我只在他需要幫助時,稍加引導(不是主導喔),
給予必要協助,如此而已,
當然不可否認,他進度比較快,是因為有之前的基礎支持

事實上,我覺得我帶給他的,
是"自由做"的氛圍以及支持
加上足夠的資源(我的口袋破惹),
自然而然,孩子就會喜歡上動手做這件事,
試圖去發想,和動手解決問題,
未來並不期然他一定會要成為攻城獅或者是程序猿,
但我希望這些 Make Something 的歷程中獲得的軟實力和態度,
包括自學、整合、解決問題、創意、實作等等,
能成為他未來成長歷程中重要的養分。

還是那句老話:
將做夢、空想的機會,
以及動手做的時間、空間和權利還給孩子,
提供資源,讓他們將想做的東西實作出來,
足矣!!
這應該就算是孩子的 Maker 啊~






2015年2月6日 星期五

創客小學堂RFID數位簽到系統

數年前  未來教室在營運時
建置了一套使用 QR Code 的 數位簽到系統,一直想把它改成簡單一點  
不需要筆電,不用 QR Code  

類似直接用 RFID Card + Reader來進行一個所謂的簽到的動作 (好怪的文法,這句)
喔耶,Arduino 橫空出世      
正所謂   自己的簽到系統自己做!!

下圖是之前小朋友用 QR Code 放學簽退的狀況



一開始是打算將 Web 系統改版,配合 Arduino 做台讀卡機
然後就開始開薰的讓社團學生簽到了
班導師即可透過 Web 畫面看到自己的學生何時進到電腦教室
何時離開,有沒有去瞎混之類的(咦?)

一般書籍上或者是網站都是使用 RFID Reader+ SD Card 的範例
我還是喜歡採用 RFID Reader 結合 Web System

好   那我們需要那些材料呢?
  • Arduino UNO X1(後來採用 Arduino Yun, 原因容後再述)
  • W5200 Ethernet Shield X1(既然是網路簽到,網路得通啊~~,後來也沒用到,原因容後再述)
  • 麵包板 X1
  • RFID Sensor RC522  X1
  • 無源蜂鳴器 X1 (發出嗶嗶聲,以判斷簽到成功或失敗,跟捷運站刷卡一樣的 fu )
  • 外殼(3D列印) X1 (Model 請見這裡)
  • 線材若干



但但但    問題來惹
W5200 Ethernet Sheild ===> 走SPI
RFID Sensor RC522 ===> 也是走SPI
同時間只能 allow 一個設備走 SPI啊~(哭)

所以為何,後來板子改成用 Arduino Yun,是有原因地
改成 Arduino Yun 的好處多多
除了避開 SPI 的問題之外
也不需要那片 W5200 Ethernet Shield 
甚至可以走 WIFI 也ok
最重要的是 
在進行 HTTP Request 的時候,程式碼精簡太多太多了
(雖然用 Arduino Yun 做這個讀卡機   有點太豪邁奢侈了些)


系統架構大致是
Web system Ruby on Rails 3(太混惹   現在都已經 Rails 4 了...)
RFID ReaderRC522 + Arduino Yun + 無源蜂鳴器 + 3D 列印的外殼
RFID Card :13.56MHz Mifare
系統在 創客小學堂RFID數位簽到系統 (永遠的 Beta...)


整個流程是這樣:
學生到教室
==>拿出自己的RFID Card 
==>對準RFID Reader 刷一下
==>出席狀況即時登錄到系統
==>網站即時秀出出席與缺席狀況
離開教室時流程亦然














簽到系統畫面













理論上應該可以跟新北市校務行政系統介接
不過目前小規模試用  資料庫也僅止於社團學生
就直接建置在系統內囉  
目前尚未與校務行政介接














那這個跟創客教學有何關聯哩?

第一,創客社團的小朋友尚未學過 3D 塑模
可以先讓他們先行到這裡 
學習進行簡單的製作個性化3D RFID 狗牌
可以跟RFID Card 結合在一起的(請見上圖白色小狗牌)
再將他列印出來 每個人專屬的喔
算是3D列印入門課

第二,除了學做讀卡機外,請同學發揮一下創意,讀卡機可以怎麼與我們生活中的元素作結合? 門禁系統? 作業繳交系統?  甚至是合作社購物卡系統? BlahBlah.....
最重要的是,把它做出來!!

我想  這一整個流程不是為了讀卡機和數位簽到而去製作(避免為了創客而創客)
是為了解決生活中的問題  來進行發想
進而進行學習與實作  甚至是整合(ex.RFID 讀卡機製作 + Web system)
或許比較有意義?

系統顧及個資問題...只秀座號
目前系統尚在測試狀態 
製作流程之後再放到Instructables
Web System 會丟到 Github 開源
(是說這麼 Low 的低層次品,分享出來好像太....)