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

更新於 2023/04/08閱讀時間約 11 分鐘
示範程式碼:作者提供
這篇來寫,嘗試用GPT4解決工作中,一個讓我渾身難受的問題。

任務說明

我要做的事情是,把word檔中表格的部分資訊擷取出來。下圖的示範表格即是一例。
表1. 真實世界中要處理的表格範例 (擷取)
我需要存取表格中特定元素資訊,例如 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
14會員
14內容數
大數據意味著什麼?數據科學背後有怎樣的mind set和技術?數據科學家又做些什麼?這些科技/技術,帶給我們什麼生活上和人文上的省思?這個專題會橫跨這些彼此相關的面向,避開生澀的專業詞彙,探索這些事情背後的樣貌。應該會是有趣的知識和想法分享﹝笑﹞
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Darren的沙龍 的其他內容
在英國與老師對嗆?! 先說個故事吧,以前在英國讀書的時候,去選修了一堂數學系的課。 那位老師嚴格要求,選修的學生必須是數學系的學生。如果不是,那學生必須說明自己擁有夠強的數學能力。 我不是數學系的學生,可我終究是吃硬柿子的人。因為我知道,若想加強數學的底子,就必須到這裡來──後來還是去上課了。 上了
這篇文放草稿太久了,放到連GPT4都生出來了。不過沒差,內容通用。 在系列文第一篇,就提到了GPT框架中有對人類語意回饋的學習機制。這機制有個專有名詞,叫強化學習 (Reinforcement Learning)。這讓機器不純粹依著既有資料模式,優化並生成預測;反而讓機器有更強的能力,去因應不同環境
現在這個充滿GPT開箱的年代,做什麼實測都感覺落伍。不過我覺得本文這兩個實測,即便不是最新穎,也算是方便好用且有益於生產力。 工作中,對我來說最困難的事情,就是快速量產。這裡寫兩個使用ChatGPT的案例,一個是寫作,一個是寫程式。後者是我的工作,我讓GPT融入我日常工作。 而下面二個實例,純展示結
ChatGPT剛推出時,我們辦公室討論紛紛,我馬上去玩了一下。當時心態很惡搞,詢問GPT什麼是蜥蜴人、女王是不是蜥蜴人 ﹝註:蜥蜴人是在都市傳說中常被提到的外星生物﹞。他的回答都說蜥蜴人只是一種虛構生物。好吧,我想這大抵符合人類的認知! 隔了幾天,我又去問GPT,什麼是蜥蜴人,他竟然告訴我,他不知道
在英國與老師對嗆?! 先說個故事吧,以前在英國讀書的時候,去選修了一堂數學系的課。 那位老師嚴格要求,選修的學生必須是數學系的學生。如果不是,那學生必須說明自己擁有夠強的數學能力。 我不是數學系的學生,可我終究是吃硬柿子的人。因為我知道,若想加強數學的底子,就必須到這裡來──後來還是去上課了。 上了
這篇文放草稿太久了,放到連GPT4都生出來了。不過沒差,內容通用。 在系列文第一篇,就提到了GPT框架中有對人類語意回饋的學習機制。這機制有個專有名詞,叫強化學習 (Reinforcement Learning)。這讓機器不純粹依著既有資料模式,優化並生成預測;反而讓機器有更強的能力,去因應不同環境
現在這個充滿GPT開箱的年代,做什麼實測都感覺落伍。不過我覺得本文這兩個實測,即便不是最新穎,也算是方便好用且有益於生產力。 工作中,對我來說最困難的事情,就是快速量產。這裡寫兩個使用ChatGPT的案例,一個是寫作,一個是寫程式。後者是我的工作,我讓GPT融入我日常工作。 而下面二個實例,純展示結
ChatGPT剛推出時,我們辦公室討論紛紛,我馬上去玩了一下。當時心態很惡搞,詢問GPT什麼是蜥蜴人、女王是不是蜥蜴人 ﹝註:蜥蜴人是在都市傳說中常被提到的外星生物﹞。他的回答都說蜥蜴人只是一種虛構生物。好吧,我想這大抵符合人類的認知! 隔了幾天,我又去問GPT,什麼是蜥蜴人,他竟然告訴我,他不知道
你可能也想看
Google News 追蹤
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
在處理數據時,最可能會遇到數據中含有None的時候,若沒有處理就進行運算就會造成程式崩潰或者報錯 數據中含有None input_list = [(42, 292), (28, 296), (999, 92), (993, 46), (219, 4), (279, 2), (None, None
Thumbnail
本文介紹了在進行資料分析時,將類別欄位轉換為數值欄位的方法,包括Label Encoding、One-Hot Encoding、Binary Encoding、Target Encoding和Frequency Encoding。每種方法的應用範例、優缺點和適用場景都有詳細說明。
Thumbnail
資料前處理(Data Preprocessing)中的重要角色-缺失值處理。從檢查、刪除到填充缺失值,以及插值法和機器學習算法的應用方法。Pandas 缺失值處理基礎方法、進階填充缺失值、鐵達尼號存活預測資料集的示例和機器學習算法填補缺失值方法的介紹與使用。
Thumbnail
作者 Only 系列文章,【一天一千字,進化每一次】食物熱量表僅考慮燃燒食物產生多少熱量,但食物代謝當中需要消耗熱量,包括消化吸收、烹熱方式與溫度、飢餓程度和腸道微生物。食物熱量表可以提供參考,但也需瞭解個人吸收情形是個重要變量。
Thumbnail
自然語言模型中,「Temperature」和「Top_p」扮演著重要的角色,它們可以影響生成的文本風格和內容的豐富度。本篇將探討這兩個概念,並提供了多個相關的範例來幫助讀者更好地理解它們的作用。無論您是開發人員還是使用者,這些設定值的調整都可能會對生成的內容產生重大影響,因此值得進行實驗和測試。
Thumbnail
本文介紹瞭如何使用 Python pandas 進行資料分析,包括如何使用 corr() 函數針對數字類型的欄位進行分析,以及如何刪除不需要的欄位和取得想要的小數位數。
Thumbnail
題目會給定一個輸入陣列temperatures ,分別代表每一天的溫度。 請計算每一天還要再過幾天才會遇到更溫暖的日子,如果遇不到,則回填0。 請以陣列的形式返回答案。 題目的原文敘述 約束條件 Constraints: 1 <= temperatures.length <= 10^
Thumbnail
對於許多企業而言,試算表是日常業務和決策過程中不可或缺的工具。它們被用於各種目的,從財務預算和盈虧分析到庫存管理和客戶數據記錄。然而,隨著業務的發展和數據量的增加,許多人會發現自己面臨著試算表管理和維護的挑戰,這些挑戰可能妨礙效率、準確性和生產力。 1. 數據管理的繁瑣性 試算表中數據的輸入
Thumbnail
徵的就是你 🫵 超ㄅㄧㄤˋ 獎品搭配超瞎趴的四大主題,等你踹共啦!還有機會獲得經典的「偉士牌樂高」喔!馬上來參加本次的活動吧!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
在處理數據時,最可能會遇到數據中含有None的時候,若沒有處理就進行運算就會造成程式崩潰或者報錯 數據中含有None input_list = [(42, 292), (28, 296), (999, 92), (993, 46), (219, 4), (279, 2), (None, None
Thumbnail
本文介紹了在進行資料分析時,將類別欄位轉換為數值欄位的方法,包括Label Encoding、One-Hot Encoding、Binary Encoding、Target Encoding和Frequency Encoding。每種方法的應用範例、優缺點和適用場景都有詳細說明。
Thumbnail
資料前處理(Data Preprocessing)中的重要角色-缺失值處理。從檢查、刪除到填充缺失值,以及插值法和機器學習算法的應用方法。Pandas 缺失值處理基礎方法、進階填充缺失值、鐵達尼號存活預測資料集的示例和機器學習算法填補缺失值方法的介紹與使用。
Thumbnail
作者 Only 系列文章,【一天一千字,進化每一次】食物熱量表僅考慮燃燒食物產生多少熱量,但食物代謝當中需要消耗熱量,包括消化吸收、烹熱方式與溫度、飢餓程度和腸道微生物。食物熱量表可以提供參考,但也需瞭解個人吸收情形是個重要變量。
Thumbnail
自然語言模型中,「Temperature」和「Top_p」扮演著重要的角色,它們可以影響生成的文本風格和內容的豐富度。本篇將探討這兩個概念,並提供了多個相關的範例來幫助讀者更好地理解它們的作用。無論您是開發人員還是使用者,這些設定值的調整都可能會對生成的內容產生重大影響,因此值得進行實驗和測試。
Thumbnail
本文介紹瞭如何使用 Python pandas 進行資料分析,包括如何使用 corr() 函數針對數字類型的欄位進行分析,以及如何刪除不需要的欄位和取得想要的小數位數。
Thumbnail
題目會給定一個輸入陣列temperatures ,分別代表每一天的溫度。 請計算每一天還要再過幾天才會遇到更溫暖的日子,如果遇不到,則回填0。 請以陣列的形式返回答案。 題目的原文敘述 約束條件 Constraints: 1 <= temperatures.length <= 10^
Thumbnail
對於許多企業而言,試算表是日常業務和決策過程中不可或缺的工具。它們被用於各種目的,從財務預算和盈虧分析到庫存管理和客戶數據記錄。然而,隨著業務的發展和數據量的增加,許多人會發現自己面臨著試算表管理和維護的挑戰,這些挑戰可能妨礙效率、準確性和生產力。 1. 數據管理的繁瑣性 試算表中數據的輸入