• 沒有找到結果。

資料爬取與分析

第四章、 研究結果

4.1 資料爬取與分析

為了爬取Instagram 用戶對商家的評論與用戶個人資訊,首先,根據欲分析 商家的打卡地點,蒐集用戶在此打卡地點的文章,利用網路爬蟲套件Selenium 先行爬取此打卡地點的文章網址(如範例圖 15),存於 HackMD(2020),再利用 google chrome 擴充套件 webscraper 前往各網址內爬取貼文文章與用戶個人資 訊,然而,考慮到時間因素,目標是從過去的文章預測MENU 美食誌的商家排 名,因此爬取的貼文時間,限制於MENU 美食誌公開發布商家排名之日期(詳 見附錄一)前的 Instagram 文章,最後爬取的範例結果呈現於圖 16 中。

圖 15. Instagram 用戶於富宏牛肉麵打卡的文章網址

圖 16. Instagram 用戶對於富宏牛肉麵的評論與個人資訊

有鑑於Dai 等人(2018)研究中提及評分匯總(rating aggregation)問題,長 久累計的評分會導致評分結果無法反映店家的真正品質,因此本研究爬取的貼 文時間,僅限MENU 美食誌公開發布商家排名的前數個月內之文章,且因為本 研究之目的為預測MENU 美食誌的排行榜,故僅考慮 MENU 美食誌發布排行 榜之前的Instagram 用戶評論資料。

然而,如何挑選前數個月內之文章,本研究嘗試三種方式,第一種方法為 將挑選評論的時間區段(time window)設為一致六個月並蒐集六個月內的全部評 論,根據各店家於每月獲得的文章數量分布(圖 17)來看,每個店家六個月內獲 得的評論總數不一,甚至相差極大,有些店家僅獲得100 篇內的評論,有些店 家卻獲得600 篇以上的評論數量;第二種方法則是將挑選評論的時間區段(time window)設為一致六個月,但每間店家隨機挑選固定數量的評論;第三種方式一 樣是將挑選評論的時間區段(time window)設為一致,但依時間順序挑選最接近 menu 美食誌公布排行榜之時間點前的數篇評論,且各店家挑選固定數量的評 論。最終測試結果以第三種方法的排名結果較為準確,測試方式則是依據

4.2.1.2 節中僅使用台大擴增情緒辭典 antusd (Shih-Ming, 2016)的方式進行前測。

然而,進一步研究發現,第三種方式中,部分店家於六個月內所蒐集到的

評論數量僅在50 篇以內,若嘗試將蒐集評論的時間區段擴大為一年,增加各店 家的評論數量進行排名預測,將會增加排名的預測準確度,而各店家如何挑選 固定數量的評論,本研究分別測試50 篇、100 篇、150 篇、200 篇左右的排名 結果,以150 偏左右的排名結果較準,因此以 150 篇為基準繼續進行後續的實 驗。

圖 17. 各店家於每月獲得的文章數量分布(以牛肉麵六個月為例)

此外,亦可選擇根據標記有商家名稱的hashtag 蒐集商家的貼文,但是由圖 18(左)可看出標有 hashtag 的貼文內容較容易偏離對於商家的評論,因其可能包 含其他主題的hashtag,意即文章內容並非以評論餐廳為主軸,甚至完全沒有提 及餐廳評論相關的字詞,而位於商家地標打卡的貼文則大部分會談論關於餐廳 的相關評論(如圖 18(右)),因此本研究選擇用戶的打卡貼文,作為排名預測的資 料來源。

圖 18. 標記有店名的 hashtag 貼文(左)對照打卡貼文(右)(以林東芳牛肉麵為例) 然而,並非每一種餐飲種類的資料都適合進行排名預測,以手搖飲為例,

因為本研究預計從打卡貼文取得評論內容,但經過觀察Instagram 上的手搖飲打 卡貼文,不僅評論少且雜訊多,部分貼文內容都非跟評論相關,且手搖飲的分 店過多,資訊過於分散,不易取得,而若是提及評論相關的內容,也大部分都 屬於外文,可推測為外國觀光客所發布,如圖19 以五十嵐為例,可見連續十一 天的貼文內容都是外文,因此不適合本研究以中文為分析目標的排名預測,因 此本研究從MENU 美食誌已發布的餐飲排行榜中,最後整理出 2019 年之後的 十種排行榜,包括義大利麵、牛肉麵、滷肉飯、咖哩料理、港式餐廳、韓式炸 雞、韓式料理、牛排、鐵板燒、冰品(詳見附錄一)。

