跳到主要內容

發表文章

如何準備應徵一份LLM工程師的工作?

 2024 的最後一天,就以這篇文章作結! 先講結論,直接拿標題下去網路搜尋,或者直接問ChatGPT、Gemini 等生成式AI,可能都能夠獲得比這篇文章還要詳細完整的答案。而筆者在這篇文章要分享的,是在過去一年來,所應徵過的 LLM 相關工作職缺時,被問到的問題。 雖然筆者本身過去幾年的確都在製造業當中從事演算法相關的應用開發工作,但因為部門屬性、專案的應用場景、公司的數位轉型政策、以及其他大人們的因素。筆者一直沒有機會真正接觸到生成式 AI 的開發工作。 打從 ChatGPT 一砲而紅之後,各家科技巨擎的生成式 AI 模型宛如軍備經賽般地快速發展,乃至今日,無論是功能強大的商業型生成式AI服務平台、完整的開源生成式AI開發工具生態系、各種新興的商業模式與應用等等,都不斷推陳出新、日新月異! 技術領域當個早期進入者當然有其風險與優勢,想想兩年前那些還在燒腦如何 fine-tuning LLM的前輩們,看到現在隨便一個LLM搭配個 Multi-Agents、RAG 的效能與功能完整性都比當年度燒肝燒薪水出來的玩意還要簡單易用,大概滿肚子辛酸血淚XD 現在才打算踏入 LLM 應用開發的求職者們,也不見得要灰心,因為現在要真正做LLM的應用開發,跟兩年前比起來可方便且快樂多了,但那也表示,這個就業市場也差不多一片紅海了XD 但總之,LLM 的相關整合應用,在未來幾年勢必仍舊會是一項趨勢,要不要踏上這條路,就看每個人如何權衡了🍵 好,感言說完了,以下就逐條羅列筆者在前述所提到的求職技術題目。題目的答案,就不占篇幅了,留給各位讀者們做功課: 『在 NLP 的領域中,請解釋什麼是「Language understanding」?』 『在 NLP 的領域中,請解釋什麼是「Question Answering」』 『在LLM 的 RAG 應用當中,如何評估 Retrieve 的正確率?』 『在LLM 的 RAG 應用當中,面對較大的知識庫時,有什麼可以優化 Retrieval 效能的方法?』 『假設你所隸屬的公司所使用的線上會議工具是 _______(基於大人們的因素,這裡以空格替代,讀者們可以自行想像是哪一套線上會議軟體),用戶想要把線上會議的內容,以自動化的方式產出摘要提供給會議召集人,請問如何應用 AI 技術作為解決方案?需要多少工時完成此需求?請簡單列出專案計...

Coursesa 線上學習心得

約莫三個月前,我完成了 Coursera上面的這幾項課程。想透過這邊文章來記錄一下這個學習歷程。 Q:「為什麼再進修以及選擇這些課程?」 A:「作為一名資料科學應用開發人員,持續學習新理論與新技術是理所當然的事情!」 而這不限於新東西,哪怕是已經十分成熟的技術,但先前自己沒碰過,現在或者未來需要用,那當然教學!現實社會當眾討生活,不進則退,理所當然。由於我自己的工作內容主要專注於製造與供應鏈管理應用場景的演算法開發設計,對於資料工程、資料架構設計、開發過程的測試與驗證…… 等等,較少有著墨。為了提升自己工作技能的廣度與就業彈性,才選擇了這些課程。 IBM Applied DevOps Engineering Professional Certificate https://www.coursera.org/professional-certificates/ibm-applied-devops-engineering IBM Data Warehouse Engineer Professional Certificate https://www.coursera.org/professional-certificates/data-warehouse-engineering IBM AI Engineering Professional Certificate https://www.coursera.org/professional-certificates/ai-engineer NoSQL, Big Data, and Spark Foundations Specialization https://www.coursera.org/specializations/nosql-big-data-and-spark-foundations Q:「為何選擇 Coursera?而不是其他綜合學習平台,或者 M$、Google、提供的官方學習平台?」 A:「技能的廣度與通用性、CP 值高!」 要選擇哪一個線上平台或者數位學習工具?這是使用者自己最先要面對的問題。對我而言,選擇 Coursera 的最大原因,正是上述這三點,這部份就可以細一點來談了! # 技能的廣度與通用性 首先是「課程內容的技能通用性」這一點,M$、Google、AWS 等大廠雖然也都有推出自己的數位...

