自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

【NCTS峰會回顧】京東物流樊宇:如何讓配送地址更準確——帶你走近京東物流大數(shù)據(jù)算法測試探索之路

開發(fā) 前端 算法
2019年10月26日,由Testin主辦的第二屆NCTS中國云測試行業(yè)峰會在京召開,此次峰會以“AI+未來”為主題,匯聚來自國內(nèi)外測試領域的知名專家學者、領先企業(yè)決策者、高層技術(shù)管理者、媒體從業(yè)者等,共同探討高端云測試技術(shù)。

2019年10月26日,由Testin主辦的第二屆NCTS中國云測試行業(yè)峰會在京召開,此次峰會以“AI+未來”為主題,匯聚來自國內(nèi)外測試領域的知名專家學者、領先企業(yè)決策者、高層技術(shù)管理者、媒體從業(yè)者等,共同探討高端云測試技術(shù),幫助測試從業(yè)者了解最前沿行業(yè)趨勢,及最新的行業(yè)實踐。

[[284798]]

會上,京東物流資深測試開發(fā)工程師樊宇做《如何讓配送地址更準確——帶你走近京東物流大數(shù)據(jù)算法測試探索之路》主題演講。樊宇指出,“做算法測試,首先要建立算法測試模型,然后獲得真實有效的歷史數(shù)據(jù),再完成算法相關(guān)接口的調(diào)用,最后,改進我們的測試過程。”

以下為樊宇演講實錄:

大家好,我先自我介紹一下,我來自京東物流,我在2013年加入京東,我們大數(shù)據(jù)算法測試大概是2016年底,2017年初逐漸開始的。我們最開始也做一些自動化測試,UI自動化,接口自動化,自動化測試工具平臺,還有數(shù)據(jù)集成。今天我給大家分享大數(shù)據(jù)算法方面的測試。

先介紹一下目錄,第一部分是項目背景,第二部分是算法模型建立,第三部分是測試數(shù)據(jù)的獲取,第四是算法測試執(zhí)行過程,然后是總結(jié),主要分這么幾部分。

首先我介紹一下技術(shù)背景,京東快遞從去年年底逐漸開始支持微信小程序下單了,原來京東只是能送快件,現(xiàn)在還可以上門取,所以說在微信小程序里面增加了這么一個功能叫做“京東快遞”,小程序界面當中做了自動提取關(guān)鍵字的算法,可以把整個地址都復制到微信小程序里,然后會把地址信息,電話、通訊錄提取出來,這個過程可以減少人工輸入的過程,提高我們的用戶體驗,因為大家的地址都是共享的,比如從一個應用復制出來放在另外一個應用,這樣就很方便。

這里有一個截圖,這是我們系統(tǒng)的界面,就是你輸入一個地址后下面自動把姓名、電話和詳細地址都提取出來,這個是我們的項目背景。

再說一下算法模型的建立,前面介紹我講的比較快,這部分講慢一點。我們想象一下,配送地址是很長的字符,S2、S2一直到S7,就是一級地址,二級地址,S6是姓名S7是電話。這個模型如何建立呢?

算法測試很多時候要建立模型,左側(cè)這部分是經(jīng)常用到的算法測試的模型,比如說第一個是準確率,召回率,大家如果做搜索相關(guān)測試都會了解一些,大家知道準確率、召回率就是一個真值表。例如期望為真,實際為真與期望為假;實際為假的這個統(tǒng)計是準確率的情況。召回率就是我期望結(jié)果是假,但實際上結(jié)果是真和期望結(jié)果為真,實際結(jié)果為真的情形,就是說有一部分的結(jié)果都是真值的情況,這個就是召回率。下一部分的概率,很多算法是用概率衡量的,最后一部分是余弦相似度,這在很多算法測試當中用的多一些,因為余弦相似度是衡量高倍向量結(jié)果,這會有很多維度,我們衡量兩個向量之間的差異多半是用余弦相似度比較,當然不限于文本的比較,其他的也是可以的。

既然是算法模型,我們就要考慮一下分子是什么?分母是什么?我們回頭看一下左側(cè)這四個統(tǒng)計模型,他們結(jié)果都有一個特點,就是0到1之間的一個數(shù),我們想象一下我們的分子如何構(gòu)建?分母如何構(gòu)建?

