ChatGPT 在臨床以及研究的應用

林協霆🦎The Lizard
Research On My Way
Published in
19 min readOct 28, 2023

黃院長、各位師長、各位同仁,大家早安!我是Fellow林協霆。今天,我很高興有機會來分享ChatGPT在臨床與研究領域的應用。

我的演講將主要分成幾個部分:首先,我會從介紹ChatGPT是什麼開始。接著,我會分享一些目前研究中使用ChatGPT的成果。然後,我們將簡單探討ChatGPT的「prompting engineering」,或者白話地說,就是如何有效地與它互動。最後,我將討論如何將這些技巧應用於研究。

這篇演講的逐字稿源自五月份的全院演講,影片連結如下:YouTube Link

背景

簡單來說,如果你還沒有聽過ChatGPT,它其實是一個聊天機器人。你只需要提出一個問題,它就會回答你。因此,問對問題和評估回答的準確性是非常重要的,這也是我們需要深入瞭解ChatGPT的原因。

在深入瞭解之前,我們先建立一些基礎概念。首先是NLP(自然語言處理),接著是大型語言模型(LLM),以及最後的Transformer架構。我將依照這個順序逐一介紹。

在AI的世界中,我們有機器學習(Machine Learning)和深度學習(Deep Learning)等多種方法。以機器學習為例,其實就像是我訓練我的女兒分辨狗和貓一樣:透過大量的圖片和反覆的練習,她能學會辨識新出現的狗或貓照片。

深度學習則使用了類神經網路的方式,透過強調或抑制圖片中的某些特徵來進行辨識。例如,如果看到一隻動物有中小體型和肉球,但沒有粗糙的皮膚,我們就會認為它可能是一隻貓。

NLP則是使用機器學習和深度學習的技術來處理「自然語言」,也就是人類的語言。這包括了所有由人類文明歷史所產生的語言,無論是文言文、台語或各種方言。

相對於自然語言,我們也有「人造語言」(Constructive Language)。最常見的例子就是程式語言,這是一種專為人機溝通而設計的語言。

如果大家有使用文法校正軟體或搜尋引擎,你們可能已經接觸過自然語言處理的應用。例如,當你在Word裡打錯字時,它會用底線提示你;或是在Google搜尋時,它會提供搜尋建議。這些都是自然語言處理的一部分。

相對於自然語言,我們也有所謂的「人造語言」,也就是 Constructive Language。最常見和簡單的例子便是程式語言。不過,程式語言不一定非得是英文,事實上,有人甚至用文言文來寫程式。例如,「吾有一數,曰三;明知曰甲,唯是甲」,這實際上是一段用文言文寫成的JavaScript程式碼。

除了用人類能理解的文字之外,還有專為機器設計的語言,這種語言通常是由各種符號組成的。

所謂的「人造語言」,其實是為了特定目的而創造的語言,主要是用於人類與機器之間的溝通。然而,今天我們主要想討論的是「自然語言」,也就是我們日常使用的語言。事實上,讓機器能理解人類語言的技術早在很久以前就已經出現在我們的生活中。

例如,如果你有使用文法校正軟體,在打病歷時如果拼錯了某個字,軟體會用底線提醒你。或者在使用Word時,它會告訴你這個字可能拼錯了。這些都是自然語言處理的一部分。

如果你有使用Google,當你輸入「台北市最」時,它會自動給你一些文字建議,比如「最貴的豪宅」等等。這部分也是自然語言處理的範疇,和我們即將要討論的Chat GPT有著相當接近的原理。實際上,這都是基於一個非常複雜的「文字接龍」遊戲。

什麼是大型語言模型?

那麼,什麼是語言模型呢?我們稍後會進行詳細介紹。首先,讓我們來談談「大型」到底有多大。具體來說,以GPT第一代為例,它的大小大概是五個Gigabyte,差不多等於一部電影的大小。然而,到了最近的GPT-4,它的大小已經增長到了3000多個Gigabyte。我曾聽過一個形象的比喻,就是如果把它與哈利波特的一到十集相比,那麼你需要看這些書三十萬次才能達到同樣的數據量。

接下來,什麼是「模型」呢?其實,這個詞是資料科學家為了讓自己聽起來更專業而創造出來的。簡單地說,模型就像我們在臨床上會用到的「anionic gap」,這個概念其實就是用「鈉減氯減bicarbonate」來描述的。如果我們用小學數學中的函數來表示,就是將三個數字輸入到一個函數\( f() \)中,然後得到一個「anionic gap」的結果。
用這種數學表示方式來描述某個現象或規則,就可以稱之為一個模型。