關聯規則|除了 Apriori 之外還有什麼?

圖源:Seq2Pat: Sequence-to-pattern generation to bridge patternmining with machine learning. |  AI Magazine Volume 44, Issue 1, Mar 2023, Pages1-130.  # 前言 筆者在 前一篇文章 當中提到了關聯規則分析在製造業當中的相關應用場景,而在本篇文章當中,筆者提到一些關聯規則的變體。正如標題的提問:「關聯規則分析,除了 Apriori   之外還有什麼?」,不外乎正是因為 Apriori 演算法的地位就相當於迴歸分析當中的 簡單線性迴歸 。因為它實在太經典,理論簡單清晰且樸實無華,談到關聯規則分析的演算法不外乎一定會想到 Apriori。但也因為如此,其實用性必定然不如後續各種改良版的演算法。本篇文章依舊不討論理論細節,只聊聊若考量了更多分析要素的情況下,關聯規則演算法可以怎麼玩? # 階層與類別 Multidimensional and Multilevel Association Rules。這是資料分析實務上幾乎會存在的議題,以超市商品銷售分析為例,商品的用途分類、品牌、價位、供應商、是否有打折?是否為當季商品?這些類別屬性本身就是重要的統計資訊來源,而有了類別屬性就能夠依此來賦予階層的資料劃分。經典的購物籃分析當中只到啤酒跟尿布,但若我們將上述屬性給納入分析當中,那麼可能資料本身就要經過更嚴謹的標記處理,甚至是調整演算法本身,才能使分析結果更具詮釋性。 相關參考文獻: Comparison of New Multilevel Association Rule Algorithm with MAFIA. | International Journal of Intelligent Systems Technologies and Applications 6(11):75-81, October 2014, 6(11):75-81. Mining Multi-Dimensional and Multi-Level Sequential Patterns. |  ACM Transactions on Knowledge Discovery from Data (TKDD), ...

關聯規則|除了購物籃分析還有什麼?

# 前言 關聯規則分析( Association Rule Analysis ) 大概可以列入所有入門資料科學、數據分析的朋友們,都聽過的一門分析方法,最常見的應用不外乎就是購物籃分析( Basket Analysis ) 與推薦系統,尤其是那個經典的美國超市的「 啤酒與尿布 」 的案例。 這幾乎是筆者現在每次聽到的時候都會直接腦袋放空的案例,直到筆者在某一次的相關技術分享當中聽到有人提到「月餅與烤肉架、柚子與木炭」這項範例,筆者才發自內心一笑 XD 而誠如標題,這篇文章要討論的關聯規則在購物籃分析之外的應用。 白話來說,關聯規則分析,就是計算在資料集當中不同「項目」(item)共同出現的頻率,藉以找出「具有一定統計顯著關聯」的「規則」。而這個「項目」的定義,自然就根據應用的領域而有所不同。例如各位可能也在教科書或者各大教學網站當中看過,關聯規則分析在醫療生技、投資組合、網路資安控管等等的應用。筆者本身所處的產業是電子製造業,理所當然地要來跟各位簡單聊聊關聯規則在電子製造業的相關應用。 # 異常事件偵測 這類的應用與資安控管、金融詐騙等應用相似,都是將關聯規則分析作為「異常檢測」( Anomaly detection )的方法。而製造業常見的異常檢測議題有什麼呢?機台設備的保養檢查、產品品質檢驗、客戶的需求預測。都是常見的應用。 製造業本是高度實體資本集中的產業,任何可能影響產線正常運作與出貨的事件,都很可能造成公司損失。因此,確保產線能正常運作、產品品質無慮,是製造業無時無刻都在關注的事情。而客戶的需求預測,則就不限於電子製造業,日常營運當中包含實體進出貨作業、並且有庫存成本考量的產業,皆是如此。而「精準地預測客戶需求」本身就是一項艱難的任務,即便是大數據與人工智慧技術蓬勃發展的 2024 年也還是一樣 否則每一位資料分析師就都拿資料套個模型炒股發大財去了 。而關聯規則分析則有機會找到異常波動的一些蛛絲馬跡,提前做好防範措施。 相關 理論 應用範例: Interpretable failure risk assessment for continuous production processes based on association rule mining.|Advances in Industrial and Manufacturing Engineeri...

