最強AI!ChatGPT 真的這麼厲害嗎?來看微軟 MVP 怎麼說

ChatGPT 是一個人工智慧聊天機器人程式,使用基於 GPT-3.5 架構的大型語言模型並透過強化學習進行訓練。

 

由 OpenAI 開發,於2022年11月推出的 ChatGPT,不但能聊天,還能寫程式、也能寫論文😮

ChatGPT 究竟到底有多厲害呢?來看看微軟的 AI 領域 MVP怎麼說!

 

本文已取得原著 大魔術熊貓工程師 同意轉載於逢甲大學人工智慧研究中心,未經同意者請勿任意轉載!

 

文/ Ko Ko

過年期間回南部老家,被許多親戚朋友問說:身為微軟的 AI 領域最有價值專家,你怎麼看 ChatGPT 呢?

被問了很多類似的問題,很多討論很多反饋,於是整理成這篇文章來闡述我目前的看法。

1. 最常被問 ChatGPT 真的像新聞說的這麼厲害嗎?

🅰️:ChatGPT 絕對是個 Game Changer,但我一部份同意卷積神經網路之父 Le Cun 的看法,ChatGPT 並不是特別創新(原文: ChatGPT is not particularly innovative)。

這是真的,ChatGPT 在 AI 的技術上並沒有特別大的突破。Open AI 在 ChatGPT 所採用的技術,很大部分是多年前就發表的 transformer 的架構上,再加上一些手法包含也是已經出來很久的 reinforcement learning 等,整體看下來確實是沒有特別大的技術面突破。

但是 ChatGPT 絕對是個 Game Changer。用當年哀鳳剛推出時來舉例,那時候大家都在噴說:觸控螢幕不是新東西、手機不是新東西、手機上網也不是新東西、隨身聽音樂不是新東西、手機有個人助理的功能更加不是新東西(黑莓機早就有了!)。做出哀鳳確實沒有太多突出的技術突破,但是哀鳳最厲害的地方就是把這些所有的技術都整合得很好,好到無法忽視,後來成為蘋果最成功的產品之一,連我寫 Android app 出身的都改用哀鳳了。

ChatGPT 就像哀鳳一樣,但是把許多現有的 AI 技術都整合與應用得非常好,好到讓全世界的驚豔,甚至恐慌。即使它真的沒太多技術突破,我很看好也很期待 ChatGPT 下一步的發展。

 

2. 會不會有些工作就被 AI 淘汰掉了?

🅰️:絕對會,以後絕對會有很多工作被 AI 淘汰掉。這部分可以去參考李開復的論點,他有畫幾張象限圖,可以說明得非常清楚。

基本上會被淘汰掉的工作性質,就是弱社交,以及其他屬性如機械化操作、缺乏創意缺乏決策等。

 

3. ChatGPT 可以拿來寫程式,那軟體工程師是不是準備失業了?

🅰️:是的,一定會有一大部分技能低下的軟體工程師會被淘汰,但是善用 ChatGPT 的工程師或團隊會有更多的產出。

舉個例子,敏捷開發在談組織團隊那部份,有提到團隊成員最好有個 generalizing specialist,也就是具備多種職務技能所需之專業的工程師。這類成員可以執行多種任務,以減少人員切換時的風險,或是工作負載的瓶頸等。

這類人才通常稱為梳型(Comb-shaped)人才,和 T 型與 𝝅 型人才不一樣,梳子是有更多專精的技能。然而現實生活,你很難找到具備多種職務技能所需之專業的工程師。

但是透過 ChatGPT 就不一樣了。例如說甲工程師專精後端,但對於容器技術只有一點點熟悉,甲工程師就可以透過 ChatGPT 就有機會幫團隊好好寫好一個 dockerfile 了。甲工程師有多個不是那麼專精的技能,透過 ChatGPT 就可以把多個不是那麼專精技能,變得堪用,甚至甲工程師也可以透過和 ChatGPT 與交叉查找資料(因為 ChatGPT 還是會出錯,還是建議不熟的專業要再核實過)的過程中,好好學習容器技術,讓自己更容易成為梳形人才。

