時間序列變身AI訓練樣本)
如果你在工廠里和實時數(shù)據(jù)庫打過幾年交道一定會有這種體會DCS 和 PLC 源源不斷地把溫度、壓力、流量、振動這些測點寫進歷史庫數(shù)據(jù)一秒一秒地滾動永遠沒有盡頭。這時候你想回答一個最簡單的問題——“這臺泵上個月一共異常過幾次每次異常前后發(fā)生了什么”——卻往往要翻幾天甚至幾周的歷史曲線寫一堆掃描腳本最后還得靠老師傅憑經(jīng)驗圈出幾段“大概是故障”的時間。Event Frames事件幀解決的就是這個讓人頭疼的老問題。我第一次在 PI System現(xiàn)在已并入 AVEVA里接觸這個概念時只當它是一個給時間區(qū)間貼標簽的小工具直到后來做設(shè)備故障診斷、批次質(zhì)量分析甚至給人工智能模型準備訓練數(shù)據(jù)集時才意識到它是工業(yè)數(shù)據(jù)領(lǐng)域被低估最嚴重、也最值得借鑒的設(shè)計之一。這兩年 AI 概念重新熱鬧起來大模型、AI Agent、智能體一個個往工業(yè)現(xiàn)場涌我卻越來越覺得Event Frames 這套十幾年前就成型的方法論在 AI 時代不但沒過時反而是很多人繞不開的那塊基石。這篇文章就聊聊它到底做了什么、為什么厲害以及落地時那些文檔里不愛寫的細節(jié)給正在和工業(yè)時間序列和算法打交道的朋友做個參考。1. 為什么說 Event Frames 是工業(yè)數(shù)據(jù)領(lǐng)域最精彩的設(shè)計之一1.1 時間序列數(shù)據(jù)天生缺少“邊界”先想一個最樸素的問題一條時間序列有沒有邊界沒有。溫度測點從工廠開車第一天就開始記錄除非停車否則它永遠不會主動告訴你“這一段是一次加料”、“這一段是一次設(shè)備啟?!?、“這一段是故障前兆”。工業(yè)實時數(shù)據(jù)庫本質(zhì)上是一部永不停機的 CCTV 監(jiān)控錄像每一條曲線都是連續(xù)畫面但沒有剪輯沒有鏡頭分割更沒有“第幾集發(fā)生了什么”的目錄。這種“無邊界”特性在傳統(tǒng)報表時代就已經(jīng)很痛苦了。想要統(tǒng)計一個月的非計劃停車次數(shù)一般做法是去翻報警歷史記錄查到報警時間點后再從實時庫里手工截取前后各一小時的數(shù)據(jù)存成一個個文件然后在 Excel 里慢慢對比。流程繁瑣是一方面更麻煩的是每個人截取的時間窗還不一樣有人取前 1 小時有人取前 30 分鐘最后做出來的分析結(jié)果根本沒法橫向比較。我當時最常干的一件事就是拿 U 盤從幾臺不同機器上拷貝數(shù)據(jù)片段文件名像“泵P-101故障20230115.csv”這種全靠手寫備注事后根本對不上號。Event Frames 徹底改變了這個局面。它把一個時間區(qū)間變成了一等公民有明確的開始時間、結(jié)束時間能關(guān)聯(lián)一批測點能掛上分類屬性還能套模板批量生成。你可以把它想象成在監(jiān)控錄像的時間軸上自動畫出一段段高亮片段每段都寫著“這是泵 P-101 軸承磨損故障”“這是 A 產(chǎn)品批次 20241102”“這是裝置開車過程”。數(shù)據(jù)終于有邊界了。1.2 事件幀把連續(xù)數(shù)據(jù)變成了可管理的離散對象它的內(nèi)部結(jié)構(gòu)并不復雜核心就四部分。第一是時間邊界每個事件幀必須有明確的開始時間和結(jié)束時間。這兩者不一定都是固定時刻更多時候是相對表達式比如“振動高報觸發(fā)前 2 小時”到“觸發(fā)后 1 小時”這讓事件幀能精準覆蓋“前兆—發(fā)生—恢復”的完整過程。第二是數(shù)據(jù)引用事件幀要關(guān)聯(lián)一批具體測點比如振動值、電流、出口壓力、電機溫度。生成事件幀時系統(tǒng)自動把這段時間范圍內(nèi)的原始數(shù)據(jù)按引用關(guān)系抓取出來等同于給這段歷史曲線做了“打包存檔”。第三是上下文屬性這是事件幀最值錢的部分。屬性可以是一個文本字段記錄故障原因、操作員工號、產(chǎn)品批次也可以是一個數(shù)值字段記錄故障等級、持續(xù)時長、損失量。屬性讓時間片段有了業(yè)務(wù)語義AI 訓練模型時這些屬性就是現(xiàn)成的標簽和特征。第四是模板和層級事件幀不是散裝的它由模板批量生成模板里預(yù)設(shè)好時間表達式、數(shù)據(jù)引用和屬性字段。同一個模板下還可以有父子層級比如“一次批次生產(chǎn)的完整事件幀”下面可以掛“進料階段事件幀”“反應(yīng)階段事件幀”“出料階段事件幀”形成一棵結(jié)構(gòu)清晰的事件樹。用一個生活化類比來說理解起來更快實時數(shù)據(jù)庫是一卷無限長的錄像帶Event Frames 就是剪輯師在時間軸上切出的一個個片段每個片段有一個標題、一段封面說明里面還附上了主角出場的時間線。剪輯師是拿模板批量切片的不是手工一幀一幀剪的。1.3 為什么說這套設(shè)計“精彩”我后來認真想過為什么偏偏是 Event Frames 讓工業(yè)數(shù)據(jù)從業(yè)者這么喜歡。最根本的原因在于它把工業(yè)現(xiàn)場最底層的二元矛盾——連續(xù)的數(shù)據(jù)世界和離散的管理世界——接起來了。設(shè)備、工單、批次、故障、操作記錄這些業(yè)務(wù)對象天生是離散的一次檢修有開始時間和結(jié)束時間一批產(chǎn)品有批號和產(chǎn)出時段一次報警有觸發(fā)時刻和恢復時刻。但測點數(shù)據(jù)是連續(xù)的一秒都不停。以前這兩套世界各說各話業(yè)務(wù)系統(tǒng)里寫著“P-101 在 2024-11-02 發(fā)生過振動高報”想找當時具體數(shù)據(jù)曲線得靠人工去猜時間段。Event Frames 直接把這兩個世界焊在一起連續(xù)數(shù)據(jù)被切成了和業(yè)務(wù)對象一一對應(yīng)的離散數(shù)據(jù)包歷史查詢、統(tǒng)計對比、AI 訓練全都能按“事件”為單位展開而不必再面對漫無邊際的原始數(shù)據(jù)流。這種“以事件為坐標軸”的思路后來也影響了我看待其他工業(yè)數(shù)據(jù)產(chǎn)品的方式。很多團隊迷信更大的存儲、更快的查詢、更炫的可視化卻忽略了最本質(zhì)的一層數(shù)據(jù)堆在那里如果沒有邊界、沒有語義就只是數(shù)字不是信息。Event Frames 的精彩就在于它補上了數(shù)據(jù)建模里最容易缺失的那一環(huán)。2. AI 時代Event Frames 的重要性為什么反而被放大2.1 機器學習的命門是“樣本”事件幀是天然的樣本生成器這兩年經(jīng)常聽到工廠客戶說“我們想上 AI想預(yù)測設(shè)備故障?!钡谝徊絾枖?shù)據(jù)他們會很自豪地說“我們有海量歷史數(shù)據(jù)10 年的趨勢都存著?!钡人惴▓F隊進場以后才發(fā)現(xiàn)10 年歷史數(shù)據(jù)全是連續(xù)時間序列根本沒法直接用來訓練分類模型。為什么因為監(jiān)督學習需要的是“樣本”不是“數(shù)據(jù)”。一個故障預(yù)測模型需要的是幾百次、上千次“故障事件”以及對應(yīng)的歷史曲線每次故障是一個獨立樣本包括故障前幾個小時的數(shù)據(jù)形態(tài)和故障類型標簽。如果沒有事件幀算法工程師只能自己寫腳本去報警記錄里找時間點然后以報警時刻為中心向前切 4 小時、向后切 2 小時拼湊出訓練集。這個做法不是不行但切出來的窗口邊界很粗糙報警噪聲也可能把樣本污染掉更麻煩的是標簽沒地方放只能另外維護一張 Excel 表樣本 ID 和時間段手工對齊做一輪下來人都要瘋。有了 Event Frames樣本生成就變成了一個干凈的自動化流程每個事件幀天然就是一個樣本開始和結(jié)束時間就是樣本的時間邊界屬性字段就是初始標簽關(guān)聯(lián)的測點就是模型要吃的特征通道。訓練一個故障診斷模型只需按標簽篩選事件幀然后逐個把區(qū)間內(nèi)原始數(shù)據(jù)取出來重采樣成統(tǒng)一維度疊成一個張量。整個流程清晰、可復現(xiàn)而且樣本數(shù)量可以隨著歷史事件幀的積累自動增長。我在做機泵軸承故障診斷項目時最明顯一開始人工拼樣本集拼了三個星期后來項目組把全廠過去兩年由報警觸發(fā)的事件幀全部調(diào)出來用腳本批量導出兩天就得到了 600 多條高質(zhì)量故障樣本還附帶準確的故障發(fā)生時刻和現(xiàn)場標注。這件事讓我徹底認可了事件幀對 AI 工程的價值。2.2 事件幀提供的是“上下文特征”不是裸數(shù)據(jù)機器學習和 AI 模型真正吃的是特征而特征的質(zhì)量取決于你能從一條時間片段里提取到什么。如果沒有事件幀你從原始時間序列里只能提取曲線形態(tài)特征比如均值、峰值、斜率、頻譜能量這些“純數(shù)據(jù)”特征。這些特征不是沒用但往往不足以區(qū)分不同的故障模式——同樣是一個振動高值是啟機瞬間的共振還是運行中的軸承磨損從數(shù)值形態(tài)上經(jīng)常很難直接分辨。事件幀帶來的上下文屬性恰好補上了這個短板。它可以告訴你這個振動高值發(fā)生在什么工況下當時泵是滿負荷還是低負荷上一次檢修是什么時候進料物料是什么牌號操作員有沒有切換備用設(shè)備。這些屬性拼接起來就形成了一組“業(yè)務(wù)上下文特征”數(shù)據(jù)特征加上下文特征一起喂給模型效果完全不同。用一個樸素的說法同一個癥狀發(fā)生在不同人身上醫(yī)生要結(jié)合年齡、病史、生活習慣才能準確判斷工業(yè) AI 也一樣事件幀就是設(shè)備的“病歷上下文”。在大模型時代上下文特征的含金量更上一層樓。大模型本質(zhì)上是一個“上下文推理器”它能理解的信息越多、越結(jié)構(gòu)化輸出越可靠。一段時間序列光禿禿地擺出來大模型再聰明也看不出所以然但把同一段時間包裝成一個包含前因后果的事件對象大模型就能順著業(yè)務(wù)邏輯給出合理的診斷建議。2.3 大模型與 AI Agent 更需要結(jié)構(gòu)化事件做交互接口最近一兩年AI Agent 這個概念在工業(yè)圈里也很熱。大家希望讓大模型扮演一個“設(shè)備專家”或者“值班助手”能自主回答“最近有沒有異常趨勢”、“這個故障歷史上怎么處理的”。想法很好但很多人低估了一個技術(shù)現(xiàn)實大模型直接看時間序列是不可行的token 有限數(shù)字堆疊沒有語義模型的注意力根本不知道應(yīng)該聚焦在哪一段。解決辦法恰恰是事件幀。可以把歷史事件幀轉(zhuǎn)成一段段結(jié)構(gòu)化描述文本比如“2024-11-02 03:17 至 03:47P-101 泵振動異常峰值 12.4 mm/s持續(xù) 30 分鐘相關(guān)報警 A2287處理措施切換備用泵故障原因軸承磨損”。這種文本大模型可以無障礙消費。再把這些歷史事件描述放到向量數(shù)據(jù)庫里一個 AI Agent 就能通過相似度檢索回答出“過去一年 P-101 泵最常見的故障模式是什么”或者“有幾次振動異常和軸承磨損相關(guān)”。從這個角度看Event Frames 在大模型時代扮演了一個此前不存在的角色把“埋沒在時間序列里的工業(yè)記憶”變成“可被 AI 檢索和理解的結(jié)構(gòu)化知識”。以前它是給工程師看的數(shù)據(jù)結(jié)構(gòu)現(xiàn)在它是給 AI 當知識底座的數(shù)據(jù)結(jié)構(gòu)價值不但沒有被稀釋反而被放大了。3. Event Frames 落地實操從模板設(shè)計到自動生成3.1 事件幀的內(nèi)部結(jié)構(gòu)解析如果只是在軟件里看幾個現(xiàn)成的事件幀你可能覺得它就是一個時間區(qū)間加幾個屬性沒什么大不了。但要真正落地必須先吃透它的內(nèi)部結(jié)構(gòu)。我習慣把事件幀拆成下面四層來看層級組成作用時間邊界開始時間、結(jié)束時間定義事件在時間軸上的位置和跨度數(shù)據(jù)引用關(guān)聯(lián)測點PI Point/Tag限定事件所對應(yīng)的原始數(shù)據(jù)范圍上下文屬性文本型、數(shù)值型、枚舉型字段給事件打標簽、補上下文支撐分析和AI訓練層級關(guān)系父事件幀、子事件幀表達“總事件包含子階段”的樹狀結(jié)構(gòu)時間邊界是最容易忽略的細節(jié)。很多新手建模板時直接寫死“2024-01-01 00:00 到 2024-01-02 00:00”這種做法的可用性極差。成熟的模板會使用相對時間表達式例如事件觸發(fā)條件的滿足時刻為基準向前推 2 小時作為開始時間向后推 1 小時作為結(jié)束時間。這樣同樣一個模板無論未來哪次報警觸發(fā)生成的事件幀都能自動適配保證前兆段和恢復段都被框進來。數(shù)據(jù)引用層決定了你能分析什么、訓練什么。如果關(guān)聯(lián)測點太少比如只關(guān)聯(lián)一個振動值事件幀就失去了上下文基礎(chǔ)如果關(guān)聯(lián)測點太多每次生成都會帶來額外的存儲開銷查詢也變慢。我的一般原則是圍繞事件的物理機理選擇測點機泵故障就關(guān)聯(lián)振動、電流、出口壓力、軸承溫度確保覆蓋故障的主要表現(xiàn)維度而不是把所有測點都塞進去。上下文屬性層是整個設(shè)計的靈魂。屬性字段建議設(shè)計成枚舉或有限取值比如故障類型可以取值“軸承磨損/不對中/汽蝕/其它”班組可以取值“甲/乙/丙”。枚舉化的好處有兩個一是后續(xù)做分類模型時標簽是干凈的不用再做文本清洗二是統(tǒng)計聚合的時候可以按類別做分組分析效率大大提高。我把這個原則叫“屬性寧枚舉不文本”。3.2 設(shè)計事件幀模板的三個關(guān)鍵參數(shù)建立模板時有三個參數(shù)我最看中幾乎每個項目都要反復校準。第一個是觸發(fā)方式。事件幀的生成不能靠手工在界面上點擊創(chuàng)建那樣沒法規(guī)模化。常見的自動觸發(fā)方式有幾種基于狀態(tài)變化比如設(shè)備從“運行”切到“停止”的時刻觸發(fā)基于報警事件比如某個點位越過高限閾值并持續(xù)一定時間后觸發(fā)基于批次/工單信號比如批次管理系統(tǒng)發(fā)出“開始加料”的信號時刻觸發(fā)。選擇哪種方式取決于你關(guān)注的是設(shè)備故障、生產(chǎn)批次還是工況切換。報警觸發(fā)適合做故障事件批次開始/結(jié)束信號適合做生產(chǎn)事件狀態(tài)變化適合做設(shè)備運行行為分析。第二個是時間窗。這個參數(shù)幾乎決定事件幀的“信息容量”。為了覆蓋完整過程前滾窗口要足夠容納故障前兆后滾窗口要足夠覆蓋故障恢復或工藝響應(yīng)。比如一個泵從出現(xiàn)早期異常到真正報警往往有 2 到 4 小時的演變過程報警后到運行人員切換備用泵可能需要 30 分鐘到 1 小時。所以對機泵故障事件我的配置一般是“觸發(fā)前 4 小時到觸發(fā)后 1 小時”。如果窗口太短模型看不到前兆如果太長又會混入大量無關(guān)的正常數(shù)據(jù)干擾模型學習。第三個是標簽體系。事件幀生成初期故障原因往往是未知的需要設(shè)備工程師在事件發(fā)生后補錄。所以模板設(shè)計要給“故障原因”“處理措施”這類人工標簽留好位置同時把它設(shè)為非必填避免因缺標簽導致事件幀生成失敗。等樣本積累到一定數(shù)量這些人工標簽就成為 AI 模型的訓練目標。標簽體系的維護是一個持續(xù)過程我后面還會展開講。3.3 一個完整的機泵故障樣本生成實例說一個我自己做過的實例離心泵 P-101 的振動異常事件幀搭建。第一步是定義對象和測點。我在資產(chǎn)模型中建了一個 P-101 泵的元素掛上 4 個關(guān)鍵測點振動速度、電機電流、出口壓力、軸承溫度。這里測點和資產(chǎn)掛鉤很重要否則事件幀和物理設(shè)備之間的關(guān)聯(lián)就斷了。第二步是創(chuàng)建事件幀模板“PumpFaultTemplate”。模板掛到 P-101 元素上屬性字段包含故障類型枚舉軸承磨損/不對中/汽蝕/其它、FaultLevel枚舉一級/二級/三級、處理班組枚舉甲/乙/丙。時間邊界配置為開始時間等于報警觸發(fā)時刻減 4 小時結(jié)束時間等于報警觸發(fā)時刻加 1 小時。第三步是配置數(shù)據(jù)引用。模板上把 P-101 的 4 個測點全部引入作為數(shù)據(jù)引用。這樣每個事件幀生成后可以一鍵打開關(guān)聯(lián)曲線也能通過腳本讀取完整數(shù)據(jù)矩陣。第四步是配置觸發(fā)條件。我的條件是“P-101-VIB 振動速度大于 10 mm/s 持續(xù) 30 秒”。注意這里加了持續(xù)時間條件避免瞬時尖峰噪聲誤觸發(fā)。第五步是運行生成邏輯。系統(tǒng)按條件掃描實時數(shù)據(jù)流每當條件滿足就創(chuàng)建一個事件幀。對于存量歷史數(shù)據(jù)也可以做批量回填把過去兩年符合條件的區(qū)間全部生成事件幀。這個過程我習慣先限定最近一個月跑通再擴展到全量歷史。第六步是建立訓練數(shù)據(jù)集。寫一個 Python 腳本遍歷事件幀對每個幀取出關(guān)聯(lián)測點在區(qū)間內(nèi)的數(shù)據(jù)統(tǒng)一重采樣到 1 分鐘步長再把故障類型屬性轉(zhuǎn)為標簽列最終拼成一個多維數(shù)組。數(shù)據(jù)集每一行是一個事件幀每一列是特征或標簽時間維以嵌套數(shù)組保存。數(shù)據(jù)導出為 Parquet 格式后可以直接喂給 PyTorch 或 TensorFlow 訓練。這個流程看似簡單但真正跑通以后后續(xù)做模型迭代就非常輕松——歷史數(shù)據(jù)里每一個事件幀都能隨時轉(zhuǎn)化成訓練樣本不需要再回頭去翻原始數(shù)據(jù)。4. 常見問題與排查技巧實錄4.1 高頻問題速查表做事件幀落地這些年我踩過不少坑也幫同行排查過不少問題。下面這個速查表是我自己長期積累的版本遇到問題先對著查一圈。常見問題可能原因解決辦法事件幀沒生成觸發(fā)條件持續(xù)時間設(shè)置過長條件從未滿足先用短期數(shù)據(jù)下調(diào)持續(xù)時間閾值測試事件幀沒生成分析服務(wù)沒有啟動或調(diào)度周期不對檢查事件幀生成服務(wù)是否在運行調(diào)度周期是否覆蓋實際條件時段事件幀時間不對服務(wù)器時區(qū)與現(xiàn)場時區(qū)不一致統(tǒng)一使用 UTC 時間存儲展示時再轉(zhuǎn)換本地時區(qū)事件幀大量重復生成條件在短時間內(nèi)反復滿足觸發(fā)去抖不足增加事件冷卻時間比如同一類型事件 1 小時內(nèi)不重復生成關(guān)聯(lián)測點沒有數(shù)據(jù)測點未正確關(guān)聯(lián)到資產(chǎn)元素檢查資產(chǎn)層級中的測點引用重新綁定標簽大量為空模板未設(shè)置默認值或人工補錄流程缺失建立每日標簽補錄流程設(shè)置默認枚舉值“待確認”歷史回填極慢對全量歷史數(shù)據(jù)逐幀掃描先用報警記錄粗篩出候選時間區(qū)間再生成事件幀這里特別提醒一點事件幀生成服務(wù)的調(diào)度周期很關(guān)鍵。如果系統(tǒng)里報警已經(jīng)觸發(fā)但分析掃描頻率是 5 分鐘一次事件幀的創(chuàng)建時間就會有最多 5 分鐘的延遲導致時間邊界偏移。關(guān)鍵設(shè)備的事件幀生成調(diào)度我會配置成 1 分鐘甚至更短。4.2 排查思路先用一小時數(shù)據(jù)做小閉環(huán)不管你是剛建好模板還是老模板改了參數(shù)都建議先做小范圍驗證而不要直接全量回填。具體做法是把時間范圍限定到最近 1 小時手動造一個觸發(fā)條件或等一個真實報警看事件幀能不能按預(yù)期生成時間邊界、數(shù)據(jù)引用、屬性值是否正確。有一次我?guī)鸵患一S排查對方說“事件幀模板建好了但批量回填結(jié)果全是錯的”。過去一看他直接對過去兩年歷史數(shù)據(jù)跑了全量回填生成了幾萬個事件幀時間邊界錯位的、屬性為空的、關(guān)聯(lián)測點無數(shù)據(jù)的混在一起根本沒法用。我讓他先刪掉這些垃圾幀然后把驗證范圍壓到最近 3 天先只跟蹤一臺泵跑通一條完整的生成鏈路。半天時間就定位到問題出在時區(qū)配置上——服務(wù)器用的 UTC觸發(fā)條件用的本地時間差 8 個小時所有事件幀都偏了。這個小閉環(huán)思路同樣適合調(diào)試訓練數(shù)據(jù)集先導出 10 個事件幀對應(yīng)的數(shù)據(jù)矩陣肉眼檢查曲線再導出 50 個做一次小模型訓練確認效果穩(wěn)定了再擴大到全部歷史事件幀。一步一步來問題能少踩一大半。4.3 獨家避坑心得模板、時區(qū)與標簽先說模板。模板一旦發(fā)布并生成了大量事件幀后續(xù)改動會有歷史兼容問題。比如你把屬性“FaultType”的枚舉從三個值改成四個值歷史事件幀里原來的屬性值不會自動遷移查詢和統(tǒng)計就可能出現(xiàn)斷檔。所以模板上線前一定要組織工藝、設(shè)備、生產(chǎn)幾方一起評審枚舉值盡量一次性定全。實在要改也要走變更流程把歷史幀的遷移評估清楚。再說時區(qū)。工業(yè)現(xiàn)場最容易踩的就是時區(qū)和夏令時。建議在設(shè)計階段就把所有時間字段以 UTC 存儲事件幀的觸發(fā)時間表達式里也盡量統(tǒng)一到 UTC展示層再轉(zhuǎn)換成本地時間。別小看這個問題我曾經(jīng)見過一個批次級事件幀的邊界因為時區(qū)配置不一致硬生生晚了一個小時導致和 DCS 側(cè)的操作記錄對不上。排查了整整兩天才找到根因。最后說標簽。盡量不要依賴運行人員空閑時手工錄入標簽。我在項目里推過一個辦法每天早上值班工程師花 15 分鐘在事件幀列表里快速過一遍前一天的異常事件用下拉菜單補錄故障類型和初步原因并把這個動作納入班組交接班流程。標簽質(zhì)量是靠流程保證的不是靠平臺功能保證的。有了這個日拱一卒的標簽積累年底回頭看你手里已經(jīng)攢下了一份高質(zhì)量的訓練數(shù)據(jù)集這就是最貴的資產(chǎn)。5. 在 AI 工作流里用好 Event Frames我的幾條具體建議5.1 把事件幀轉(zhuǎn)成模型訓練數(shù)據(jù)集的標準流程很多朋友問過我“事件幀有了怎么變成能訓練的數(shù)據(jù)集”我通常建議按下面這條流程走順序不能亂。第一步是事件幀查詢。按模板、時間范圍、屬性標簽篩選出目標事件幀集合。比如要訓練“振動異常是否軸承磨損”的二分類模型就篩出所有故障類型為“軸承磨損”的事件幀作為正樣本篩出運行正常但偶發(fā)波動的事件幀作為負樣本。第二步是原始數(shù)據(jù)抽取。對每個事件幀讀取關(guān)聯(lián)測點在時間區(qū)間內(nèi)的歷史數(shù)據(jù)。注意數(shù)據(jù)往往不是等間隔的需要重采樣到統(tǒng)一頻率。分類模型我常用 1 分鐘分辨率序列長度固定為窗口長度如果需要更高頻的振動信號分析則可能要 10 秒甚至 1 秒分辨率存儲開銷和計算開銷都會明顯增加。第三步是特征工程。對每個事件幀的序列數(shù)據(jù)提取統(tǒng)計特征比如均值、標準差、最大值、極差、變化率峰值、峰度等如果序列較長還可以做小波或頻譜特征。特征表最終會成為模型的一個輸入通道。第四步是構(gòu)建樣本表。每一行是一個事件幀包含樣本 ID事件幀 GUID、標簽屬性字段轉(zhuǎn)化而來、特征向量、數(shù)據(jù)矩陣路徑。這個表導成 CSV 或 Parquet就是我前面提到的訓練數(shù)據(jù)成品。第五步是劃分數(shù)據(jù)集。時間序列樣本千萬不要隨機劃分訓練集和測試集因為相鄰樣本之間存在時間自相關(guān)隨機劃分會造成信息泄漏、評估虛高。我統(tǒng)一按時間順序切分比如前 80% 的訓練集、后 20% 的測試集。這一點雖然基礎(chǔ)但很多團隊都會栽在這里。這套流程看起來簡單但如果沒有事件幀在前面做了時間和標簽的錨點每一步都會變成手工地獄。這也就是為什么說AI 項目的成敗往往在建模之前就已經(jīng)決定了。5.2 讓事件幀成為大模型可查詢的“企業(yè)記憶”工業(yè)現(xiàn)場積累的歷史事件幀本質(zhì)上是一座金礦。只是這座金礦的形態(tài)還是時間序列和結(jié)構(gòu)化表格大模型沒法直接挖掘。我目前在嘗試的一個方向是把事件幀轉(zhuǎn)成描述性文本再接入大模型做問答和輔助研判。具體做法是事件幀生成后用模板自動生成一段文本摘要涵蓋事件類型、開始結(jié)束時間、關(guān)聯(lián)設(shè)備、關(guān)鍵測點峰值、報警代碼、人工標簽字段。比如一段典型摘要長這樣“2024-11-02 03:17:00 至 2024-11-02 03:47:00P-101 離心泵發(fā)生振動異常事件。振動速度峰值 12.4 mm/s超過 10 mm/s 上限持續(xù)約 30 分鐘同時電機電流上升約 8%。相關(guān)報警代碼 A2287。處理措施切換至備用泵 P-102。故障原因標簽軸承磨損?!边@種摘要寫入向量庫后可以讓大模型回答“給我查一下 P-101 今年發(fā)生了幾次振動異常分別怎么處理的”。當用戶問“軸承磨損通常有什么前兆”時模型就能從歷史事件描述里檢索出相似的故障樣本總結(jié)出規(guī)律。事件幀在這個鏈路里扮演的是“結(jié)構(gòu)化的企業(yè)記憶”它限定了大模型的檢索范圍和上下文邊界既提高了回答準確率也降低了幻覺風險。我個人的判斷是大模型在工業(yè)領(lǐng)域的落地不太可能靠“海量原始數(shù)據(jù)直接訓練”更務(wù)實的路徑是先把有價值的事件用 Event Frames 這類機制沉淀成結(jié)構(gòu)化知識再變成大模型可以查詢的接口。這件事做得越早積累越厚后面 AI 應(yīng)用發(fā)揮的空間就越大。5.3 先建立事件字典再談算法選型最后一條建議是給所有正在規(guī)劃工業(yè) AI 項目的團隊的先別急著選大模型還是小模型先回去把“事件字典”這一課補齊。事件字典是什么就是一張經(jīng)過業(yè)務(wù)和技術(shù)共同確認的事件分類清單明確什么算一次事件、事件如何觸發(fā)、事件需要記錄哪些屬性、屬性有哪些枚舉取值。比如“離心泵振動異常事件”的定義就可以寫清楚當振動速度超過 10 mm/s 且持續(xù) 30 秒判定為一次振動異常事件事件屬性含故障類型、嚴重度等級、處理班組。這張事件字典既是 Event Frames 模板設(shè)計的依據(jù)也是未來 AI 模型標簽體系的基礎(chǔ)。我見過太多次這種場景團隊興致勃勃地搭了一套 AI 平臺過了幾個月發(fā)現(xiàn)根本沒有像樣的訓練數(shù)據(jù)因為當初沒人定義“什么是一次故障、什么是一次異?!?。反過來那些老老實實先把事件字典做透、把事件幀自動生成跑通的團隊哪怕算法用的不是最前沿的一年下來也攢下了幾千條高質(zhì)量樣本模型效果反而越做越好。所以如果你想在工業(yè)現(xiàn)場做 AI我的建議就是別從算法開始從事件開始。先把“什么值得記”想清楚再讓系統(tǒng)自動幫你記最后才是讓 AI 幫你分析。Event Frames 就是幫你完成前兩步的那把鑰匙。從我自己的經(jīng)驗來看Event Frames 這個名字聽起來“學術(shù)”用起來其實特別接地氣。它不解決算力問題不解決模型選型問題它只解決一個樸素的問題——讓數(shù)據(jù)有邊界、有語義、有記憶。而在 AI 時代恰恰是這件事成了決定工業(yè)智能項目能不能走通的那塊基石。