時間序列|淺談供應鏈需求預測 其六:階層預測與群組預測

本系列的前五篇文章談到的,幾乎都是單一變數的時間序列資料。也就是假設每一樣產品的需求為獨立,彼此互不影響,每一項產品的預期需求完全分開來預測。但在業界實務當中,我們手頭上的時間序列資料,可能有群組與階層的隸屬關聯,而本系列的最後一篇文章,就是要聊聊具有這種結構關係的需求預測難題。 # 簡單的群組與階層拆分與整併預測 以筆記型電腦為例,假設某品牌商旗下有兩個不同系列的筆記型電腦(姑且就稱為 A 款與 B 款),假設這兩款都可以依照螢幕尺寸再分成 14 吋與 15 吋好了,該品牌的 A 與 B 兩款筆電都銷售全球(就粗略分成亞太、北美洲、歐洲、與新興市場四大地區好了)。有了上述的類別標籤,我們就能依照這些標籤,將過往的銷售數據進行群組與階層的拆分或整併。而在進行需求預測時,無論我們是「由下而上」(Button-up)先將切到最細層級的個別序列資料(例如 A 款的 14 吋筆電在亞太地區的未來預期需求)分別預測之後,再逐層往上堆疊;抑或是「由上而下」(Top-down)先使用彙總到最頂層的序列資料進行預測之後,再依照特定比例拆分到底下各層,這種兩分預測流程,從技術面而言都說得通,相關細節可以參考 該電子書的章節頁面 ,裡頭有十分詳盡的觀念談。 # 同時預測多條時間序列 若我們採行的是「由下而上」的預測方式,且假設我們明確知道同階層或同群組的序列資料當中,彼此具有一定程度的關聯性存在。這種時候就可以使用 向量自迴歸模型 (Vector Autoregression),針對同一階層或者同一群組的時間序列資料來進行預測。然而,就跟其他基於統計學的時間序列預測模型一樣,該方法的使用上要留意一些的限制與假設前提,否則用起來的預測成效也不會好到哪裡去,甚至根本用不起來。 例如最簡單的:當你一次把太多條時間序列綁成一個龐大的矩陣來求解……那麼求解的複雜度指數上升,甚至模型會因為無法收斂而直接跳 Error 給你看。又或者是,你綁在一起預測的這些時間序列壓根沒有統計上的關聯性,那麼為了圖方便性而向量自迴歸模型來做預測的結果,就跟你拿一串隨機序列的資料說要用 ARIMA 模型來準確預測下一步,是一樣的概念。 # 群組與階層的陷阱 延續上個段落所提到的,既然都特地寫了這篇文章,當然不是請讀者們把上面那本電子書的章節看過而已。雖然在業界當中的許多產品需求資料,都能夠依照上述方式來進行群組與階層...

