「T毛可以吃泡芙嗎」是由建國中學高三同學組成的團隊
以Deep Learning為出發,實作題目為 Sorting Hat Based on Learning Techniques:在輸入某人口述個人特性及偏好,利用機器學習等技術,找出此人特徵並分析,概念為模仿奇幻小說中的分類帽進行挑選的過程。
緣起:為什麼選這個主題?
一開始找題目的時候我們也是苦無靈感,很多東西大家都做過了,玩不出什麼新花樣,後來在指導老師的建議下我們決定朝「音訊」方向著手──針對一段語音輸入做一些有趣的事。但是要做什麼呢?我們很快想到了聊天機器人,然後我們(不知道為什麼)就想到了電影《哈利波特》中的分類帽(Sorting Hat)也是跟新生魔法師們聊天來決定他們所屬的學院,那麼我們能不能透過讓使用者輸入一段語音──有點像是自我介紹,但同時又像是在聊天──來判斷使用者是屬於哪一類群(例如哈利波特中的四個學院)?於是,我們踏上了成為魔法師之路……
(Picture originated from The Sorting Hat by sahinduezguen)
實作:做出一頂分類帽!
要幫使用者分類,我們要先了解所有類群間的差異性,再將這些差異用一些特徵(features)表示,最後只要從使用者輸入的文本中萃取出與特徵相關的字,判斷哪個類群所含特徵與這些字最符合,就能夠分類了。
以《哈利波特》中學院分類為例,霍格華茲的學生都很勇敢、而史萊哲林的學生個個陰險狡猾,這些「勇敢」、「狡猾」、「機智」等等都是各學院的特徵。從網路上公信力夠高的網站(Harry Potter Wiki)查到四個學院各自擁有的特徵,作為我們分類的標準,再將使用者的文本與之比對即可。
但是問題來了,要如何實作「比對文本與特徵」呢?我們使用 google 的 word2vec ,這個套件可以透過將文本中的字轉換為向量空間,所以我們把 Harry Potter Wiki 的內容全部丟進去, train 出一個完全是哈利波特世界的字的 model ,所以接下來我們只要把使用者說的內容拆成單字,丟進去與每個學院的每個特徵形容詞取距離,在針對各學院間特徵直取平均,看哪個學院的平均距離最短就是解答了對吧?
(Picture originated from http://harrypotter.wikia.com/wiki/Gryffindor)
挑戰及如何解決:專案期間遇到什麼困難,怎麼突破?
事情當然沒有那麼簡單,我們遇到的問題大致可以分成以下幾點:
- 詞性問題
- 中性字
- 單一學院中特徵間差異
詞性問題
大家都知道在英文中,brave 跟 bravery 之間的差別──形容詞與名詞,雖然兩個字都是指「勇敢」,但在向量空間中這兩個字會距離很遠,因為同詞性的字才會聚集在一起,所以我們把名詞和形容詞都當成特徵來算距
離。但是這樣會導致使用者中針對同一類特徵(如brave、bravery)之距離不同而且差異不小,這個問題我們會在第三點說明。
中性字:
我們發現使用者說的文本中,幾乎百分之八十的字與各學院的距離沒有太大的差異,例如我說 " I am a brave boy. "這段話除了 brave 以外的字跟各學院的距離幾乎一樣,我們把這種對分類判斷影響不大的字稱做「中性字」。但是如果放著中性字不管還是會對結果造成影響:原因是我們發現即使是中性字也會與某一特定學院(Slytherin)是最接近的,可能 A 這個字跟 Slytherin 距離0.001而與其他學院距離0.000999,乍看之下影響不大,但由於使用者是在與分類帽聊天,輸入的單字量其實足夠大到超過正常字(相對於中性字)造成的影響。
解決這個問題的辦法是,利用標準差把中性字篩掉,如果我們發現某個字與所有特徵字距離的標準差小於一定值,表示他跟所有字的距離差不多,那就判定為中性字。
單一學院中特徵間差異:
第一點有提到這個問題,用個簡單的例子說明:courageous 和 brave都是勇敢的意思,所以使用者說到 courageous 時我們會判斷他是屬於葛來分多的特徵字。但是由於要解決詞性問題,當我們使特徵字具有多種詞性(這裡是形容詞與名詞),就會造成 courageous 雖然跟 brave 距離很近但可能跟 bravery 很遠,遠到我們在做學院特徵字平均時影響過大而造成誤判。
在這種情況我們改良我們取距離的方法──選取各學院中特徵值最短的距離,而非平均距離,這樣能夠避免向量空間中特徵分布不均造成的偏差。
發展:接下來如何讓這個專案持續?想要做到什麼?
解決完上述問題我們終於勉勉強強做出一頂分類帽,但是又不是每個人都想成為魔法師,那我們做這個有什麼用呢?
其實回到一開始的問題,分類帽充其量就是在分類,所以舉凡生活中的分類問題我們都可以用這套方法來實作。像是市面上又有所謂的「投資風險屬性調查問卷」給投資者填寫,以利了解自己是屬於風險型或保守型,這種問卷型的調查分類方式就可以改為我們的「聊天分類」,除了不用看一堆密密麻麻的字勾選自己是哪一種人,或是在對某項事情的1~10評分中猶豫到底要寫6還是7,聊天分類可以以更直觀的方式提供使用者分類功能,而更可以根據使用者的反饋來持續改進聊天分類系統,再加上銀行推出的 chatbot 諮詢服務(http://www.ithome.com.tw/news/112450),讓金融業更簡便而精確地幫助使用者選擇投資風險類別。