我們再回到剛才講的技術(shù)背景,我們被測算法應用其實是跨領域的,用現(xiàn)在經(jīng)常說的新詞就是跨界,一個是自然語言處理,另外是地理位置服務,這就和一般的算法測試不太一樣,是跨的這兩個領域的界限。大家都知道跨界這種東西一般是有難度的,可能和我們平時測試差別比較大一些。

最開始,我們會拿到用戶的是一個地址,這個地址我們可以認為是測試的最開始數(shù)據(jù),地址有兩部分,第一個地址就是寄件地址,第二個是收件地址,功能測試角度來講,我們可以把地址顛倒過來,收件地址作為寄件地址也可以,這樣可以增加測試覆蓋率,下一步就是涉及到地理編碼的概念,大家如果知道LBS測試功能,應該知道地理編碼的概念,一個是正向地理編碼還有一個是逆向。正向地理編碼就是我給你一個地址街道門牌號會生成經(jīng)緯度坐標,另外一個是給你一個經(jīng)緯度坐標,給你一個最近的地址,我們會對這兩個作為一個地理編碼的計算。然后會得到對應的坐標,根據(jù)坐標我們可以算一下距離,大家應該知道距離也可以用最簡單方式,就是算兩點之間的距離,我們用的也是這種方式,相對來講這種模型比較簡單。

但是我們要衡量轉(zhuǎn)換以后坐標是不是準確度,或者說原來的地址轉(zhuǎn)化是不是有問題,如果地址轉(zhuǎn)化差就會有差別,距離就會達到幾千米甚至說十幾公里的距離,所以我們轉(zhuǎn)化計算距離會計算閾值,低于這個閾值就是可接受的。

我們再繼續(xù),我們會統(tǒng)計計算正確轉(zhuǎn)換的地址數(shù)量,就是說有多少地址是轉(zhuǎn)換正確的,這個就是我們剛才說的分母,我們還會做一些過濾,就是說計算匹配范圍內(nèi)的地址轉(zhuǎn)換錯誤的地址數(shù)量。因為我們剛開始做的時候,京東配送不是全國都支持,現(xiàn)在都是全國支持了,當時只是北京、上海等部分地區(qū)支持,所以超出范圍不會被支持,所以我們要把這部分數(shù)據(jù)排除掉。最后我們再看一下這個數(shù)據(jù),我們相當于用召回率統(tǒng)計的,看一下地址的轉(zhuǎn)換有多少東西是有問題的,這個就是我們的算法模型的建立過程。

算法測試很多時候和我們的功能測試不太一樣,功能測試都是自己造的數(shù)據(jù),比如說訂單數(shù)據(jù),一些商家的數(shù)據(jù)還有一些其他的數(shù)據(jù),或者說用一些開發(fā)給定的原形中的數(shù)據(jù)。但是算法測試很多時候是用線上歷史數(shù)據(jù)做的,因此我們就會涉及到第三部分的內(nèi)容,就是測試數(shù)據(jù)的獲取與提取。

這個PPT大家看的不是太清楚,第一框架是“歷史數(shù)據(jù)”,左側(cè)是“運單數(shù)據(jù)”,中間這個框是“小程序日志數(shù)據(jù)”,最后一部分就是配送員PDA日志。因為我們有配送運單數(shù)據(jù),我們會把運單數(shù)據(jù)里所有有效的地址都拿出來,運單里就我剛才說的有兩個地址,一個是配送的收件地址,一個是取件地址,然后因為我們已經(jīng)妥投的,地址肯定是有效的,當然這個數(shù)據(jù)并不是我們小程序里面的,這是京東里原來的一些歷史數(shù)據(jù)。然后我們再說PDA這部分,它收集同用戶在較小時間內(nèi)地址變更的行為情況。為什么說是同一段時間內(nèi)較小時間呢?就是用戶輸入地址可能輸入的時候是輸入錯了,大家會想到的一種情況,本來是家的地址,但是實際上想輸入公司的,輸入以后就直接改了這個時間間隔會比較小一些,我們設定一個時間間隔,比如,一個小時或者兩個小時之內(nèi)變更的地址。

