用自然語言處理與機器學習標註景點主題,及首次黑客松心得
用自然語言處理與機器學習標註景點主題
很多人喜歡旅遊,但是對於一個旅遊景點,每個人關心的主題是不同的:有的人特別喜歡購物,有些人愛吃美食,喜歡看風景的人也有人文景點或自然景點的偏好,或者你的興趣是攝影,特別關心哪邊有好的取景點。因此,若事先知道這個景點與哪些主題較相關,就能夠依照個人喜好安排自己的旅遊行程。要怎麼知道一個詞彙(景點、地名或商店名稱)與哪些主題相關?人工標註當然很容易,但要怎麼讓機器做到呢?一個直觀的想法是:如果出現這個詞的文章都是在討論某個主題,那這個詞屬於這個主題的機率就很高。例如有”一蘭拉麵”出現的文章大部分都是食記類文章,則可合理推斷”一蘭拉麵”與”美食”這個主題相關。當然,如果有一篇文章在講攝影,然後提到”拍完照後大家都餓了,就前往有名的一蘭拉麵”,則”一蘭拉麵”也會被標註上”攝影”這個無關的主題,但只要文章數量夠多,我們就能用與該詞彙有關的各主題的機率去做判斷,畢竟直覺上一個美食的詞彙出現在美食類文章的數量會比出現在攝影類文章大得多。所以”標註景點主題”的問題就轉變成了”標註文章主題”的問題,而我試著用自然語言處理跟機器學習來解,做法是:
- 先決定幾個預設的主題,取一小部分的文章做 training data, 手動標註這些文章的主題
- 將 training data 的每一篇文章斷詞後做 Topic modeling, 也就是用這些文章建立 dictionary, language model, 將文章表示成 latent vector space 中的向量
- 將剩下的所有文章(testing data),用已經建立好的字典跟模型投射到同一個 latent space 中,看這個向量(這篇文章)與 training data 中的哪一個向量(哪一篇文章)最相似(計算 Cosine similarity),最相似文章的主題就是這篇未知文章的主題。
測試結果
為了驗證,我找了 PTT Japan_Travel 板上標題有”東京”的食記、遊記及住宿類文章大概 5000 篇,接著手動標註了今年1-2月份的文章大約 250 篇(5%),用這 5% 的資料建模,讓機器去標註剩下 95%的文章,有了文章主題後再計算字彙的主題。以下是一些字彙的標註結果:(程式語言是 Python, Topic modeling 用 gensim, 斷詞用 jieba)
迪士尼樂園
- 景點 0.5294
- 購物 0.1548
- 美食 0.0991
嗯,看起來還滿準的
六厘舎
- 美食 0.4444
- 景點 0.3333
- 購物 0.1667
吃沾麵的地方,也正確
昭和記念公園
- 景點 0.3913
- 攝影 0.2174
- 美食 0.1739
搜尋了一下,很多人在這邊拍銀杏跟櫻花
不過除此之外,也有很多不準的,例如:
羽田機場
- 景點 0.356
- 購物 0.2042
- 美食 0.1832
- …
- 機場 0.0236
一蘭拉麵
- 景點 0.3477
- 購物 0.2865
- 美食 0.1836
標註錯誤的原因有很多:
- 該詞彙不是景點,但出現在大量的遊記中,例如很多篇遊記都在羽田機場下機,都去吃一蘭拉麵
- 也因為絕大部分的文章都有”景點”這個主題,所以”景點”幾乎 dominate 了所有詞彙的主題排行第一名
- 主題切分不夠細,training data 太少,斷詞處理得不好,沒有處理同義字…等
不過就算有更多 training data, 或花更多時間調整精細度,統計式或機率式的自然語言處理都有其極限,所以現在才有很多人改用 deep learning 去試,而中文的處理更難,關鍵還是在斷詞,如果斷詞用的字典不夠大,效果就不可能好,而斷詞用的字典幾乎只能靠人工建立.
首次參加黑客松心得
因為朋友相約參加黑客松,才騰出時間做了上面的實驗。我們參加的是經濟部工業局辦的一個“Big Data X Maker”黑客松,然後其實我們做的成品不只這樣,而是一個東京旅遊推薦系統:依照個人喜好、旅遊天數、預算高低自動產生景點與行程規劃。除了上述部分外,其他朋友負責網站前端、後端、行程排程演算法等,最後的成品如圖:
很可惜的是最後沒有得獎。之前就有耳聞,但這次確實觀察到了有關黑客松的一些有趣現象:
- 大概有一半的隊伍沒有任何成品,只有簡報,而且其中有好幾隊都抱走了獎項(所以是簡報松?美工松?創意松?)
- 有好幾隊在簡報裡面都說:我們的 App/網站長這樣,讓使用者可以 blablabla,看到最後才發現都是概念圖或改圖的…
- 撇開沒有成品不說,確實有看到一些新的 idea, 也看到好幾組做特殊領域的 chatting bot, 看來 bot 的趨勢有傳播到國內
平心而論檢討我們的成品,沒有得獎的因素可能如下:
- 旅遊相關的主題,評審大概看多了,覺得不夠有創意,簡報的方式也可以再改進
- 資料來源只有 PTT Japan_Travel 板,其他部分都是串 API 得到的,可能不夠多,可以再介接一些 facebook 打卡熱點,或是從 blog 或 fb post and photos 自動學習使用者的興趣等
不過總而言之有學到東西,也有團隊合作,是一次很有趣的經驗!