圖 19. 五十嵐手搖飲打卡貼文(108.12.29 至 109.1.8)

4.2 排名預測與驗證

本節將分別敘述實作ad hoc 之餐飲評分機制和機器學習分類演算法的過程 與排名結果驗證。

4.2.1 Ad hoc 之餐飲評分機制

首先,先將蒐集到的評論資料進行資料前處理後,以3.2.2.3 節的公式 一測試僅利用兩個現有情緒辭典進行情緒分析法搭配權重概念調整評分後 的排名結果,並測試正規化情緒分數以及各種調降排名mse 的方式,再以 ad hoc 方式結合兩個情緒辭典(antusd 辭典(Shih-Ming, 2016)、emoji 辭典 (Kralj Novak 等人, 2015))與本研究人工標記之情緒詞彙,利用 3.2.2.3 節的

公式二找出讓排名mse 最小化的參數組合,之後將此參數組合套用於測試 資料驗證模型準確度。

4.2.1.1 資料前處理

本研究抓取的資料如下圖20,每一列為一位 Instagram 用戶的貼 文,其中text 為評論內容、user info 為使用者 id、post count 為此使用 者曾經發布在Instagram 上的總發文數、fans count 為使用者擁有的粉 絲數量、follow others count 為使用者追蹤其他使用者的數量、likes 為 此則評論貼文獲得其他用戶按讚的總按讚數(此用戶對於其他用戶按讚 的數量因Instagram 官方未公布,故在本研究中則不討論),此外本研 究分析的資料量如下表4 所示,表中列出十種餐飲種類各名次商家 (menu 美食誌排名)所收集的 Instagram 評論數量以及各種類的評論總 數,依據4.1 節前測的結果,擷取 menu 美食誌公布排行榜之時間點前 一年的評論,各店家收集至多150 篇的評論。

圖 20. 本研究欲分析的評論資料範例

評論總數 No.1 No.2 No.3 No.4 No.5 No.6 No.7 No.8 No.9 No.10

義大利麵 1281 150 109 150 103 87 85 147 150 150 150

牛肉麵 1228 147 150 150 150 101 92 116 90 82 150

滷肉飯 1271 150 150 150 111 116 119 90 150 123 112

咖哩料理 1219 132 104 132 150 122 108 132 138 76 125

港式餐廳 1289 150 150 150 124 127 126 134 87 146 95

韓式炸雞 1370 150 129 145 150 70 147 150 129 150 150

鐵板燒 1376 150 150 150 144 132 60 140 150 150 150 牛排 1481 137 148 150 150 150 150 150 150 146 150 冰品 1500 150 150 150 150 150 150 150 150 150 150

韓式料理 1321 150 145 150 150 150 96 92 147 150 91

表 4. 本研究蒐集的各名次商家 Instagram 評論數量

在文字資料前處理的階段,通常會考慮到重覆值、空值、標點符 號、雜訊以及停用詞問題。本研究爬取的資料在利用瀏覽器擴充套件 web scraper 爬取時,會直接將同一個 Instagram 用戶的貼文視為重覆資 料,因而只會爬取到不重覆用戶的貼文,故爬取的資料不存在重覆的 問題。但是用戶打卡的貼文可能不存在任何留言內容,僅留下照片,

故必須移除此類空值(Nan)資料,並且移除與商家用餐評論完全不相關 的貼文,本研究發現在Instagram 社群中,美髮業者常會透過在商家地 址打卡並發布廣告貼文,因此利用關鍵字(如:染髮、燙髮、美甲等…

美髮相關詞彙)篩選出這些貼文並移除,另外,在此階段不需特別移除 停用詞(stop words),因為在下個階段計算評論分數時,可以直接依據 情緒詞彙計算整篇文章的情緒分數,以達到排名計算的目標。

4.2.1.2 計算商家總評分與排名

本研究先將評論透過jieba 斷詞系統斷詞後,對照情緒辭典中的情 緒詞與對應的情緒分數,挑出評論中所有的情緒詞彙,並將這些情緒 詞的情緒分數加總,即為此則評論的情緒分數,計算過程如下圖21,

圖中comment 為評論,評論下方為各情緒詞與對應的情緒分數,

sent_score 為各則評論的情緒總分。

圖 21. 兩則評論的情緒分數分析範例