所以懂得好好利用 ChatGPT 的工程師、和不懂得利用的工程師,差距會愈來愈遠。對於團隊來說,也能更快培養技能更多面向的工程師,前提是好好和 ChatGPT 交互與學習。就像「深度工作力」這本書第一章所說的:能與智慧機器一起工作並發揮創造力的人,在這個時代會特別有優勢。

 

4. 那麼在 ChatGPT 的時代該做什麼準備呢?

🅰️:去讀我寫的系列文 。

https://ithelp.ithome.com.tw/users/20120030/ironman/5515

 .編按:2022 iThome 鐵人賽 變形金剛與抱臉怪—NLP 應用開發之實戰

這系列文主要在講當代自然語言處理的範疇、原理和技術,並使用了一個現在全球最主流的框架:hugging face。同時也是繁體中文圈第一個很完整討論 hugging face 的系列文。

很重要的一點是,ChatGPT 是通用型的 AI ,還不是特用型的。例如說你問它國泰銀行的好市多卡該怎麼辦,它沒有針對國泰銀行的信用卡資料做學習,它不知道。

目前 Open AI 還沒有開放給大家做 transfer learning。一旦可以用 ChatGPT 做 transfer learning 後,就可以很容易來做特用型的 AI 了。大家一定都對於各大金融業目前推出的客服 Chatbot 感到很難用,都想要直接聯絡真人客服。因為這類 Chatbot 的大部份還是基於 intent 和 entity 的技術來做的,這種技術要做到非常的細緻是很不容易的。可是如果可以用 ChatGPT 做 transfer learning 的話,客服 Chatbot 就有可能做到跟 ChatGPT 差不多好。

所以先去讀我的系列文,了解 transfer learning 是怎麼做的,以及其他自然語言處理的知識吧!

 

5. 一般人怎麼用 ChatGPT?

🅰️

朋友 A 快要論文口試了,用 ChatGPT 來做口試的攻防練習吧!

朋友 B 快要生小孩了很焦慮,跟 ChatGPT 聊聊天吧!

朋友 C 這段程式不會寫,叫 ChatGPT 幫忙寫程式吧!

朋友 D 忘記冰與火之歌的劇情了,用 ChatGPT 來幫忙回憶吧!

 

6. 那關於 AI 畫圖呢?

🅰️:這個我們下期特別寫一篇來跟大家講解。

 

結論就是,一起擁抱 ChatGPT 吧!用它來學習、創造、工作,以及做更多更多的事。🥰🥰🥰

P.S. 本文真的是我自己寫的,不是用 ChatGPT 產出的。

 

Text Summarization with Pretrained Encoders:如何將 BERT 應用在 Text Summarization Task 上

Abstract

不管要解任何問題,從 BERTELMoGPT 等等,這些大家琅琅上口的各種預訓練模型開始進行,在 NLP 領域基本已經變成起手式。筆者今天要介紹的論文 Text Summarization with Pretrained Encoders 也不例外,論文分析如何有效地將 BERT 應用在 text summarization task 上,以及預訓練模型對 text summarization task 的影響,並且提出一個可以做 extractive 和 abstractive models 的通用框架。

論文的 contribution 為:

  1. 分析 document encoding 對於 summarization task 的重要性
  2. 提出如何有效地應用預訓練模型在不管是 extractive 或 abstractive 下的 summarization task

接下來,筆者將先快速介紹跟 text summarization task 相關的各種名詞,幫助不熟悉此領域的讀者了解讀懂論文需要的知識,以防鴨子聽雷的狀況,之後再進入正題,熟悉的讀者則可直接跳往正題閱讀。

Background

BERT

