用 AI 實際解決工作問題!這種讓人痛苦的工作,還是讓AI來吧

更新於 發佈於 閱讀時間約 11 分鐘
raw-image

這篇來寫,嘗試用GPT4解決工作中,一個讓我渾身難受的問題。

任務說明

我要做的事情是,把word檔中表格的部分資訊擷取出來。下圖的示範表格即是一例。

raw-image

我需要存取表格中特定元素資訊,例如 Net Calorific Value,我得存下Min. 4,750這個訊息,同理可知,Total Sulfur的話,我需要記下他是 Max. 0.6。


背景 (涉及一點技術上的名詞)

先前的作法是,我用python的docx讀取word檔案,並且識別文件中可能存在的「表格」。第二步用正則表達式──如果不知道這是啥,就把它當作是一個找尋規則的方法──根據表格型態不同,擷取出目標元素的對應數值。

然而,這個方法令人痛苦......。因為這些word表格是人手去填的,規則不一。例如,可能有人會把Net Calorific Value寫在第三個列,有些人把他寫去第四列;有人的4,750有加逗號,有的沒有加(4750)。

這就導致了我所寫的規則,永遠都有例外,以至於這個工作長期停滯不前。執行上竟然花了兩周,才完成了20%的資料整理。


來點 AI !

仔細想想,應該讓AI來幫忙才對,因為AI適合在不規則中歸納訊息。怎麼做?

展示一下測試用的程式碼。

'''
1 接續前面步驟,讀取word檔並偵測出表格
2 回傳結果tables
'''
print(tables[3]) # 查看眾多tables中的第4個table,即本文的表1

這是一個二維的列表如下。

[['Item', 'Unit ', 'Limit of Range'],  
['Total Moisture (TM) \n(As received basis)', '% WT', 'Max. 28'],
['Volatile Matter (Air dried basis)\nFixed Carbon (Air dried basis)\nAsh (Air dried basis)', '% WT\n% WT\n% WT', 'Min. 22∼Max. 45\nMax. 60\nMax. 17'],
['Total Sulfur (As received basis)', '% WT', 'Max. 0.6'],
['Grindability (HGI)', '', 'Min. 45~Max. 65'],
['(As Received Basis)\nGross Calorific Value\nNet Calorific Value *', '\nkcal/kg\nkcal/kg', '\n\nMin. 4,750'],
['Nitrogen (Dry ash free basis)', '% WT', 'Max. 2.2'],
['Ash Fusion Temperature (IDT) \n(Reducing Atmosphere) ', 'oC', 'Min. 1,150'],
['CSN(Crucible Swelling Number)', '', 'Less than 2\n(0≤CSN<2)'],
['Mercury(HG)', '㎍/g', ''],
['Ash Analysis\nSiO₂\nFe₂O₃\nNa₂O\nK₂O', '\n% WT\n% WT\n% WT\n% WT', '\nMax. 70\nMax. 16\nMax. 2\nMax. 3'],
['Size Distribution\nAbove 50mm\nUnder 2mm \nUnder 0.25mm', '\n%\n%\n%', '\nMax. 5\nMax. 40\nMax. 17']
]

這個表格,就是本文表例1的完整長相,現在變成python列表。

我要讓AI理解這個列表,並且摘要出我需要的元素數值。

下面做的事情很簡單,就是把前面python 列表所有元素,全部都融合為一段文字,很長的文字。

import openai
openai.api_key = TOKEN # 輸入你的API KEY

tb_specs = tables[3] # 本文的表1
output_txt = ""

for sub_lst in tb_specs:
  for ele in sub_lst:
    output_txt += " " + ele.strip("\n")

print(output_txt)

產出如下,所有的列/欄位名稱與數值,通通都混在一起,變成一串很長的文字。

' Item Unit  Limit of Range Total Moisture (TM) \n(As received basis) % WT Max. 28 Volatile Matter (Air dried basis)\nFixed Carbon (Air dried basis)\nAsh (Air dried basis) % WT\n% WT\n% WT Min. 22∼Max. 45\nMax. 60\nMax. 17 Total Sulfur (As received basis) % WT Max. 0.6 Grindability (HGI)  Min. 45~Max. 65 (As Received Basis)\nGross Calorific Value\nNet Calorific Value * kcal/kg\nkcal/kg Min. 4,750 Nitrogen (Dry ash free basis) % WT Max. 2.2 Ash Fusion Temperature (IDT) \n(Reducing Atmosphere)   oC Min. 1,150 CSN(Crucible Swelling Number)  Less than 2\n(0≤CSN<2) Mercury(HG) ㎍/g  Ash Analysis\nSiO₂\nFe₂O₃\nNa₂O\nK₂O % WT\n% WT\n% WT\n% WT Max. 70\nMax. 16\nMax. 2\nMax. 3 Size Distribution\nAbove  50mm\nUnder  2mm \nUnder  0.25mm %\n%\n% Max. 5\nMax. 40\nMax. 17'

