---
# System prepended metadata

title: 0902 Report

---

# 0902 Report
這幾週除了進行實驗外，我們也對先前做過的資料搜集、資料清理等進行優化，也開始嘗試產出時間軸所需要的技術，都將在此次Report中呈現。
**Table of Content**
[TOC]
## Experiment
在自動化懶人包中，我們希望可以就事件背景介紹中的專有名詞做解釋，為達最佳結果，我們嘗試用以下六種方法做關鍵字萃取：
* [TF-IDF](https://hackmd.io/1ZJ8vzqCRD-whHgk8cFQbw?view#TF-IDF)
* [CKIP Tagger](https://hackmd.io/1ZJ8vzqCRD-whHgk8cFQbw?view#CKIP-Tagger)
* [CKIP+TF-IDF](https://hackmd.io/1ZJ8vzqCRD-whHgk8cFQbw?view#CKIP+TF-IDF)
* [Textrank](https://hackmd.io/1ZJ8vzqCRD-whHgk8cFQbw?view#Textrank)
* [Azure language service](https://hackmd.io/1ZJ8vzqCRD-whHgk8cFQbw?view#Azure-language-service)
* [Openai](https://hackmd.io/1ZJ8vzqCRD-whHgk8cFQbw?view#Openai)

並透過Evaluation Metrics客觀的判斷何者更合適。

#### 大致執行流程如下：
1. 透過SerpApi爬取該事件相關新聞（300則）
2. 進行[資料清理](##Data-cleaning)、斷詞
3. 以人工方式閱覽新聞，決定並記錄我們認為應該被選出的關鍵字
4. 用不同萃取方式針對清理過的所有新聞進行關鍵字萃取
5. 比對人為選擇與機器選擇的結果，得出客觀[結果](https://hackmd.io/1ZJ8vzqCRD-whHgk8cFQbw?view#實驗結果)（precision / hit time / mean average precision）

#### 小結
因Openai得出的關鍵字並未每次都能呈現我們需要的格式，故不參與比較。最終數據結果顯示過半的主題上==TF-IDF==都能得到較符合使用者需求的關鍵字，因此目前在背景介紹的部分我們將暫定使用TF-IDF抓取其中需要進一步解釋的專有名詞、人物、法條、事件⋯⋯等等。
接下來有關事件背景介紹的專題進度將會推進到最後的步驟——選擇較好的summary方法，用以產出事件背景介紹與專有名詞補充說明。




## Data cleaning
在資料從新聞網利用Maintext技術Crawl下來之後，資料中包含許多雜訊。在先前進行Keyword extraction時發現，像是「XXX記者報導」、「圖＼XXX提供」或是其他網站的不相關文字可能會影響到NER或是關鍵字萃取的結果。


### Regular expression
因此我們利用Regular expression，設定想要過濾的格式，並依據各新聞網格式，將資料中的不相關內容進行過濾。以下以聯合新聞網的格式為範例：
```python
if row['source'] == 'udn.com':
    udn_expert_eyes = re.compile('【專家之眼】')
    udn_news_type = re.compile('.+／')
    udn_udn = re.compile('聯合新聞網')
    udn_listen_start = re.compile('0:00 / 0:00\n')
    udn_end1 = re.compile('延伸閱讀')
    udn_end2 = re.compile('（綜合報導）')
    udn_end3 = re.compile('贊助廣告')
    udn_news_info = re.compile('〔記者.+／.+報導〕')
    udn_keep_reading = re.compile('...繼續閱讀')
```
設定格式後便將符合格式之部分清除。
#### 結果如下：
:::info
~~"觀察站／共軍演訓戰略 浮現攻台軍事布局~~
解放軍實彈演習激化台海風雲，觀察共軍東部戰區釋出訊息，每天演訓都有不同重點：四日「精確打擊」、五日「對海封控與制空作戰」、六日「對陸打擊、對海突擊」，依序架構出共軍對台演訓背後的戰略設想。依照公布時程，今天上午將是共軍包圍台灣的軍演關鍵階段，預料將完整呈現共軍包圍台灣的軍事布局，引發全球關注。
不過，受到政治因素限制，我國防部保守低調，當自家鄰接區，甚至領空、海域遭挑釁，仍以「嚴密監控、廣播驅離、備戰而不求戰」謹小慎微表達因應立場，導致監偵訊息發布、心戰作為，處處被動。
共軍三天演習，四日主角是飛彈與火箭炮，重點為「精確打擊」和「區域拒止」；五日主角則是共軍海空軍，重點則是「制空作戰」；六日主角又變為海軍，重點則是「對陸打擊、對海突擊」。
共軍此波軍事操演定為三天，研判就是演練在七十二小時內，完成台海封鎖、同時奪下空權和海權，建立海上輸送帶，讓外軍無法在七十二小時內進入台海周邊支援或介入戰場，演練共軍長久以來「快打、速決、損小、效高」的戰略指導，共軍事前甚至透過新華社說明操演科目。
九六台海危機時，或因偵蒐裝備不足，國軍全軍提升戰備、管制休假，官兵寫遺書備戰，同時秘密調動應急攻陸武器至前線，完整將固安作戰計畫演練一遍。但必須付出的代價，就是社會因資訊缺乏而恐慌、股市大跌，外界接連探討美僑如何撤離台灣。
或許這也是民進黨政府想要避免的事，尤其年底選舉將至，即使面臨共軍遠高於九六台海危機的操演陣仗，國軍未曾提升戰備，內部僅以不成文的「加強戰備」外馳內張運作，耗資鉅額款項購置防空飛彈、攻陸飛彈，因「經常戰備時期突發狀況處置規定」修訂為寧可承受第一擊，也不開第一槍，僅存的不對稱戰略優勢沒有推定的機會，防衛想定與現實脫節。
我國有長程預警雷達這項戰略預警優勢，但當防衛想定是先承受第一擊，毋怪不發防空警報；我國積極採購遠距精準武器，耗資兩千多億元自製飛彈提升海空戰力，規定卻是先挨打，買來何用？
共軍演習前，國軍漢光演習實兵演練剛結束，國軍「四年期國防總檢討」曾對蔡政府所提「重層嚇阻」戰術作出描述：「發揮聯合戰力，使敵陷入多重困境，嚇阻其不致輕啟戰端。倘敵仍執意進犯，則依拒敵於彼岸、擊敵於海上、毀敵於水際、殲敵於灘岸之用兵理念，對敵實施重層攔截及聯合火力打擊，逐次削弱敵作戰能力，瓦解其攻勢，以阻敵登島進犯」。
面對共軍重兵封鎖台灣的演訓，外界卻看不到防衛想定的實踐和訓練。政治指導軍事，固然是民主政治的一環，但面對此次模擬接戰實體的大事件，國軍只有辛勞，卻無練兵效果，殊為可惜。
~~延伸閱讀
贊助廣告
商品推薦
udn討論區
\- 張貼文章或下標籤，不得有違法或侵害他人權益之言論，違者應自負法律責任。
\- 對於明知不實或過度情緒謾罵之言論，經網友檢舉或本網站發現，聯合新聞網有權逕予刪除文章、停權或解除會員資格。不同意上述規範者，請勿張貼文章。
\- 對於無意義、與本文無關、明知不實、謾罵之標籤，聯合新聞網有權逕予刪除標籤、停權或解除會員資格。不同意上述規範者，請勿下標籤。
\- 凡「暱稱」涉及謾罵、髒話穢言、侵害他人權利，聯合新聞網有權逕予刪除發言文章、停權或解除會員資格。不同意上述規範者，請勿張貼文章。
FB留言"~~
:::



## Event-time Pair Extraction
目前專題進度進行到製作時間軸的部分，雖然在爬蟲時已經有對新聞發布時間進行整理格式化，但考量到新聞時間並不一定代表事件時間，我們寫了一個可以存文章內抓取時間與事件配對的程式。
### Pairing function
#### 執行程序為：
1. 先將新聞發布時間設為基準
2. 將文章進行斷句
3. 在句子中尋找時間標籤，包括：今、昨、年分、月份、日期等等。
4. 若句子中有出現時間標籤，則將該時間與句子配對。
5. 若句子中出現超過一個時間標籤，則以兩個時間標籤的最後一個逗號or頓號，將句子進行區隔。
>  王嫌在<font color=blue>23日</font>犯下罪刑，並且將凶器棄置台中某廢棄建築<font color=red>【，】</font>並在<font color=blue>25日</font>搭乘高鐵前往高雄。
7. 依據各種時間格式需要，進行換算成為標準時間。例如：西元民國換算、中文數字換算、相對時間(去年、上個月、昨日...)換算等等。
8. 將時間與對應句子配對存成Dataframe

#### 以鄭捷北捷隨機殺人事件為例，部分結果如下：
| Time          | Event                                                                                                                                                            |
| ------------- |:---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 2014年5月21日 | 台北捷運板南線在2014年5月21日，歷經1場前所未有的捷運大屠殺慘案。                                                                                                 |
| 2016年4月22日 | 2016年4月22日，最高院三審維持原判定讞                                                                                                                            |
| 2016年5月10日 | 此名孤狼殺手，最後被法院以最強硬的制裁手段「死刑」處決，並在2016年5月10日的晚上8點47分執行，以3發子彈將鄭捷送上黃泉之路，也終於替4名遭他殺害的無辜捷客伸張正義。 |
| 2014年4月     | 2014年4月間，鄭捷在臉書上寫著「要作大事」，發表2篇透露異常訊息的文章                                                                                             |
| 2019年7月3日  | 台鐵自強號昨日晚間發生刺警案，大眾運輸安全問再度引發民眾關心。                                                                                                   |
| 2022年8月26日 | 26日張雅琴在聞節目中，正式向廢死聯盟發出重大挑戰，質疑該聯盟背後藏鏡人是誰及資金來源，呼籲聯盟公開表態未來不會援助殺警案凶嫌林信吾免死。                         |
#### 尚未解決問題
1. 目前尚無法讀取未加'民國'二字的2位數年分
2. 有些非日期容易被讀取進來 Ex:3號出口、釋字第17號
3. 若是句中重複出現時間標籤，會導致一段句子被重複讀取多次時間，變得非常破碎
4. 目前僅能擷取時間點，時間範圍則無法辨識。例如：今年三月到五月間
5. '隔年'、'同年'等詞尚未納入考量，待日後修正更新
## 挑選重要事件時間點
在萃取出(time, event) pair之後，我們要從這些事件中選出重要事件時間點來作時間軸的呈現，目前正在嘗試的方法有以下兩種
### 1. Anomaly Detector
我們會將每個時間點對應的事件數量(意即被不同新聞所提及的次數)化為時間序列資料，並在這些時間序列中找出事件特別多的作為重要的時間點，而我們採用 [Azure Univariate Anomaly Detector](https://docs.microsoft.com/zh-tw/azure/cognitive-services/anomaly-detector/overview-univariate) 作為主要的工具，在設定好指定的sensitivity後，模型就會找出異常的幾個時間點，範例如下:

![UVAD_sample](https://i.imgur.com/ZzeOwUO.png)

我們再將被挑出的時間點發生的事件及新聞做後續處理。

此模型背後的架構為SR-CNN，如下

![UVAD Model Architecture](https://i.imgur.com/QYo6o3P.png)

Paper - [Time-Series Anomaly Detection Service at Microsof](https://arxiv.org/pdf/1906.03821.pdf)
此 Model 用 Spectral Residual 來做 feature transformation 原先被應用在放大圖片中視覺上較為強烈及突出的區域例如發光的車燈，而應用到時間序列資料也是希望加強異常值，使其更容易被辨認出來。

目前已經完成不同功能的整合，可以直接從整理過後之資料偵測異常值，畫出圖表並將異常時間點回傳，如下
![](https://i.imgur.com/xbn9feo.png)
![](https://i.imgur.com/VK0ndlc.png)
![](https://i.imgur.com/EVSlUOO.png)



### 2. BerTopic
![Bertopic Architecture](https://i.imgur.com/Gw93xXW.png)

這是先前學長提供給我們的工具，主要是用於做Topic Modeling與各Topic的keyword extraction。運作的方式是先使用選定的Model做Embedding，接著使用UMAP做降維，再透過HDBSCAN做Clustering，最後在各個Cluster使用c-tfidf挑選出關鍵字。

我們希望透過這個技術來為文本做分群後再從各群挑出代表來呈現，第一個方法是透過討論熱度來判斷，而這個方法是從semantic的角度去分析。目前我們針對兩種方法都已經寫好可進行測試的程式，並準備開始使用上一階段蒐集的不同主題之文本進行測試。