換句話說,用更通俗的語言來解釋,模型就是「種瓜得瓜、種豆得豆」的道理。

在這個模型中,我們會看到形如 ( ax + by + r ) 的數學表達式,其中 ( a )、( b ) 和 ( r ) 就是所謂的「參數」。當我們聽到新聞報導稱某個語言模型有好幾億個參數時,這意味著模型中包含大量這種 ( a )、( b )、( r ) 的參數。這些參數能夠根據用戶的輸入(input)生成一個輸出(output)。那麼,這個「輸入」又是如何定義的呢?

在處理這些問題時,我們會用到線性代數,特別是一個叫做「特徵向量(feature vector)」的概念。簡單來說,特徵向量就是將自然語言轉換成電腦能理解的數學形式。

接下來,我們來看看 Chat GPT 的基本運作原理。首先,GPT 這個縮寫分別代表了什麼?「G」是「generative」(生成式)的意思。這是因為並非所有的 AI 都是生成式的;有些是用來做判斷,比如給定一堆資料後,它會回答「是」或「否」。然而,Chat GPT 與這些不同。給它一段敘述後,它會自由發揮,生成多種不同的回應,因此它是一個生成式的 AI 模型。

最後,「pre-trained(預訓練)」這個詞是什麼意思?它意味著我們接觸到的 Chat GPT 模型的所有參數都已經固定好了。換句話說,當我們給它輸入時,它不會改變自己的參數配置。這些參數可能幾個月前就已經在加州矽谷的某台電腦上調整好了。因此,這種模型被稱為「預訓練」模型。

首先,「Transformer」是一個相對抽象的概念。這個模型是由 Google 提出的,主要是透過平行處理文字的方式來找出最適合的數學公式作為答案。簡單來說,當我們將「GPT」這三個字母連在一起,意味著這是一個能夠生成多種內容、已經預先訓練過,並且能夠平行處理大量文字的語言模型。這就是「GPT」這三個英文字母所代表的核心意義。

從工作流程來看,當使用者給予 GPT 一個指令或提示(prompt)後,模型首先會進行「分詞(Tokenization)」,也就是將文字拆解成最小的單位,稱為「Token」。接著,這些 Token 會被轉換成「向量表示(Vector Representation)」,或者說是特徵向量(Feature Vector),以便讓電腦能夠進行數學運算。最後,這些數據會經過「Transformer」進行處理。

至於 Transformer 在訓練過程中,它會使用到我們之前提到的類神經網路,也就是深度學習(Deep Learning)的部分。這一切都是基於大量來自Wikipedia、Pubmed、各種新聞報章媒體等來源的數據。在這個過程中,人類也會參與其中,可能會對某些生成的答案進行評分或校正。

實際上,Chat GPT 本身具有相當大的創造性和自由發揮的能力。但人類會參與其中,進行如「這個回答不妥當」或「這個答案比另一個更好」這樣的評價,以參與模型的訓練。

具體來說Chat GPT 的運作方式

大概是這樣:當我問它「蜥蜴是一種冒號」,模型會根據過去的學習經驗告訴我,接下來最可能出現的字應該是「爬蟲類」。然而,這不意味著只能是「爬蟲類」,它也可能會說「蜥蜴是一種生物」或者「蜥蜴是恐龍的祖先」等等,表示模型具有某種隨機性。

如果我接受了「爬」這個字並加入到原先的句子中,再把這整個新句子輸入給 Chat GPT,例如「蜥蜴是一種爬什麼」,那麼模型會重新調整其機率分佈。在這個情境下,大家可以想像,接下來最可能出現的字就是「蟲」。

但這並不是絕對的。根據上下文和其他可能性,模型有時也會給出其他的回答。為了讓模型更精確,人類會參與評分,這在專業術語中被稱為「標記(Labeling)」。經過這樣的過程,GPT 會把這些數據用來訓練一個「老師模型」,這個「老師」會評分給 Chat GPT,以此不斷提升模型的回答品質這樣的設計和運作原理,都是 Chat GPT 在訓練過程中所採用的。

Trajectory