本研究隨機取八種餐飲種類(義大利麵、牛肉麵、滷肉飯、咖哩料 理、港式餐廳、韓式炸雞、牛排、鐵板燒)設為訓練資料,其餘兩種 (冰品、韓式料理)設為測試資料(詳見附錄一),利用訓練資料對 3.2.2.3 節的公式一做適當調整,並調降排名mse,並且透過 ad hoc 方式找出 3.2.2.3 節的公式二中讓排名 mse 最小化的參數組合,之後將此參數組 合套用於此兩種測試資料中驗證模型準確度。而調降排名mse 的過程 如下(表 5 至表 8):

表 5. 僅用台大擴增情緒辭典 antusd (情緒詞:27221)

義大利麵 牛肉麵 滷肉飯 咖哩料理 港式餐廳 韓式炸雞 牛排 鐵板燒 MSE 17.8 23.8 19.2 16.6 18 12 25 17.6 FCP 0.467 0.311 0.467 0.511 0.489 0.6 0.289 0.467 表 6. 加入 emoji 情緒分數(Kralj Novak 等人, 2015) (情緒詞:27970)

義大利麵 牛肉麵 滷肉飯 咖哩料理 港式餐廳 韓式炸雞 牛排 鐵板燒 MSE 22.4 19.6 20.2 16.6 19.2 11 26.2 18 FCP 0.378 0.422 0.4 0.533 0.444 0.622 0.244 0.444 表 7. 情緒分數與按讚數(權重)正規化

義大利麵 牛肉麵 滷肉飯 咖哩料理 港式餐廳 韓式炸雞 牛排 鐵板燒 MSE 11.8 20.6 9.6 18.8 11 17.6 15 21.8 FCP 0.622 0.422 0.644 0.467 0.622 0.422 0.511 0.356

表 8. 加入本研究人工標記情緒詞(情緒詞:28884)

義大利麵 牛肉麵 滷肉飯 咖哩料理 港式餐廳 韓式炸雞 牛排 鐵板燒 MSE 5.4 2.2 3.8 5.6 9 5.4 5.2 7.2 FCP 0.778 0.844 0.8 0.778 0.644 0.778 0.733 0.733

若僅僅用台大擴增情緒辭典antusd,進行 3.2.2.3 的公式一計算排 名,排名結果如表5,八種餐飲類別中有七種都較各自的打卡數 Baseline (詳見 4.2.1.3)差,其原始 menu 美食誌排行詳見附錄一,經過 觀察原始評論後,研究發現Instagram 用戶經常使用 emoji 作為情緒表 達的方式之一,因此考慮將emoji 的情緒分數(Kralj Novak 等人, 2015) (如下圖 22)加入 3.2.2.3 的公式一計算,排名預測效果如表 6,有五種 餐飲類別的mse 不減反增,觀察 Novak 等人研究的 emoji 情緒分數後 發現,其研究共收錄751 個 emoji 及相對應的情緒分數,但是卻有一 些emoji 直觀上不屬於餐飲評價的範疇,對於分析餐廳排名沒有幫 助,甚至在Instagram 評論中被大量使用,造成本研究的排名結果誤判 第一名的店家為最後一名,使得mse 大幅增加,例如:'🌿','┈', '💲'…

等,故本研究人工篩選並移除這些字詞後,也確實能夠幫助校正排名 的準確度,因此,使用Novak 等人研究的 emoji 情緒詞彙的同時,亦 須經過人工篩選,從排名結果判斷哪些emoji 為對餐飲排名有幫助的 情緒詞彙。

圖 22. Novak 等人研究的 emoji 情緒分數(2015)

然而,加入emoji 辭典後,仍有七種餐飲類別的排名結果無法趨

近menu 美食誌排行(表 6),且研究發現因為每則評論提到的情緒詞彙 數量不一,評論內容較長的文章通常被偵測出的情緒詞彙也較多,其 情緒分數總分會較其他短評論高出許多,將會有不同評論分數之間差 距過大的問題,因此本研究發現若將情緒分數與按讚數(權重)正規化 後,有四種餐飲類別(義大利麵、滷肉飯、港式餐廳、牛排)的 mse 有 大幅下降的趨勢(如表 7),本研究亦多方嘗試各種正規化方法

(Normalization),包括以下三種正規化方式(如下圖 23):

方法一(norm_score_1):

將數據限制於[-1,1],若數據大於 1,則設為 1,反之亦同,

若小於 -1,則設為 -1,其餘數值不變。

方法二(norm_score_2):

將數據按比例縮放到 -1 到 1 的區間。

方法三(max_min_normalization):

將數據按比例縮放到0 到 1 的區間。

測試結果以將評論分數與按讚數進行方法三的正規化後的表現最優,

測試結果以將評論分數與按讚數進行方法三的正規化後的表現最優,

相關文件