iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0
AI & Data

用R語言玩轉文字探勘系列 第 24

[Day 24] 利用R語言做出主題模型 - intrusion test

  • 分享至 

  • xImage
  •  

主題模型

主題模型 - 評估

我們前面展示如何分別利用STM和LDA建構主題模型,要得到夠好的主題模型,我們有些事情可以做。先來介紹測試方法。具體可以參考這篇文章:https://aclanthology.org/D18-1098.pdf

測試模型表現的方法有很多,最常見的是主題入侵測試以及詞彙入侵測試。

就主題入侵測試來說,在實作的時候,會聘請人類評估員(human
coder,學校場合一般都會直接找研究生,或是有研究助理經驗的大學生),接著拿「一段文字」和「多組主題」給評估員,看對方能否找出「和其他主題明顯不屬於同一個主題」的主題。

這樣講可能有點抽象,我們舉個例子:

「阿芬昨天吃燒餅之後,考試都考了一百分呢!阿芬很高興,因為這次考試很努力學習。」

主題:

選項 A:學習 選項 B:考試 選項 C:成績 選項 D:愛情

其中,「愛情」就是明顯不符合的主題。

就詞彙入侵測試來說,在實作的時候,會拿「一個主題」和「一組詞彙」給評估員,看對方能否找出「和其他詞彙明顯不屬於同一個主題」的詞彙。

這樣講可能有點抽象,我們舉個例子:

「在下列詞彙中,有哪個詞彙屬於不同主題?」

選項 A:投票 選項 B:選舉 選項 C:總統 選項 D:演唱會

即便題目沒有提供主題名稱(也絕對不能提供,否則就失去測試的意義),但你還是可以猜出,這個主題可能和政治有關,其中選項
D 很明顯跟其他選項不同,所以會選
D。我們可以說,這個主題是一個清楚的、有意義的主題,因為你可以明確區分出詞彙之間的關係。再看下一個題目:

「在下列詞彙中,有哪個詞彙屬於不同主題?」

選項 A:唱歌 選項 B:跳舞 選項 C:選秀 選項 D:綜藝

我們很難確定到底該選哪一個選項,選C的話,其他三個字的概念像是綜藝節目或是娛樂節目,選D的話,其他三個字同樣可以理解成選秀節目。這種評分者或甚至是一般人,都沒有辦法區分初到底哪個詞彙不屬於該主題的時候,就代表這個主題,沒有做到有效區分,這時候品質就有問題了。

要生成一個入侵測試,首先要從主題模型中隨機選擇一個主題,像上面的政治、娛樂等,但這個命名是事後命名的,所以就是隨機選一個,然後使用該主題的前五個詞來建立一個入侵的詞彙組合。再從其他主題抽一個詞彙出來,接著請人來判斷。

主題入侵測試對於評估主題模型很有用,因為它們可以評估模型識別和表示數據中實際存在的主題的能力。它們還可以被用於識別範圍太廣或太窄的主題,或者與其他主題分隔不清晰的主題。舉例來說,有一坨文章,裡面其實頂多就分成五個主題,但你在設定的時候,硬是要讓模型分出10個主題,這樣一來你就會發現,後面的主題其實詞彙區分沒什麼意義,很難決定它的意義,這個時候就可以用相對客觀的主題入侵測試判斷。

主題模型評估套件

這個章節的文章其實稍微抽象,就我所知主要也是學術界的人才會接觸,沒聽過產業界有人會對主題模型的檢驗要求那麼多。但若你有興趣,還是可以參考這個套件:https://github.com/chainsawriot/oolong/blob/v0.5/overview_gh.md

他實作了讓 human coder
評估主題的流程,變得很流暢,不用一直切換螢幕就可以快速判斷,所以教授都會推薦使用這個套件。

這個章節的文章其實稍微抽象,就我所知主要也是學術界的人才會接觸,沒聽過產業界有人會對主題模型的檢驗要求那麼多。但若你有興趣,還是可以參考這個套件:https://github.com/chainsawriot/oolong/blob/v0.5/overview_gh.md

他實作了讓 human coder
評估主題的流程,變得很流暢,不用一直切換螢幕就可以快速判斷,所以教授都會推薦使用這個套件。

devtools::install_github("chainsawriot/oolong")
install.packages("oolong")
library(oolong)
library(keyATM)
oolong_test <- wi(abstracts_keyatm, userid = "Hadley")
oolong_test
#> 
#> ── oolong (topic model) ──────────────────────────────────────────────────────────────────────────────────────────────
#> ✔ WI ✖ TI ✖ WSI
#> ☺ Hadley
#> ℹ WI: k = 10, 0 coded.
#> 
#> ── Methods ──
#> 
#> • <$do_word_intrusion_test()>: do word intrusion test
#> • <$lock()>: finalize and see the results

oolong_test$do_word_intrusion_test()
oolong_test$lock()
oolong_test
#> 
#> ── oolong (topic model) ──────────────────────────────────────────────────────────────────────────────────────────────
#> ✔ WI ✖ TI ✖ WSI
#> ☺ Hadley
#> ℹ WI: k = 10, 10 coded.
#> 
#> ── Results: ──
#> 
#> ℹ 90%  precision

按照上面的步驟,就能一步步的完成 intrusion test了。


上一篇
[Day 23] 利用R語言做出主題模型 - STM
下一篇
[Day 25] 利用R語言跑詞嵌入模型 - 原理與 skipgram
系列文
用R語言玩轉文字探勘30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言