輿論分析量測電視劇觀看喜好的風向
Public opinion monitoring for TV series
加入 data team 前和 Kae 聊了 OTT 產業的現況,他問了我一個問題:
經費有限,無法買下市場上所有電視劇時
你會如何選擇要買哪個?
「那就找 C/P 值高一點的啊!」 我隨口這樣回答。
Kae 接著問:
那要怎樣知道每部電視劇的 C/P 值?
「hmm… 看風向吧!」 我思考了一陣子給了答案
因為經費有限,絕對不能像台幣戰士般看到喜歡的劇就買,如何買的聰明、買的有效率便是一大學問。
很直覺的,從「風向」切入似乎是個好主意。從網路輿論中洞悉觀影人的想法,藉機找出市場中 C/P 值較高的戲劇購入,無非是個偉大的願景!
回歸現實面
為了要習得「拔草測風向」的能力,勢必要先做些苦工、做些基礎建設,待一切就緒之後才能真正來看風是怎麼吹的。
整個流程上應該會是:
首先,我們需要有大家討論戲劇的資料。
接著,我們必須知道每個討論內容的對象為何?或者,用白話文解釋就是要知道他在討論哪部劇。
最後,知道每部劇討論的狀況,試著做些量化的動作,並摻入其他元素(如:時間、語意等),試著豐富分析的多元性,以不同的觀點切入,以利更加準確的了解風向。
試著把上面這流程詳細一點畫成圖後會長成下面這樣:
Step 1:蒐集討論文章
蒐集 PTT 和電視劇相關看板的所有討論文章
先有資料才能做分析,不然一切都是空談
觀察各式討論區後,選定 PTT 韓劇板、日劇板、台劇板作為資料來源。
爬取的內容包括文章標題、文章內容、留言類型(推/噓/箭頭)、留言內容,以及其他與時間相關的戳記,以利後續分析或量化使用。
Step 2:擷取文章主題
智慧判讀每篇文章是在討論哪部劇
知道每部劇分別有哪些討論,才能加以分析
困難與挑戰
直觀上,當有電視劇的劇名列表,直接做個字串匹配或模糊比對,應該就能快速完成「給定文章標題找出劇名」的功能。
然而,實務上,劇名可能因為各種原因而有著許多別名(alias),別名的出現會大大降低判讀上的準確性。
別名的原因五花八門,可能是各地翻譯的差異,例如:日劇《王牌大律師》在大陸地區翻作《勝者即是正義》,在香港地區則翻作《律政狂人》;日劇《月薪嬌妻》原著為《逃避雖可恥但有用》,也可能因為劇名太長而產生的縮寫,例如:韓劇《浪漫醫生金師傅》縮寫成《浪漫醫生》;韓劇《住在我家的男人》縮寫成《住我男》。
我的解決方法
我的解決方式大概可以分成下面幾個步驟:
a. 針對文章標題做前處理
b. 透過 資訊檢索 (Information Retrieval) 方法,找到候選劇清單
c. 在候選劇中進行投票挑出結果
Step 2-a:文章標題前處理
仔細觀察 PTT 文章標題,它是由文章類別和實際標題所組成。
舉例來說,文章「[問題] 月薪嬌妻主題曲?」,「[問題]」為文章類別,「月薪嬌妻主題曲?」則為實際的標題。
資料前處理時,先將文章類別移除,僅保留實際標題,並對標題的部分做些文字處理,例如:斷詞(word Segmentation)、處理停止詞(Stop words)等。
除此之外,也會抓取文章標題的特徵,以利 Step 2-b 做資訊檢索時使用。
舉例來說
[問題] 月薪嬌妻主題曲?
經過前處理後就會成為
「月薪嬌妻」、「主題曲」
Step 2-b:資訊檢索找候選劇清單
將上述前處理後的文章標題,透過 Google Search API 來進行資訊檢索。從搜尋回來的結果挑出較有用的資訊。
例如:依據網站來源區分,影劇網或新聞網的頁面優先使用,太過冷門的小網站則割捨;或是針對文字用法的正式性區分,嚴謹使用標點符號或文句用法上較為正式的內容優先使用。
接著將這些資訊整理過後,再做一次資訊檢索,這次只在特定影評網的下做搜尋,我們參考的影評網有:日本偶像劇場、台灣偶像劇場、韓國偶像劇場 以及 豆瓣電影。
舉例來說:
「月薪嬌妻」、「主題曲」分別做資訊檢索後,會得到「月薪嬌妻」、「逃避雖可恥但有用」、「真田丸」。
接著將這些結果在影評網下做 Custom Search,會得到對應的影劇頁面。
上述例子中,不論是在日本偶像劇場或豆瓣電影,「月薪嬌妻」和「逃避雖可恥但有用」皆對應到《逃避雖可恥但有用》的頁面,「真田丸」則對應到《真田丸》的頁面。
這些影劇頁面將是我們的候選劇,我們需要在步驟 2-c 中進行投票,挑出預測結果。
Step 2-c:候選劇票選
這個步驟較為直觀,簡而言之就是把上個步驟中得到的候選劇頁面一一投票,選出票數最多的那部劇,將是我們的預測結果。
這步驟較為複雜的地方,在於需要處理不同影評網頁面對應的問題。
例如:日劇《逃避雖可恥但有用》在 日本偶像劇場、豆瓣電影 是兩個不同的頁面,需要將這兩個頁面都對應到《逃避雖可恥但有用》這部劇,投票時才能有較好的結果。
預測結果衡量與討論
使用上述的方法,針對 500 多篇的文章做了劇名預測的運算,並隨機抽 63 篇出來做人工驗證,共有 46 篇預測成功, 17 篇預測失敗,預測準確率約為 73%。
探討預測失敗的案例中,多半是文章標題實際上是有在陳述某部劇,但系統判定不出在討論的劇名而未產出預測結果 。
一些題外話
上述「給定文章標題的情況下要找出劇名」的問題可視為 自然語言處理 (Natural Language Processing,簡稱 NLP) 領域中的命名實體識別 (Named Entity Recognition,簡稱 NER) 問題。
若對於 NER 有興趣,可以繼續研讀台大資工系自然語言實驗室 2014 年在 ACM ERD challenge 比賽 short text 任務中拿到 First Price 時所發表的 paper:NTUNLP approaches to recognizing and disambiguating entities in long and short text at the ERD challenge 2014。
若對命名實體 (Named Entity) 間關係擷取有興趣,則可以繼續研讀筆者 2016 年發表在 COLING 研討會的 demo paper:NL2KB: Resolving Vocabulary Gap between Natural Language and Knowledge Base in Knowledge Base Construction and Retrieval。
如果用另一個角度來看,它也是個多類別的分類問題, input 是討論文章的文章標題, output 是其討論的劇名。只是在這邊,由於使用資訊檢索的方式切入問題,我們不需先知道劇名的清單 (drama list) 就可以做這個分類問題。
Step 3:量化分析數據
瞭解每篇文章的討論主題後
可依照劇名做量化分析、時序分析等
簡單統計量分析
在 Step 2 預測劇名後,我們可以算出特定時間內 (ex: 每個月) 每部劇的討論狀況,舉凡:總文章數、總留言數、總推文數、總噓文數、平均留言數、平均推文數等,都是我們可以很快取得的數據。
另一方面,我們也可以以「人次」為單位來計算以上的統計量,了解實際上有多少人次的討論聲量,或許可避免少數特定帳號 (可能是熱衷鐵粉,也可能是網軍帶風向) 對聲量大小的影響。
時序性資料分析
在網路聲量的監測中,時間是個很重要的元素。
加入時間的元素,我們可以觀察戲劇討論熱度的趨勢,更可以知道劇跟劇之間討論聲量的比例,並從中發現一些特別的現象。
筆者在此舉個例子,在 2017 年 9 月的監測資料中發現,《再次相遇的世界》這部劇的討論聲量 (下圖橙色部分) 有著週期性的規律。仔細看了原始討論資料發現,在 PTT 韓劇版中有種特別的文章類別「LIVE」,即電視播出時會有一篇討論文,大家會在文章中聊天,此類的文章通常留言數相較於其他文章多上許多。
更多文字分析
除了命名實體識別 (Named Entity Recognition) 外,整個專案還有許多可以套入自然語言處理研究領域的專業技術,對於網路風向做出更深入的解讀。
筆者在此先賣個關子,待時機成熟有緣再和大家分享 :)