還有變更行為可能意味著前面的地址是輸入錯的,這塊我們都會作為一個輸入數(shù)據(jù)。最后一部分是配送員PDA日志數(shù)據(jù),配送的時候也會有一個經(jīng)緯度坐標的定位,我們會取這個經(jīng)緯度坐標去作為我們用戶的輸入,我需要再強調(diào)一下,配送員取件的時候也有異常數(shù)據(jù),比如說用戶下單下錯了,本來應該是往A地址發(fā),結(jié)果下的是B地址,這時候會給配送人員打電話,讓他往B地址取件,這時候PDA有變更記錄,配送員送件時也會產(chǎn)生上述類似的行為,我們會把變更記錄拿過來作為我們輸入數(shù)據(jù)。

我們實踐過程當中拿用戶的地址數(shù)據(jù)是相對來講比較復雜的,我們再考慮中間遇到的新問題,如何對新地址進行地址轉(zhuǎn)換,前面的S當中的地址來進行片段,這個其實和我們經(jīng)常用探索性測試很類似,大家想探索性測試屬于原有工程基礎上發(fā)現(xiàn)有沒有潛在問題,因為很多時候,最開始時候我們測試沒有介入之前都是開發(fā)根據(jù)以前的用戶反映到的問題找一些問題,發(fā)現(xiàn)一個解決一個,這樣效率比較低,體驗不是特別好。因此我們最主要的一點就是對新地址做一個處理,大家可以想像,我們看一下新地址的來源實際上有兩個來源,第一個來源是新配送區(qū)域,假設我所在城市原來是京東上門取件是不支持的但是現(xiàn)在支持了,這就屬于新的配送區(qū)域。還有一個情況更長更復雜一些,這個配送區(qū)域是支持的,但是新增了地址,比如我所在區(qū)域,北京朝陽區(qū)是支持的,但是這塊新修了一個小區(qū),小區(qū)是新的,這就屬于后一種情況,大家可以想一下這個問題如何解決。

這是我們這次講的最核心內(nèi)容,就是生成一個新坐標的情況,我們其實是用這種極坐標解決這個問題的。大家上學時候可能記得極坐標概念,這和傳統(tǒng)的笛卡兒坐標不一樣,一個坐標代表距離,一個坐標代表角度。我們把用戶所有的地址進行聚類,聚類以后我們會把簇的質(zhì)點做為圓心,我們會用兩重循環(huán)去生成一個新地址,然后再過濾一下,用這些地址得到可配送地址,因為有時候逆地址生成的不是可配送的,比如是某一個街道交叉路口或者公交車站,我們要把這些過濾掉然后做一個去重,比如,一個小區(qū)方圓幾公里,會把這個去重。小區(qū)我們測試時候會精確到每一個樓,并不需要精確到單元和樓層,因為這個對于地址來講其實是一樣的。

這部分是我們講的比較重要的一部分,就是算法測試執(zhí)行的過程。首先,先獲得歷史數(shù)據(jù),把歷史地址和坐標都拿出來,然后,進行地理編碼,根據(jù)地理編碼后進行計算坐標聚類,最后有效去重,去重以后做逆地理編碼計算,再生成一個新坐標,藍色這部分嚴格來講對于我們其他測試都屬于測試的準備階段,就是造數(shù)據(jù),但是我們的數(shù)據(jù)是根據(jù)真實數(shù)據(jù)生成的。我們看右半部分,這個其實是我們實際測試執(zhí)行的過程,我們會把這個地址作為分詞,我們會增加噪點和冗余信息,比如,增加姓名和電話,然后,調(diào)地址識別和轉(zhuǎn)換的接口,比較預期值,再根據(jù)預期值生成地理編碼,再比較我們的距離,如果這個距離大余閾值就有問題,如果小于閾值就是沒有問題的,這個就是我們整個測試過程的執(zhí)行。

重點說一下中間的過程,比如聚類這塊我講一下,大家如果對法測試有所了解應該會知道,比如常見聚類就是均值聚類,我們用的并不是均值聚類,因為數(shù)據(jù)量比較大。結(jié)合業(yè)務特點,京東配送站有一個經(jīng)緯度坐標,我們以這個經(jīng)緯度坐標作為初始簇點。然后以這個半徑范圍內(nèi)的坐標劃簇,如果這個坐標達不到簇內(nèi)數(shù)據(jù)量的要求,就把兩個配送站地址作為合并。如果說達到我們的要求,比如說我們這個簇要求一萬個座標點,如果超過一萬個我們就終止,聚類就結(jié)束了,然后按照簇的元素從大到小排序取前N個值,最后按照質(zhì)點生成極坐標,這就是我們聚類的過程。