再來如下,把那串長字丟到ChatGPT裡面,讓他閱讀與回答。

選用模型 (model) 為GPT4。在message參數中,輸入你要他做的事情 (input),餵給他剛才那個很長很長的文字串(output_txt)。

input = "請將內容整理成表格, 並告訴我 Net Calorific Value的數值, 回傳數字(要包含Min, Max)但不要回傳出表格"
completion = openai.ChatCompletion.create(
  model="gpt-4",
  messages=[
    {"role": "system", "content": input},
    {"role": "user", "content": output_txt},
  ]
)

然後察看結果

print(completion.choices[0].message.content)

'Net Calorific Value 的數值範圍是:最小值 4,750 kcal/kg,最大值未提供。'

回應內容非常正確,Net Calorific Value的數值範圍,就是Min. 4,750,你可以回去看一下表1。

如果我想看Total Sulfur,不知道能否做到?如法炮製前面的步驟,只是換一個問題。

input = "請將內容整理成表格, 並告訴我 Total Sulfur (As received basis) 的數值, 回傳數字(要包含Min, Max, 如果有的話)但不要回傳出表格"
completion = openai.ChatCompletion.create(
model="gpt-4",
messages=[
  {"role": "system", "content": input},
  {"role": "user", "content": output_txt},
 ]
)

print(completion.choices[0].message.content)
'Total Sulfur (As received basis) 的數值為 % WT Max. 0.6。'

結果還是對的!


兩種後續嘗試

1. 我會繼續用上述方式,找尋其他更多我要的資訊,如果都能成功,我就可以減輕寫複雜程式的痛苦。

2. 嘗試下出更好的input,也就是讓GPT4直接吐給出我想要的數值。目前他的回答都是一串完整的句子,其實我不用,我比較需要這樣形式:

Net Calorific Value: Min. 4,750

這樣資料整理起來就更輕鬆。


三個心得

1. 我覺得GPT4非常強大,我們給他讀的是一串混亂的文字,他竟然能理解出哪個數字對應哪個名稱。他的理解力確實不一般,我還有其他領域的嘗試,也發現了這點──之後有機會繼續分享!

2. 問問題的能力很重要。

我是經過反覆試驗,了解到怎麼樣的問法才是合適的問法,並讓GPT明白如何回答。請看我上面程式碼,我是先叫 GPT 把輸入那串複雜文字,整理成「表格」,再讓他回傳 Net Calorific Value 的數字。如果沒有整表格這一步,他回傳任何數字都是錯的。

3. 也因此,我們注意到ChatGPT的極限:他對理解表格訊息的理解,是一個大罩門。原因我大概想了幾點,之後有機會再繼續!


關於這個讓人渾身難受的任務,現在已經看見希望的曙光了。