我們的文字可以從最小的單位「字」開始,然後這些字會組成「詞」,進一步形成「片語」,最終變為「句子」。舉例來說,如果我今天輸入一個字「葡」,模型會自動搜尋與之相近的字來形成詞,比如「葡萄」。一旦有了「葡萄」這個詞,我就會進入到另一個名詞密集的「特徵空間(Feature Space)」。

在這個特徵空間中,模型會嘗試找出與「葡萄」最相近的下一個詞,如「可剝皮」。這時,我就會進入到一個稱為「短句」的新領域。在這個新領域裡,模型會尋找與「葡萄可剝皮」這個短句最相近的句子,例如「因為皮上有農藥」。

這樣一來,我的句子就會逐漸變長,就像是在不同的特徵空間中穿越一樣。整個過程就像是沿著一條軌跡在不同的空間裡走來走去,這正是其背後數學運作的方式。

語言模型的幻覺🦜

有時我們會要求 Chat GPT 說出一段話,但它卻會給出一些不太相關或無意義的回應。比如,如果我問它「請問,台北市有蜥蜴蛋糕店在哪裡?」,它可能會回答:「很抱歉,作為一個人工智能模型,我無法提供即時的地點資訊。」值得注意的是,這種回答實際上是人類教導的結果。如果沒有人類介入,原始的 Chat GPT 可能會隨意地說「蜥蜴蛋糕店在台北市的某個地方」。

這個現象其實是人類參與訓練過程的結果。人類會教導 Chat GPT,當有人問及特定地點或個人資訊時,應該如何正確回答。如果沒有人類的指導,它可能會給出一個隨意的名字,比如「你的名字叫做王大明」。

重點是,Chat GPT 基本上只是在預測下一個字或詞應該是什麼,而不是在找出正確的答案。因此,我們需要明白 Chat GPT 的限制。例如,如果我繼續問「請問如何前往?」,它可能會隨意生成一個地址,像是「位於內湖區瑞光路某號」,這完全可能是不真實的。

這種行為其實是基於它過去的訓練資料。當有人問及地點時,它會根據其資料庫嘗試生成一個看似合理的地址。很多人在初次使用 Chat GPT 時會犯一個錯誤,就是請它搜尋文獻,卻不了解它的運作邏輯。最終,他們可能只會得到一些看似正確,但實際上不準確的文獻引用。

ChatGPT在臨床上的應用

今年四月,NEJM 發表了一篇名為《Benefit Limits and Risks of GPT-4》的文章。文章對剛推出的 GPT-4 進行了初步評估,並指出其在臨床醫學中可能有多種應用。這些應用主要包括文檔記錄、決策支持和醫患溝通。文章中第一個例子是,醫生在與病人的溝通後,使用 GPT-4 來整理病歷。第二個例子則是 GPT-4 在美國醫師國考(USMLE)的表現。

該考試通常包含病歷和實驗室檢查結果,然後問考生最可能的診斷是什麼。使用 GPT-3.5 進行的初步研究發現,對於開放式問題,正確率只有約 50%,但在多選題中表現較好,正確率接近及格線。

在這方面,我有個觀察。韓國有研究使用 AI 來解答寄生蟲學問題,結果顯示 AI 表現一般,大約能答對九成的問題。我認為這是因為 AI 難以進行事實查核。它只能從頻繁出現的字詞中做出推測,例如寄生蟲的中間宿主和終宿主。

但到了 GPT-4,情況有所改善。特別是在給予一些前置提示(也稱為 “shot”)後,其正確率可提升到七、八成。這些提示就像是告訴 GPT-4,「你現在是一個醫學生,正在準備回答 USMLE 的問題」。有了這樣的前置設定,GPT-4 在多選題中的表現可以達到八九成的正確率。

總的來說,雖然 AI 在需要明確事實查核的場合表現不佳,但在給定適當的上下文和提示後,其表現會有顯著提升。

除了用來答美國的USMLE考題外,GPT-4也被用於中國大陸和台灣的醫師國考。在中國大陸,其表現大約為75%的正確率;在台灣則是84%。我猜測這可能是因為中國大陸有些醫學專有名詞經過本地化,例如「B型肝炎」被稱為「乙型肝炎」。由於這些專有名詞在訓練數據中較少,因此在中國的表現較差。

另外,四月份在JAMA上發表的一篇研究探討了GPT-4在Reddit的一個子版塊AskDocs中對臨床問題的回答。研究比較了醫師(標記為藍色)和GPT-4(標記為灰色)的回答,並讓使用者對這些回答進行評分。結果顯示,在「質量」和「同理心」方面,GPT-4的表現都優於醫師。

