作者| 阿里文娛測(cè)試開發(fā)專家 熙閆責(zé)編 | 夕顏
簡(jiǎn)介
優(yōu)酷搜索承擔(dān)著內(nèi)容分發(fā)場(chǎng)的頭部兵的重任,海量的視頻內(nèi)容都要依賴搜索觸達(dá)和呈現(xiàn)給 用戶,而且逐漸擴(kuò)大范圍,開始向阿里文娛全系產(chǎn)品提供搜索服務(wù)和能力。
面對(duì)如此復(fù)雜且對(duì)穩(wěn)定性、精準(zhǔn)性要求極高的系統(tǒng),質(zhì)量保障工作顯得尤為重要和極具挑 戰(zhàn)性。本文將為大家介紹視頻搜索的質(zhì)量體系是如何構(gòu)建和發(fā)揮作用的。
業(yè)務(wù)特點(diǎn)
1. 視頻搜索架構(gòu)特點(diǎn)
-
支持復(fù)雜多樣的上層業(yè)務(wù)場(chǎng)景,業(yè)務(wù)邏輯復(fù)雜;
-
從搜索開始到結(jié)果返回的整個(gè)業(yè)務(wù)鏈路長(zhǎng),涉及的模塊及外部依賴多;
-
算法依賴數(shù)據(jù),底層數(shù)據(jù)變更會(huì)引起上層算法結(jié)果變化。
2. 測(cè)試難點(diǎn)
-
業(yè)務(wù)鏈路長(zhǎng)且復(fù)雜,用例覆蓋率等難以進(jìn)行有效度量;
-
離線和實(shí)時(shí)數(shù)據(jù)變更如何影響業(yè)務(wù),數(shù)據(jù)質(zhì)量的監(jiān)控如何和業(yè)務(wù)緊密結(jié)合;
-
算法模塊存在復(fù)雜性及不可解釋性,算法效果難以進(jìn)行有效評(píng)估;
-
海量數(shù)據(jù)中單個(gè) badcase 無(wú)法說(shuō)明問(wèn)題,如何有效發(fā)掘共性的 badcase。
3. 質(zhì)量保障方案
工程質(zhì)量
1.回歸
回歸測(cè)試主要是上線發(fā)布前的測(cè)試,目的在于提前發(fā)現(xiàn) bug,保證發(fā)布質(zhì)量。目前各模塊 的回歸測(cè)試均已作為研發(fā)流程的一環(huán),交由研發(fā)自行進(jìn)行冒煙,不管是否走提測(cè)流程,均能在 一定程度上把控業(yè)務(wù)質(zhì)量。
我們根據(jù)鏈路的分層,針對(duì)各層模塊進(jìn)行了各模塊自身的功能回歸建設(shè)。各模塊測(cè)試用例 的自動(dòng)化回歸依托于冒煙平臺(tái),其可實(shí)現(xiàn)任意環(huán)境的快速回歸,目前已積累回歸用例 5000+, 定時(shí)線上巡檢,分鐘級(jí)發(fā)現(xiàn)問(wèn)題。
2.監(jiān)控
1)功能監(jiān)控 仍然是根據(jù)鏈路的模塊劃分,進(jìn)行分層監(jiān)控。監(jiān)控仍依托于冒煙平臺(tái),并存儲(chǔ)各模塊日常。
冒煙監(jiān)控?cái)?shù)據(jù)以及真實(shí) bug 數(shù)據(jù)。目前通過(guò)巡檢已累計(jì)發(fā)現(xiàn)線上 bug50+。具體冒煙監(jiān)控?cái)?shù)據(jù)大盤如下圖所示。
2)效果監(jiān)控線上效果監(jiān)控的目的在于快速發(fā)現(xiàn)線上效果問(wèn)題,保證線上質(zhì)量;此外通過(guò)固化每次效果
監(jiān)控?cái)?shù)據(jù),監(jiān)控線上效果問(wèn)題的長(zhǎng)期變化趨勢(shì),以輔助研發(fā)進(jìn)行算法迭代優(yōu)化,最大化利用人工評(píng)測(cè)數(shù)據(jù)。已經(jīng)形成了生成監(jiān)控集合->定時(shí)監(jiān)控->發(fā)現(xiàn)問(wèn)題->解決問(wèn)題閉環(huán)的處理機(jī)制。
算法質(zhì)量
1.?dāng)?shù)據(jù)
1)離線
借助集團(tuán)已有平臺(tái)的監(jiān)控能力,定制業(yè)務(wù)細(xì)則,監(jiān)控流程基本分為幾個(gè)階段:存在原始表,創(chuàng)建對(duì)應(yīng)表的分區(qū)及監(jiān)控規(guī)則,訂閱分區(qū)規(guī)則,原始表周期任務(wù)執(zhí)行結(jié)束自動(dòng)觸發(fā) dqc 上對(duì)應(yīng)表的對(duì)應(yīng)分區(qū)的規(guī)則,如果異常會(huì)根據(jù)訂閱內(nèi)容報(bào)警。
step1: 確定監(jiān)控哪些表。比如我們監(jiān)控 A 表,該節(jié)點(diǎn)監(jiān)控規(guī)則一旦失敗是否要中斷后續(xù)的 生產(chǎn)流程,如果需要中止后續(xù)的生產(chǎn)流程,那 stepn 配置強(qiáng)規(guī)則即可,此時(shí)要保證監(jiān)控規(guī)則是業(yè) 務(wù)合理的,當(dāng)然一旦中止數(shù)據(jù)生產(chǎn)流程,我們要承受住多方的考驗(yàn),節(jié)點(diǎn)多次失敗賬號(hào)健康分 會(huì)受影響,任務(wù)的執(zhí)行也會(huì)受影響;如果不需要中止后續(xù)的生產(chǎn)流程,有兩種方案,一是創(chuàng)建 影子表,監(jiān)控影子表(浪費(fèi)一個(gè)存儲(chǔ)周期的空間);二是所有規(guī)則置為弱規(guī)則(短信告警無(wú)法判斷 報(bào)警的嚴(yán)重程度)。實(shí)踐中,重要的寬表數(shù)據(jù)我們采用了監(jiān)控影子表方案,次重要的表采用了對(duì) 原始表全部配置弱規(guī)則的方案。
step2:在監(jiān)控平臺(tái)創(chuàng)建分區(qū),用來(lái)指定是要監(jiān)控哪天的數(shù)據(jù)。
step3:配置規(guī)則,規(guī)則可分為通用規(guī)則和特性規(guī)則。數(shù)據(jù)量重要度屬于 P0 級(jí),采用數(shù)據(jù)量 絕對(duì)值>閾值;同時(shí)采用了 7 天趨勢(shì)絕對(duì)值變動(dòng)在預(yù)警值在 10%,20%(不同業(yè)務(wù)閾值根據(jù)業(yè)務(wù) 需要設(shè)定)。表數(shù)據(jù)量突增和突降在優(yōu)酷場(chǎng)都不合理,所以采用了 7 天平均值波動(dòng)+絕對(duì)值模式。 通用規(guī)則是各字段通用的規(guī)則,基本包含是否非空,是否為 0 等等,體現(xiàn)在數(shù)據(jù)監(jiān)控上面就是 非空的數(shù)據(jù)量|數(shù)據(jù)占比變化趨勢(shì)是否符合預(yù)期,值域非 0 的的數(shù)據(jù)量|數(shù)據(jù)占比變化趨勢(shì)是否符 合預(yù)期。特性規(guī)則需要視業(yè)務(wù)特性而定,采取單字段 max、min、均值、總量,組合特征數(shù)量、 變化率、空置率等個(gè)性化定制規(guī)則。
step4:訂閱,支持短信、釘釘機(jī)器人、郵件等等。
2)實(shí)時(shí)
把握整個(gè)實(shí)時(shí)流式計(jì)算的業(yè)務(wù)系統(tǒng)有幾個(gè)關(guān)鍵點(diǎn):流式計(jì)算、數(shù)據(jù)服務(wù)、全鏈路、數(shù)據(jù)業(yè) 務(wù)(包括索引和摘要)。結(jié)合質(zhì)量保障體系的線上、線下全鏈路閉環(huán)的理論體系去設(shè)計(jì)我們的整 體質(zhì)量保障方案,如下圖所示:
2.算法
1)特征算子組件單測(cè)
UDF 在算法數(shù)據(jù)特征計(jì)算過(guò)程中是特別普遍的開發(fā)組件單元,實(shí)時(shí)和離線都有自己的 UDF 定義,UDF 也支持多種語(yǔ)言,UDF 本質(zhì)上是一個(gè)函數(shù),它以不同的工程資源形式附加到各個(gè)平 臺(tái)的項(xiàng)目中使用,UDF 的測(cè)試就可以簡(jiǎn)化成函數(shù)的測(cè)試,歸結(jié)為輸入輸出的類函數(shù)單測(cè)的模式。 我們復(fù)用統(tǒng)一框架的執(zhí)行能力設(shè)計(jì) UDF 單測(cè)模式如下:
UDF 從功能輸出來(lái)說(shuō)分為三類:
第一類是有固定規(guī)則和處理邏輯的,這種可以通過(guò)輸入輸出來(lái)構(gòu)建 case,判斷時(shí)候則判斷 固定的輸入是否等于輸出就行;
第二類則是一些通用的規(guī)則類或者一下非固定業(yè)務(wù)含義輸出的,這一類我們則通過(guò)正則匹 配或者通用規(guī)則來(lái)去校驗(yàn)結(jié)果;
第三類則是算法模型類,這種我們通過(guò)構(gòu)建算法的評(píng)測(cè)集合,去執(zhí)行評(píng)測(cè)集,獲得recall&accuracy 指標(biāo)閾值來(lái)進(jìn)行是是否通過(guò)校驗(yàn)。
2)feature 列級(jí)測(cè)試
列級(jí)特征則是將整個(gè)列的計(jì)算邏輯以 UDF 算子為單元組件進(jìn)行 DAG 邏輯編排,然后通過(guò) 編譯生成圖化邏輯來(lái)流式構(gòu)建特征列。計(jì)算引擎原理如圖:
列級(jí)特征本質(zhì)上就是一個(gè)圖化的 UDF 組合邏輯,可以看做是一個(gè)復(fù)雜圖化的計(jì)算函數(shù),包 含了很多子 UDF 的圖化遍歷的邏輯。構(gòu)建編譯器在列級(jí)圖化邏輯編排完成之后進(jìn)行編譯會(huì)得到 該列的 DAG 信息。這個(gè) DAG 信息就會(huì)作為列級(jí)的圖化邏輯屬性。當(dāng)列級(jí) feature 進(jìn)行邏輯執(zhí)行 的時(shí)候會(huì)解析該 DAG 信息進(jìn)行圖的遍歷依次執(zhí)行 UDF 算子。同樣的原理,我們?cè)跍y(cè)試構(gòu)建時(shí) 候我們構(gòu)造列級(jí)特征檢測(cè)的 case 集合。
特征既有數(shù)據(jù)含義,同時(shí)也具備部分業(yè)務(wù)應(yīng)用上的含義, 特征檢測(cè)我們可以結(jié)合數(shù)據(jù)規(guī)則和業(yè)務(wù)含義內(nèi)容共同制定特征檢測(cè)機(jī)制。通過(guò)構(gòu)建特征輸入集 來(lái)進(jìn)行圖化邏輯執(zhí)行得到特征值,通過(guò)特征值的檢測(cè)、特征分布、特征業(yè)務(wù)屬性檢測(cè)幾個(gè)維度 去完成特征檢測(cè)。這個(gè)時(shí)候我們會(huì)通過(guò)統(tǒng)一的 trace 策略機(jī)制去記錄每個(gè) UDF 的調(diào)用執(zhí)行情況, 以供追查 UDF 執(zhí)行錯(cuò)誤和異常情況。
3)全圖化索引測(cè)試
前面 UDF 是算子組件維度的,而特征 feature 是列維度的,索引全列則是以行為維度的, 每行綜合多列。而全列索引特征構(gòu)建是綜合多列 feature 的圖化邏輯形成的一個(gè) pipline。pipline 以引擎索引分類為一個(gè)完整的 Pipline,比如 OCG 就是一個(gè)全列的完整 Pipline。所以 Pipline 級(jí) 別的數(shù)據(jù)測(cè)試則是以行維度的數(shù)據(jù)。
3.效果
1)效果基線 對(duì)搜索整條鏈路以及鏈路上影響算法的重要模塊如意圖分析模塊都建設(shè)了效果基線。
a)搜索鏈路效果基線建設(shè)。
效果測(cè)試集必須是動(dòng)態(tài)的,這里采用 case 放在云文件或者數(shù)據(jù)平臺(tái),當(dāng)流量出現(xiàn)新詞的時(shí) 候隨時(shí)添加。要作為效果基線,必須保證測(cè)試集對(duì)應(yīng)的預(yù)期結(jié)果必須是準(zhǔn)確的,這里采用的機(jī) 制是評(píng)測(cè)同學(xué)維護(hù)。總體流程是評(píng)測(cè)同學(xué)在數(shù)據(jù)平臺(tái)維護(hù)效果基線 query、預(yù)期結(jié)果,代碼加載 數(shù)據(jù)進(jìn)行規(guī)則判斷,噪音消除,失敗報(bào)警。
-
規(guī)則:檢測(cè) TOP n 召回某種類型卡片,TOP n 只能召回某些 showids,聚合卡片中 TOPN 只能召回某些 showids,n 可配、showids 可配、卡片類型可配等等;
-
噪音消除:失敗重試、運(yùn)營(yíng)數(shù)據(jù)剔除、showid 可能出現(xiàn)在多種卡片,每種都需要相應(yīng)業(yè) 務(wù)邏輯。
使用場(chǎng)景:
-
搜索鏈路所有模塊發(fā)布卡口;
-
被列為 AB test 期間關(guān)注的指標(biāo)之一,指標(biāo)一旦失敗,實(shí)驗(yàn)回滾;
-
大流量桶的日常監(jiān)控,成功率要求 100%,一旦失敗必須及時(shí)修正。
b)意圖模塊
QP 的效果基線建設(shè)。方案:方案主要涉及意圖類型、測(cè)試集構(gòu)建、驗(yàn)證規(guī)則。效果基線要 check 哪些意圖呢?主要是從產(chǎn)品形態(tài)和算法使用情況來(lái)確定,每個(gè)意圖都涉及正樣本和負(fù)樣本;樣本數(shù)據(jù)取自線上已經(jīng)識(shí)別出的意圖數(shù)據(jù)然后人工審核后分別放在對(duì)應(yīng)的正樣本和負(fù)樣本,負(fù)樣本還有一部分 數(shù)據(jù)來(lái)自互斥意圖的正樣本數(shù)據(jù);規(guī)則:同一個(gè)意圖對(duì)于不同的算法使用意圖不同,比如人物, “郭德綱于謙”切詞后這個(gè)詞屬于人物,但是不應(yīng)該出人物卡。
使用場(chǎng)景:
-
發(fā)布卡口;
-
線上定時(shí)監(jiān)控:對(duì)于意圖模塊數(shù)據(jù)回流、代碼發(fā)布都會(huì)影響效果,數(shù)據(jù)回流是自動(dòng)觸發(fā), 數(shù)據(jù)是否正確未知,也就說(shuō)明線上定時(shí)監(jiān)控的必要性。
2)搜索效果影響面自動(dòng)評(píng)估
-
測(cè)試集構(gòu)建:線上真實(shí)流量按照 SQV 進(jìn)行分層、采樣(越偏頭部采樣密度越大),線上流 量映射到測(cè)試集;
-
評(píng)測(cè)規(guī)則:分析用戶使用搜索的習(xí)慣,對(duì)用戶經(jīng)常點(diǎn)擊的位置分別進(jìn)行比對(duì);
-
影響面計(jì)算:異常請(qǐng)求的 sqv 總和/所有 sqv 總和;
-
噪音消除:異常重試、去掉算法無(wú)關(guān)卡片,來(lái)保證影響面評(píng)測(cè)的準(zhǔn)確度。
3)指標(biāo)看板
將評(píng)測(cè)能力集成到監(jiān)控中,分鐘級(jí)運(yùn)行,產(chǎn)出效果指標(biāo)大盤,及時(shí)發(fā)現(xiàn)算法問(wèn)題并能指導(dǎo)算法優(yōu)化。
用戶體驗(yàn)
1.badcase 分類和挖掘
分析線上流量, badcase 挖掘主要集中在腰尾部高跳詞。除了流量分層還有一個(gè)重要的流 量就是實(shí)效性極高的熱點(diǎn)。
1)高跳 badcase 挖掘:通過(guò)競(jìng)品對(duì)比等手段檢測(cè)出多種類型的 badcase,badcase 會(huì)映射到 具體原因上,直接進(jìn)行專項(xiàng)優(yōu)化,優(yōu)化后的 case 會(huì)放入每次迭代,未優(yōu)化的 case 以 badcase 形 式存在 badcase 庫(kù),后續(xù)效果迭代會(huì)運(yùn)行這些數(shù)據(jù),以檢測(cè) badcase 的效果;
2)時(shí)效性分析:分析各大平臺(tái)的熱點(diǎn)內(nèi)容,與自身做對(duì)比,并加入了相關(guān)性過(guò)濾邏輯。運(yùn) 行機(jī)制:一天兩次,研發(fā)會(huì)及時(shí)處理報(bào)警內(nèi)容,同時(shí)會(huì)進(jìn)行長(zhǎng)期優(yōu)化,現(xiàn)在 badcase 比例已明 顯下降。
2.輿情處理閉環(huán)
依托優(yōu)酷輿情發(fā)現(xiàn)和處理平臺(tái)優(yōu)酷聲音,聚合用戶觀點(diǎn),針對(duì)搜不到、搜不好等問(wèn)題,做專項(xiàng)優(yōu)化,已解決 5 大類 badcase。