留言
avatar-img
留言分享你的想法!
avatar-img
Darren的沙龍
14會員
14內容數
大數據意味著什麼?數據科學背後有怎樣的mind set和技術?數據科學家又做些什麼?這些科技/技術,帶給我們什麼生活上和人文上的省思?這個專題會橫跨這些彼此相關的面向,避開生澀的專業詞彙,探索這些事情背後的樣貌。應該會是有趣的知識和想法分享﹝笑﹞
Darren的沙龍的其他內容
2024/08/31
文章主攻四大領域:機率與統計、計量經濟和量化金融分析。以機率統計為核心主幹,詳加說明其精神與應用。也會輔以其餘三個領域的介紹作為統計實例。統計學是AI / 機器學習背後的英雄,假設檢定與統計分布是其兩大特色,前者找出彼此相互關聯的變數;後者則幫助我們進行模擬和抽樣,幫助我們找尋最優解或近似真實值。
Thumbnail
2024/08/31
文章主攻四大領域:機率與統計、計量經濟和量化金融分析。以機率統計為核心主幹,詳加說明其精神與應用。也會輔以其餘三個領域的介紹作為統計實例。統計學是AI / 機器學習背後的英雄,假設檢定與統計分布是其兩大特色,前者找出彼此相互關聯的變數;後者則幫助我們進行模擬和抽樣,幫助我們找尋最優解或近似真實值。
Thumbnail
2024/07/19
本文要探討AI的任務與實戰場景。AI技術已深入生活各層面,從違約預測到都市交通管理。AI任務主要有三類:數值型資料處理、自然語言處理(NLP)和電腦影像辨識。時間序列資料和強化學習方法(如AlphaGo)也引起廣泛關注。AI演算法和方法因應不同學派和技術發展而多樣化,了解這些基礎有助選擇適合研究方向
Thumbnail
2024/07/19
本文要探討AI的任務與實戰場景。AI技術已深入生活各層面,從違約預測到都市交通管理。AI任務主要有三類:數值型資料處理、自然語言處理(NLP)和電腦影像辨識。時間序列資料和強化學習方法(如AlphaGo)也引起廣泛關注。AI演算法和方法因應不同學派和技術發展而多樣化,了解這些基礎有助選擇適合研究方向
Thumbnail
2024/07/05
本文談及資料科學的領域與分工。首先是建造一個AI的研發流程,資料收集到 AI 模型訓練的過程,AI經歷這一切流程被創造出來並產生價值;再來本文也提及在這個領域中的各種腳色、資料工程師、數據庫工程師、資料科學家和資料分析師的各種介紹。並且強調跨領域合作的重要性。
Thumbnail
2024/07/05
本文談及資料科學的領域與分工。首先是建造一個AI的研發流程,資料收集到 AI 模型訓練的過程,AI經歷這一切流程被創造出來並產生價值;再來本文也提及在這個領域中的各種腳色、資料工程師、數據庫工程師、資料科學家和資料分析師的各種介紹。並且強調跨領域合作的重要性。
Thumbnail
看更多
你可能也想看
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
題目敘述 Solving Questions With Brainpower 給定一個測驗題陣列,每個欄位都是一個pair, 分別記錄測驗題做完可以得到的分數,和需要的冷卻時間 (也就是會有一段時間不能作答接下來的題目)。 請問在最佳的答題策略下,最多可以獲得多少分數?
Thumbnail
題目敘述 Solving Questions With Brainpower 給定一個測驗題陣列,每個欄位都是一個pair, 分別記錄測驗題做完可以得到的分數,和需要的冷卻時間 (也就是會有一段時間不能作答接下來的題目)。 請問在最佳的答題策略下,最多可以獲得多少分數?
Thumbnail
題目會給定一個輸入陣列temperatures ,分別代表每一天的溫度。 請計算每一天還要再過幾天才會遇到更溫暖的日子,如果遇不到,則回填0。 請以陣列的形式返回答案。 題目的原文敘述 約束條件 Constraints: 1 <= temperatures.length <= 10^
Thumbnail
題目會給定一個輸入陣列temperatures ,分別代表每一天的溫度。 請計算每一天還要再過幾天才會遇到更溫暖的日子,如果遇不到,則回填0。 請以陣列的形式返回答案。 題目的原文敘述 約束條件 Constraints: 1 <= temperatures.length <= 10^
Thumbnail
粉絲提問需求 儲存格中這一段字串:baseccy=usd,baseccyamoun=1300,type=short} 要如何把字串中1300的數字給抓出來,其實方式蠻多的,今天來介紹3種方式 第一種剖析法: 先將資料選取出來之後利用資料剖析,因為資料的規則數字是在=之後與逗號之前,所以可以先將逗號剖
Thumbnail
粉絲提問需求 儲存格中這一段字串:baseccy=usd,baseccyamoun=1300,type=short} 要如何把字串中1300的數字給抓出來,其實方式蠻多的,今天來介紹3種方式 第一種剖析法: 先將資料選取出來之後利用資料剖析,因為資料的規則數字是在=之後與逗號之前,所以可以先將逗號剖
Thumbnail
我們介紹了字串和列表的索引和切片操作。索引使用方括號[]來選擇字串或列表中的特定元素,並可以使用正向索引(從0開始)或反向索引(從最後一個元素為-1)來訪問元素。切片使用方括號[]和冒號:來選擇字串或列表中的一段子序列,指定起始位置和結束位置(不包含),並可以使用步長來控制間隔。
Thumbnail
我們介紹了字串和列表的索引和切片操作。索引使用方括號[]來選擇字串或列表中的特定元素,並可以使用正向索引(從0開始)或反向索引(從最後一個元素為-1)來訪問元素。切片使用方括號[]和冒號:來選擇字串或列表中的一段子序列,指定起始位置和結束位置(不包含),並可以使用步長來控制間隔。
Thumbnail
這篇來寫,嘗試用GPT4解決工作中,一個讓我渾身難受的問題。 任務說明 我要做的事情是,把word檔中表格的部分資訊擷取出來。下圖的示範表格即是一例。 我需要存取表格中特定元素資訊,例如 Net Calorific Value,我得存下Min. 4,750這個訊息,同理可知,Total Sulfur
Thumbnail
這篇來寫,嘗試用GPT4解決工作中,一個讓我渾身難受的問題。 任務說明 我要做的事情是,把word檔中表格的部分資訊擷取出來。下圖的示範表格即是一例。 我需要存取表格中特定元素資訊,例如 Net Calorific Value,我得存下Min. 4,750這個訊息,同理可知,Total Sulfur
Thumbnail
這只是一篇測試功能的文章
Thumbnail
這只是一篇測試功能的文章
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News