再有,一篇研究比較了GPT-4和兩名醫師在鑑別診斷方面的表現。研究中,兩名醫師各回答了30個問題,總計60個,而GPT-4回答了30個問題。問題主要涉及一些常見症狀,如「腹痛」、「發燒」和「胸痛」。GPT-4在30個問題中有28個的最終診斷出現在前十個鑑別診斷中,而在前五名中有25個。相比之下,人類醫師的表現更好,59個問題都出現在前五名,56個問題的診斷位於第一名。
因此,對於如何與GPT-4互動,包括如何「引導」它來獲得更準確的答案,將是接下來的重要議題。

Prompt Engineering

我們之前提到了「Shot」這個概念,這實際上是一種引導技巧。如果你直接對ChatGPT下達指令,它的回應可能不會完全符合你的期望。在這種情況下,不妨先給他一些提示或暗示,這就是所謂的「Shot」。

這些想法源於一門名為「ChatGPT Prompt Engineering for Developers」的課程,由官方與Deep Learning AI教育網站合作提供。其核心原則有兩個:第一,清晰明了地表達你的需求;第二,將任務細分成小步驟。

例如,你可以要求ChatGPT按照特定格式輸出內容,無論是表格、段落還是簡單的幾個字。這樣做有助於限制他的回應範圍,避免過度或不相關的輸出。如果某些資訊在文本中不存在,像是「腫瘤大小」,你可以明確告訴他「如果不知道,就說不知道」,以避免他編造不實的答案。

這種全方位的提示技巧稱為「Full Shot Prompting」。例如,如果你希望他摘要一段特定的文本,你可以使用這樣的指令:「將用三個反引號框起來的文本摘要為一句話」。這就是一個具體的「Shot」示例。

總之,明確地描述你的需求並按照特定格式給出指令,能讓ChatGPT更精確地完成任務。事實上,網上已有很多相關的資源和指南。如果你有興趣深入了解如何更有效地使用ChatGPT,不妨去查找一下。

Practice

接下來我們談一談這些工具和技術在研究工作中能帶來哪些便利。首先,取得資料。假如你用過Pubmed,你可能知道它有個「高級搜尋」功能,這讓你可以透過AND和OR邏輯來篩選資料。但學習這些搜尋語法可能需要一段時間。使用Chat GPT,你只需用自然語言指令,如「創建一個Pubmed高級搜尋查詢,不需要解釋,包括…」,然後給個例子,Chat GPT就會自動生成你需要的查詢語句。

其次,若你打算寫一篇系統性評論,Prisma指南可能會派上用場。你只需告訴Chat GPT「按照Prisma指南,用這些主題創建一個搜尋流程」,它會像專業的指導教師一樣,幫你一步一步設計出完整的搜尋流程。

此外,Chat GPT還有其他實用功能,比如摘要生成。你只需輸入「TLDR」,它會自動為你提供文章或段落的摘要。

推薦幾個有用的線上工具:

- 「ChatGPT sidebar」是一個瀏覽器擴展,提供即時查詢功能。
- 「elicit.com」也運用了GBT技術,能自動生成文章摘要。
- 「perplexity.ai」則提供簡單的事實查核和問答介面。
- 「typeset.io」可以讓你上傳PDF文件並互動式地查詢其內容。

進階用法

除了寫作之外,我們也可以進行程式設計教學,例如學習R語言,以協助創建長條圖等功能。這種方法常用於處理語言描述的資料,如將不同日期格式統一,或使用正則表達式進行批量替換,避免使用複雜的程式語言。

我們能夠實現更高級的操作,如分析大量乳癌病理報告。報告中可能會提到ER、PR、HER2、POSITIVE、NEGATIVE等術語,如何快速地將這些資訊簡短摘要?我會使用一個提示(prompt),例如「decide the following report」,然後將HER2、PR、STATE等資訊放在代碼框中,僅顯示結果而不加解釋。我會請求用程式碼輸出結果,並避免多餘的解釋。
接著,我會將一大段文字輸入程式,得到的結果通常是「negative」或「positive」。為了進一步簡化,我會在程式碼中添加額外的行,將陰性結果輸出為0,陽性結果輸出為1。最終,我得到的結果可能是「001」,這樣就可以簡化後續的數據分析工作。

ChatGPT API