地址轉(zhuǎn)化算法是算法類測試,那如何提供類似缺陷列表的內(nèi)容?大家想我做一個功能測試,不管手工測試還是自動化測試,測試完一輪都會產(chǎn)生一些Bug,我們提到缺陷管理系統(tǒng),但是我們算法測試,可能最后只是一個數(shù),比如召回率是80%或者90%,但是沒有缺陷的這種,對于一般來講產(chǎn)品、開發(fā)和測試本身就覺得不是特別喜歡,我們怎么提供這種類似于缺陷列表的功能呢?我們看一下是如何做的,取這些歷史記錄當中出現(xiàn)最多的前N個坐標對應的地址,然后取距離較大的前M個,這前M坐標肯定大于閾值的,然后我們在前N個當中選取前M個出現(xiàn)的地址,這就相當于一個TOP N的問題。我們會和工程師做核實,如果有問題,就作為缺陷貼到缺陷系統(tǒng)里或者直接發(fā)個郵件附帶一個表格,因為有的缺陷比較多,一輪測試發(fā)現(xiàn)幾百個,然后提供給開發(fā),開發(fā)根據(jù)缺陷列表看是程序問題還是數(shù)據(jù)問題還是其他的配置導致的問題。這樣的話比只是召回率通過不通過好,有一定說服力。

再看一下另外一個問題,如何生成入?yún)?,后臺是一個接口,輸入一個地址反饋S1到SN的地址,如果我們增加一個噪點呢?我們是這么做的,假如我這里有一個地址,北京市豐臺區(qū)樊羊路多少多少號,為什么去這里呢?這里有一個坑稍候給大家講。我們做一個分詞,北京市/豐臺區(qū)/樊羊路這么分。因為我自己姓樊就可以把我姓名加進去,就都是黃色,樊羊路后面多少號,樊宇再加上我手機號,這個模擬一個用戶真實收件地址或者取件地址,判斷這個系統(tǒng),因為都是樊,但立義不一樣,一個是街道,一個是姓,這就是增加了一種測試噪點。還有一種情況,把這個位置顛倒過來,姓名完了直接是手機號,最后輸入門牌號,因為我們看日志情況也有這種情況,就是順序不一樣是規(guī)定的,我們會把這個顛倒順序,這樣的話也會產(chǎn)生一定噪點。

最后這部分噪點,我們對應著一個寫字樓或者小區(qū),我們就把這些具體地址換成一個小區(qū)多少多少號樓,用戶很多時候也會用這種寄件,實際上都是一個地址,但表現(xiàn)形式不一樣,最后用這種形式替換。大家可以看一下有黃色字部分都相當于增加的噪點,這樣就可以增加我們轉(zhuǎn)化率測試的覆蓋率情況了,就可以更好發(fā)現(xiàn)轉(zhuǎn)換的算法存在的潛在問題。其實我們做的方法就是把街道當中一些涉及到姓氏提取出來,然后根據(jù)姓氏隨機生成一些名字。

如何加速我們測試執(zhí)行的過程呢?這塊我們用了并行的一些計算,因為我們用并行計算還有一個原因,地理編碼這種運算,逆地理編碼運算會很長,一個地址逆地理編碼大概需要幾百毫秒時間,累積出來會很多,所以我們用并行計算,讀取歷史數(shù)據(jù),信息不全這些都放在緩存里,地址可能有重復的,有緩存的話我們不用調(diào)接口,直接在緩存當中拿數(shù)據(jù),可以放在數(shù)據(jù)庫等地方,最后我們進行召回率的計算來得到我們所需要的結(jié)果,這樣就可以加速執(zhí)行、調(diào)試過程中就執(zhí)行一兩條就可以了,實際跑的時候用并行計算跑的。

最后我們再給大家介紹算法測試方法論,這個是我們團隊的理解,一般任何算法測試首先需要建立一個算法測試模型,像我們這個用的是召回率計算的,其他的可能召回率不合適,就得用余弦相似度。第二部分我們獲得歷史數(shù)據(jù),這是真實有效數(shù)據(jù),用它做回歸測試可以反映出有算法和沒有算法情況的前后對比。第三部分是算法相關(guān)接口,但是有些算法可能調(diào)其他的周邊接口,上下游接口可能都會有,就需要大家有這方面考慮。最后一部分是改進我們的測試過程,我們剛才講的如何生成新坐標就是我們的一個改進過程,這也是一種創(chuàng)新,還有一個是如何增加噪點,這種都屬于改進我們的測試過程。