時間序列|淺談供應鏈需求預測 其五:中長期預測的挑戰

  筆者在本系列的 上一篇文章 提到,產品生命週期曲線的重要功能之一,是作為中長期需求走勢觀測的基準線。對於許多公司的營運管理、決策規劃單位而言,藉由未來半年甚至一整年的需求預測結果,來制定相對應的中長期營運計畫,是十分常見的事情,但這與中長期預測的難易是兩碼子事。固然我們能參考產品生命週期,來抓出個大概,但實務上,仍需搭配其他輔助方法與資訊,才能讓中長期的預測結果具有參考價值。而這篇文章就是要來分享筆者實際在 3C 電子代工廠建構中長期需求預測模型的相關作法。 1. 為歷史趨勢加掛衰退係數 方法 1. 就是先從歷史資料當中抓出一條筆直的趨勢線,然後針對未來各期的趨勢值,乘上一組衰退係數。例如:我們要產出的是未來半年的預測值,最小的時間顆粒度是 by week(也就是總共要產出未來 26 週的預測值),並且我們假設採用最簡單的線性衰退函數,那麼我們就在這條趨勢線上的未來第一週的趨勢值乘上 26/26;第二週的趨勢值乘上 25/26,依此類推,到了第二十六週的趨勢值則乘上 1/26。藉由該調整方法,讓「根據歷史資料而產生出來的趨勢線」的影響比例,隨著距今時間拉長而降低。 該作法便是假設「根據歷史資料而產生出來的趨勢線」,對時間上距今越近的預測值越管用。若時間上距今越遙遠,那麼參考性理當會越來越低 。 至於這個衰退係數一定要線性的嗎?我能不能用指數衰退?對數衰退?或者其他非線性的衰退方式?我一定要對全部的預測值都乘上衰退係數嗎?能不能在未來的第 N 期的預測值才開始乘上這組衰退係數?筆者的看法是,採用全段未來趨堅的線性衰退,當然是最簡單的作法。但若您有足夠的時間進行相關比較實驗,仔細瞭解手頭上的資料樣貌、以及自己所面臨的預測情境後,再來決定要採用哪種比例衰退方式,一定不會錯。 而讀者們一定還會再問,照上述說法,距今最遙遠那一期的調整後趨勢值,不就一定會很小嗎?沒錯,如果你的最終預測結果,就真的只有這一條「根據歷史資料產生出來的趨勢線」,沒有再加上其他東西或者其他調整程序了,那麼採用這種比例衰退方法,自然會讓越遙遠的未來預測值看起來小得不合理。所以這時候,就要跟筆者在上述提到的方法 2. 來相互搭配。 2. 採用不只一種的趨勢線進行比例調和 方法 2. 的概念也十分容易理解,就是我透過混合不只一條的趨勢線,來產生未來的趨勢參考線。而需要特別留意的是, 每一條趨勢線...

程式 DIY|for 時間序列預測的小工具

IT 工程師的圈子內有個俚語,大意是:「如果已經有人把輪子造出來了,那何必再自己造一次輪子?」,輪子指的即是工具。先撇開程式運作效率以及彈性不談,如果過去已經有人把我們要的功能給寫出來了,且這段程式碼我們也能夠正常取得的化,那我們何必在自己寫一次?這對當今廣義的程式開發工作者而言,是很理所當然的事情。但是反過來說,如果今天我們想要的功能,還沒有人寫出來(當然也有可能是我們不夠神通廣大,沒在公開環境當中找到符合我們需求的玩意兒),那麼自己寫一套,也是很正常的,而這個系列的宗旨即是如此。 在這篇文章之前,筆者已經放了四篇不太好消化的領域知識探討文章。所以這一篇我們就換換口味,談談好久沒提到的程式設計。說是這麼說,但本文所要分享的東西,其實都與過去幾篇「時間序列」主題的文章相關,而些程式碼都放在筆者自己建立的 GitHub repository 當中,裏頭包含了三個 .py 檔,每一個 .py 檔主都是一個簡單的自定義函數。以下分別介紹: # series_rescaler 如函數名稱,「序列的正規化」,其功能是將餵進函數的 Python 數值資料list,依照指定的長短期數(int),進行等比例的長度縮放以及將原始 list 的各期數值給正規化,其正規化的 list 各期數值加總為 1。這項功能要應用於【淺談供應鏈需求預測】的第四篇文章「 產品生命週期 」的相關應用當中。在比較不同長度以及總和數量不同的序列資料,勢必比較基準也得一致才行,而這道函數的功能便是執行了這項前處理功能。 讀著們會好奇,正規化?那麼我能將原本較長的序列資料縮短、也能將原本較短的序列資料拉長嗎?當然,這道函數的功能變是如此,它的原理就是將原本各期的數值資料進行「加總為 1 的正規化處理」後,再依照新的指定期數長短進行等比例的劃分,再依序塞到對應的新位置(即正規化後的新的 list 的 item 順序)當中。而由於前面的步驟已經先經過了「加總為 1 的正規化處理」,所以縮放之後的序列資料,也保有原本的數量比例分佈。惟須留意的是,由於縮放後的各期數字是以迴圈逐項計算的,由於浮點數計算的因素,有可能使縮放後的序列資料加總不完全等於 1,可能有個正負 0.001 之類的浮點數運算差異。如果是非常在乎精準度的使用者,請務必將縮放後的序列資料再檢查一次加總是否剛好為 1。 # sim_calcula...