那麼問題來了,是否需要將每篇報告都貼到ChatGPT中進行處理?如果是這樣,處理速度可能並不比自己閱讀更快。因此,ChatGPT提供了一個API,這允許我們用程式碼的方式快速處理這些數據。只需獲得API密鑰,定義一個名為「ask」的函數,設定基本參數後,系統會返回一個結果。

有了這個API,我可以寫一個迴圈使用偽代碼(pseudo code)來表示。對於每一行數據的第一列,我可以將其值傳送到這個函數中,然後得到返回的結果。這樣,我可以處理多份報告,最終得到一個包含如「001、110」這種數據的表格。

這對目前許多尚未實現的研究會非常有幫助。如陳醫師所提,我們可以用它來處理大量報告和敘述性文字,並從中提取有價值的資料。下一步是分享一些我個人的反思。

大家可能會問,有了ChatGPT,是否就不需要讀書或做瑣碎的工作了?我認為,ChatGPT最大的幫助是在我們已經對相關背景知識有充分理解的情況下,幫助我們簡化複雜的分析和應用流程。比如,我們不再需要做大量的「複製和粘貼」,或者閱讀大量報告僅為了得到一些簡單的結果。

所以,ChatGPT的主要作用是簡化這些流程,而不是進行事實查核或真正的理解。

那麼,如何進一步的研究呢?一個重要的問題是ChatGPT(注意名稱的正確拼寫)所引發的隱私問題。當我們使用這種服務時,實際上是將資料傳送到遠在太平洋另一端的矽谷的某個資料庫進行運算。這自然引發了隱私問題。例如,Samsung公司今年五月就發現有員工使用ChatGPT,導致一些內部關鍵資料的外洩。

目前的一個可能解決方案是,除了ChatGPT外,還有其他開源的大型語言模型,比如Facebook推出LLAMA2等。這些模型可以在自己的電腦上運行,從而避免隱私問題。因此,對於臨床應用來說,保護病人隱私是非常重要的。

最理想的狀況是,每個醫院都有自己的語言模型,並在自己的系統內進行資料處理,而不是依賴於像ChatGPT這樣的外部服務。另一個觀點是,儘管AI如ChatGPT在某些方面表現出色,但它們無法達到人類的智慧水平。它們更像是一個高級的文字接龍遊戲,不能真正理解或感受。

這點可以通過電影《心靈捕手》來比喻。主角可能非常聰明,能夠引用大量的文學作品,但他在情商方面表現不佳,無法真正理解和感受他人。這與目前的AI狀況相似,它們雖然能夠生成流暢的文字,但無法替代人類在醫療等領域建立的信任和真實感情。

總結而言,ChatGPT在臨床醫療方面具有不小的潛力。首先,它能夠改善病人的就醫體驗,減少繁瑣的表格填寫,並能夠將病人的描述自動轉化為醫療報告。這不僅提升了病人的就醫體驗,也優化了醫療流程。其次,根據前文所述的研究進展,ChatGPT有可能加速醫療研究的節奏,進而對人類整體健康作出貢獻。

除此之外,這樣的自動化流程也能夠降低運營成本。醫療人員可以節省大量用於填寫表格和處理文字的時間和精力,從而專注於提供更高品質的醫療服務。

因此,ChatGPT不僅有助於簡化繁瑣的醫療流程,還可能在促進研究和提升服務品質方面發揮重要作用。然而,值得注意的是,這些優點並不能取代人類醫生與病人之間建立的信任和情感連結,這些仍然是醫療工作中不可或缺的元素。

結論

作為對先前提到的NEJM文章的結論部分進行了簡要概述。我們利用了ChatGPT,透過下達「請幫我用摘要和繁體中文的方式來做結論」這個提示,對原文章進行了精簡。

首先,ChatGPT雖然是一個能夠生成連貫文字的強大工具,但如何驗證它提供的信息的準確性是一個關鍵問題。事實查核可能需要額外的時間和成本,這也是使用ChatGPT時需要考慮的一個方面。尤其是當它提供的信息可能含有錯誤時,我們需要評估這些錯誤是否會引發更嚴重的後果。

展望未來,我們可以預見到更多新的語言模型將會出現,它們可能會比ChatGPT更加強大,並有潛力改善目前的工作流程。然而,這些模型也可能帶來潛在的風險和挑戰。因此,我們的主要任務是理解ChatGPT及其他語言模型的極限和潛在風險。希望透過今天的分享,大家對這方面能有更深入的了解。

--

--