• 沒有找到結果。

Ad hoc 之餐飲評分機制

第四章、 研究結果

4.2 排名預測與驗證

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 的區間。

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

因此對3.2.2.3 節的公式一做正規化調整。

圖 23. 三種正規化方法

此外,本研究觀察到些許評論文章中,仍有些許情緒詞彙未被辨

識出來,因此本研究另外從google 評論中找出更多情緒詞彙,在加入 這些人工標記的情緒詞彙以及透過本研究之情緒分數計算方式之後,

可發現各餐飲種類的mse 均能夠成功調降(如表 8),意味著計算出的排 名也愈趨於MENU 美食誌的標準排名(大眾心目中的排名)。

至於本研究從google 評論中找出情緒詞彙的方式,是先蒐集 google 一星評論 1712 篇與五星評論 8732 篇,再將評論透過 jieba 套件 斷詞後,從一星評論中人工標記出負面情緒詞彙19218 個詞彙,五星 評論中標記出正面情緒詞彙70511 個詞彙,然而,過去研究(謝佩庭, 2014)會將詞頻(term frequency)過低的詞彙視為不具文件鑑別力,詞頻 過高的詞彙視為停用詞(stop words),而將這些詞彙先移除再人工篩選 出情緒詞彙,但是本研究認為此作法仍有可能遺漏些許情緒詞彙,因 此為了蒐集到更完整的情緒詞彙,將直接進行人工標記的程序。

而過去研究(謝佩庭, 2014)進行情緒分數計算時,普遍會多加檢驗 情緒詞在句子中的前後是否包含程度副詞或否定詞,並調整其情緒分 數,但在本研究中,則是嘗試將所有程度副詞或是否定詞合併進情緒 詞中,並依據本研究情緒詞的計算方式,賦予其新的情緒分數。而本 研究人工標記情緒詞之情緒分數給定方式則是,透過調整情緒詞的情 緒分數使各項排名的mse 降低,若為正面情緒詞則將情緒分數從 0 開 始累計到10,負面情緒詞則是情緒分數從 0 開始累計到負 10,觀測 mse 的變化,若平均 mse 有變小且每個餐飲種類的 mse 增加或降低的 幅度不超過0.1,則把當下的分數指定為此情緒詞彙的情緒分數,並加 入人工判斷各情緒詞情緒程度,例如:賦予高強度的情緒詞彙較高的 分數。

上述的排名結果都是經過3.2.2.3 節的公式一計算商家總評分而 來,依照評分大小給予適當排名,完整的商家總評分計算程序可參考

下圖:

輸入:經前處理後的評論、按讚數 輸出:商家總評分

FOR(商家所有評論)

一則評論的評分 = 此評論中所有情緒詞的情緒分數加總 FOR(商家所有評論的按讚數)

一則評論的按讚數 = 此評論按讚數 + 1 商家總評分 =

加總(正規化(所有評論評分) * 正規化(所有評論的按讚數))/所有按 讚數

Return 商家總評分

圖 24. 商家總評分計算程序

首先,將經前處理後的評論進行情緒分數轉換,計算出每一則評 論的評分,再分析每則評論的按讚數,經研究發現些許評論的按讚數 為空值,意即此評論沒有獲得任何按讚數,但是經過研究測試過後,

發現這些按讚數為空值的評論若為0 則對最終評分沒有任何貢獻,若 為1 則可以影響總評分,且有助於提升最終排名結果的準確度,因 此,本研究嘗試兩種方式,分別為僅將按讚數為空值的評論賦予其值 為1,以及利用平移概念將每則評論的按讚數加 1,測試後的排名結果 相差不多,相較未調整前均有所改善,故本研究採用平移概念。之 後,再分別將評分與按讚數(權重)進行正規化後相乘,把所有評分加 總,並且測試以所有按讚數或是以所有評論數量將總評分平均的排名 效果最佳,測得所有按讚數最佳,因此最後將總評分再除以商家所有 評論獲得的所有按讚數平均,即為此間店家的最終評分。

再利用ad hoc 方式結合兩個情緒辭典(antusd 辭典(Shih-Ming,

2016)、emoji 辭典(Kralj Novak 等人, 2015))與本研究人工標記之情緒詞 彙,利用3.2.2.3 節的公式二找出讓排名 mse 最小化的參數組合,之後 將此參數組合套用於測試資料驗證模型準確度。測試過各組參數後,

𝑤1, 𝑤2, 𝑤3以趨近於1 的值進行排名預測可得最佳結果(如圖 25),若以 圖25 左上圖𝑤1為例,固定另外兩個𝑤2, 𝑤3參數為1 後觀察調整𝑤1對八 種訓練資料平均的mse 變化,可觀察到當𝑤1趨近於1 時平均 mse 為最 小,而因𝑤1為0 時會將情緒詞彙分數都轉為 0,𝑤1為負值時會將正向

𝑤1, 𝑤2, 𝑤3以趨近於1 的值進行排名預測可得最佳結果(如圖 25),若以 圖25 左上圖𝑤1為例,固定另外兩個𝑤2, 𝑤3參數為1 後觀察調整𝑤1對八 種訓練資料平均的mse 變化,可觀察到當𝑤1趨近於1 時平均 mse 為最 小,而因𝑤1為0 時會將情緒詞彙分數都轉為 0,𝑤1為負值時會將正向

相關文件