BERT 這個由 Google 在 2019 所提出的模型相信大家都不陌生,在提出後就刷了各種任務的榜,成了 NLP 領域無人不知無人不曉的模型。論文中對 BERT 的輸入進行了修改,讓其更好的對應 summarization task 的特性,為了對比,筆者先複習一下原版的 BERT 的輸入。

圖(1)Architecture of the original BERT model

一開始要輸入的 document 會經過處理加上兩種特殊符號[CLS]與[SEP]。[CLS]插在整個 document 的頭,代表整個 document 的開始,[SEP]插在 document 中每個 sentence 的尾,用來區分不同的 sentence。經過處理後,document 表示成 Input \, document = [w_1, w_2, \dots , w_n]w_i 代表 document 裡的第 i 個 token。在 BERT 裡,每個 token w_i 總共會有三種 embedding,token embeddings 代表 token 的意思,segmentation embeddings 代表 token 屬於哪個句子,position embeddings 代表 token 在 sentence 中的位置,將這三種 embedding 相加起來就變成了 BERT 的輸入 X = [x_1, x_2, \dots , x_n],之後丟進由幾層 Transformer Layers 疊起來組成的 Encoder:

\widetilde{h}^l = LN(h^{l-1} + MHAtt(h^{l-1}))
h^l = LN(\widetilde{h}^l+ FFN(\widetilde{h}^l))

h 是 hidden states,h^0 = X;LN 是 Layer normalization;MHAtt 是 multi-head attention;l 是疊幾層 Transformer Layers 的層數。最終 BERT 會輸出 T = [t_1, t_2, \dots , t_n],每個 t_i 是擁有語意資訊的 word embedding。

Extractive and Abstractive Summarization

在 text summarization 有兩種不同的系統,分別是 extractive 與 abstractive 兩種。

extractive summarization 為藉由在文章裡找尋重要的句子,並把找出來的句子接在一起,當作這篇文章的 summary。在模型訓練上,則是當做 sentence classification 的任務,藉由分類每個句子是否為重要句子,來得到要做為 summary 的句子。

abstractive summarization 則是將原始文章餵給模型吃,並直接吐出一段 summary 的方法,是一個 sequence to sequence 的問題。abstractive 相較 extractive 困難的點為,abstractive 需要能夠產生原本不存在於文章的詞彙或句子,並且要符合語言的規則。

Fine-tuning BERT for Summarization

在上面筆者簡單複習了 BERT 與 summarization task 的兩種方式,現在就讓我們來看看如何微調 BERT,在任務上做得更好吧。

Summarization Encoder

論文中指出,將 BERT 直接應用於 summarization,顯然是會有問題的。首先在做 summarization 上,我們通常會使用 sentence embedding 來做相關任務,但 BERT 的訓練方式 MLM(克漏字、填空),學習重點是放在 word embedding 上,而不是 sentence embedding ,另一個問題是即便 segmentation embeddings 可以區分不同的句子,在原始 BERT 中只有使用 sentence pair 進行訓練,就是兩個句子組合在一起,在 summarization 上,則通常需要使用大於兩個的多句子接在一起當作輸入。

鑒於上面提到的問題,論文修改了原始 BERT 的輸入方式,讓 BERT 可以更好的處理 summarization,並提出針對 summarization task 的 BERTSUM

圖(2)Architecture of the BERTSUM

在 BERTSUM 中,document 裡的每一段 sentence 前面都會額外插入一個[CLS]符號,這裡這麼做有兩個目的,一個是為了凸顯個別句子(individual sentences),另一個是,作者會將這些[CLS]符號的輸出當作每段句子的 sentence embedding,用於後續的預測任務。segmentation embeddings 也被修改為 interval segment embeddings,用於更好的區分多句子,規則是 sent_i 會根據它是奇數句或偶數句來決定是 E_AE_B。舉個例子,一個 document 包含 [sent_1, sent_2, sent_3, sent_4, sent_5],那麼這個 document 的 segment embeddings 為 [E_A, E_B, E_A, E_B, E_A]。經過這樣的設計,模型就能學習到不管是句子表示,相鄰的句子,或是整個 document 的意思。