這部分就給大家一個介紹,很多公司我想都要開始,或者逐漸想從事這種算法測試,算法測試究竟需要哪些方面的基礎?我給大家簡單做了總結(jié),第一部分就是要有數(shù)學基礎,我們這個案例當中涉及到的極坐標,距離等等都是屬于數(shù)學方面技術(shù)。你可能對開發(fā)算法不一定了解,這是一個純黑核,但是對自己的算法是需要有了解的,這就是建立算法模型,召回率計算,分母分子如何取都是需要考慮的。第三部分,自動化接口測試,我想很多團隊都有這個能力,因為接口比較快,基本上不會涉及到UI,都是通過接口觸發(fā)實際測試還有數(shù)據(jù)獲取的。第四部分是并行計算能力,大家可能需要多線程,多進程,分布式計算能力來提高測試速度。因為你不可能說一個測試跑一天還沒有跑完,因為開發(fā)很多需要等著上線的。還有一個是需要我們有數(shù)據(jù)挖掘的能力,就是我測試的這個東西需要從哪里獲取數(shù)據(jù),我要轉(zhuǎn)換成什么樣的數(shù)據(jù),這個是需要知道的。最后一部分我個人覺得所有的測試都需要掌握的一個東西,就是業(yè)務場景,不同業(yè)務場景的測試重點是不一樣的,導致我們用的一些算法模型,還有一些結(jié)果都會有一些差距。以上這幾點就是算法測試給大家的一些期望。

最后一部分,對未來做一個展望,因為我們現(xiàn)在是在線下做的測試,因此未來我們要做一個線上測試環(huán)境,就是把它完全放在線上采用我們的CI/CD,數(shù)據(jù)集成的方式去做,做完這個我們準備在運營期間,超區(qū)的測試,因為現(xiàn)在京東配送基本上已經(jīng)支持全國,但是有超區(qū)情況,超區(qū)就意味著分配是有問題的,本來是很近的,但是分配早幾公里之外的站點,這會導致運營效率會降低。我們會做京東第三方地址轉(zhuǎn)化測試,把它作為取件地址去做。因為京東物流也會接觸到很多商家,商家那種實際上都屬于第三方地址。

最后兩部分,就是非內(nèi)地的,就是國外地址,因為京東物流有很多國際化的業(yè)務,因為國外地址和國內(nèi)不一樣,因為很多都是英文,分子系統(tǒng)和咱們也不一樣,這塊以后都需要介入的。最后一部分就是我們準備降低一下我們?nèi)斯ぷR別的比重,因為現(xiàn)在我們很多東西還是人工識別的,有時候可能計算閾值很大,但是實際上情況可能是正常的,比如有一條河,河上有幾個橋,要過河取件肯定要過橋,過橋距離就會長,這時候就需要人工識別,我們以后會通過其他手段降低人工識別的難度。

以上就是我給大家做的分享。

 

責任編輯:張燕妮 來源: 51CTO
相關(guān)推薦

2016-06-17 14:19:52

數(shù)據(jù)中心

2019-11-26 17:52:18

AI 數(shù)據(jù)人工智能

2018-12-08 11:14:00

京東

2019-12-05 16:17:59

云計算行業(yè)科技

2024-10-15 08:14:51

2019-12-05 16:23:15

開發(fā)技能代碼

2015-12-29 17:06:17

大數(shù)據(jù)存儲

2019-11-26 17:58:47

系統(tǒng)運維架構(gòu)

2024-10-29 13:59:27

銳捷網(wǎng)絡京東物流

2016-07-29 14:31:00

京東

2019-03-12 08:56:51

京東JDK大數(shù)據(jù)平臺

2019-12-13 11:56:50

AI 數(shù)據(jù)人工智能

2015-06-23 11:04:44

京東物流

2019-12-13 11:58:21

AI 數(shù)據(jù)人工智能

2019-12-13 11:55:30

AI 數(shù)據(jù)人工智能

2016-09-21 15:35:45

Javascript單元測試

2017-01-10 15:22:34

京東容器集群

2018-07-11 06:06:20

物流倉儲運維數(shù)據(jù)庫

2016-05-16 12:55:11

智慧物流/京東
點贊
收藏

51CTO技術(shù)棧公眾號