論文中分別提出如何將 BERTSUM 應用於 Extractive 和 Abstractive Summarization 上,接下來就讓我們來一個一個看看是怎麼做的。

BERTSUMEXT:BERTSUM of Extractive Summarization

在 background 中,筆者介紹過 Extractive Summarization 其實就是對每個句子做二元分類,分類是否要拿來作 summary,所以我們要做的就是把每段句子的 sentence embedding 取出來並丟進分類器進行預測。論文中介紹了在 BERTSUM 上,再加入了幾層 Transformer layers 來做 Extractive Summarization 的模型,並命名為 BERTSUMEXT。整個模型構造很簡單,以下開始介紹:

在 BERTSUM 中,剛剛筆者說過每段句子的 sentence embedding 由[CLS]符號的輸出而來。因此,我們可以將 BERTSUM 的輸入看做是很多個句子,d 代表一個 document 包含句子 [sent_1, sent_2, \dots ,sent_m]sent_i 是在 document 裡的第 i 個句子,第 i 個[CLS]符號的輸出寫作 vector t_i ,是 sent_i 的 sentence embedding。通過 BERTSUM 我們有了每個句子的 sentence embedding,接下來就是將它們丟進額外加入的 l 層 Transformer layers,獲取 document-level 的特徵:

\widetilde{h}^l = LN(h^{l-1} + MHAtt(h^{l-1}))
h^l = LN(\widetilde{h}^l+ FFN(\widetilde{h}^l))

h 是 hidden states,h^0 = PosEmb(T)T 代表 BERTSUM 輸出的 sentence embeddings。

模型的最後就是一個簡單的 sigmoid classifier:

\hat{y}_i = \sigma(W_0h_i^L+b_o)

h^L_i 就是 Transformer第 Lsent_i 的輸出。

BERTSUMABS、BERTSUMEXTABS:BERTSUM of Abstractive Summarization

在 Abstractive Summarization 中,這篇論文使用的模型是普通的 encoder-decoder 架構。encoder 是 pretrained 過的 BERTSUM,decoder 則是隨機初始化的 6 層 Transformer layers。這裡有個小重點,encoder 與 decoder 必須使用不同的 optimizer 來訓練,原因是,如果直接一起訓練的話,當 decoder 還在 underfitting 時,經過 pre-trained 的 encoder 可能已經 overfitting 了。因此,訓練這個網路時,encoder 會使用較小的 learning rate,decoder 則使用較大的 learning rate,讓整個訓練更穩定。這種架構與訓練方式的網路,論文稱為 BERTSUMABS

論文中也同時提出一個兩階段式 fine-tune 方法,稱為 BERTSUMEXTABS。根據先前的經驗(Gehrmann et al., 2018; Li et al., 2018),先做 extractive summarization 可以提升模型在 abstractive summarization task 的表現,所以 BERTSUMEXTABS 會先在 extractive summarization task 上 fine-tuned encoder ,然後再在 abstractive summarization task 上 fine-tuned 第二次。這樣訓練出來的模型稱為 BERTSUMEXTABS

Result

表(1)資料集 summary,最後一欄 percent of novel bi-grams in gold summary,代表答案(gold summary)是否不曾出現在原文中,數字越高代表越少重複。

論文總共實驗了三種不同的資料集,它們的 summary 風格各不相同,可能是文章的重點摘要、一句總結,或由原文剪貼而成,這樣我們就可以評估模型在不同 summary 形式下的表現。

表(2)ROUGE F1 在 CNN/DailyMail test set 的表現 (R1 and R2 are shorthands for unigram and bigram overlap; RL is the longest common subsequence)

表 (1)第一行的 ORACLE 是 ex