跳轉到主要內容
工程的博客

檢測大規模濫用:位置敏感哈希在超級工程

分享這篇文章

這是一個交叉博客磚和超級工程之間的工作。Yun倪超級機器學習的平台上是一個軟件工程師團隊,開爾文楚是技術主管工程師超級複雜的數據處理/講團隊,和約瑟夫•布Beplay体育安卓版本拉德利是一個軟件工程師在磚的機器學習團隊。


500萬超級旅行被全球用戶每日,超級工程師是很重要的,以確保數據是準確的。如果正確使用,元數據和彙總數據可以快速檢測平台的濫用,從垃圾郵件假賬戶和支付欺詐。Beplay体育安卓版本放大信號正確的數據使檢測更準確,因此,更可靠。

在我們的係統和其他應對這一挑戰,超級工程和磚一起工作做出貢獻位置敏感哈希(激光衝徊化)Apache 2.1火花。激光衝徊化是一種隨機算法和哈希技術常用於大規模機器學習任務包括集群和近似最近鄰搜索

在本文中,我們將演示如何使用這個強大的工具由超級大規模檢測欺詐旅行。

為什麼激光衝徊化?

超級激光衝徊化工程實施之前,我們使用了N ^ 2的方法篩選旅行;雖然準確,但最終N ^ 2方法耗時太長,volume-intensive, hardware-reliant乳房的大小和規模。

激光衝徊化的總體想法是使用一個家庭功能(稱為激光衝徊化家庭)的散列數據點到水桶,這樣彼此附近的數據點都位於相同的桶有高概率,當數據點遠離對方很可能在不同的桶。這使得它更容易識別旅行與不同程度的重疊。

作為參考,與無數激光衝徊化是一種多用途的技術應用,包括:

  • Near-duplicate檢測:激光衝徊化通常用於刪除處理大量的文件,網頁和其他文件。
  • 全基因組關聯研究:生物學家通常使用激光衝徊化識別基因組數據庫中類似的基因表達。
  • 大型圖片搜索:穀歌使用激光衝徊化連同PageRank來構建他們的圖像搜索技術VisualRank
  • 音頻/視頻指紋識別:在多媒體技術、激光衝徊化被廣泛用作指紋識別技術的a / V數據。

激光衝徊化在超級

主要用例在超級激光衝徊化檢測類似旅行基於他們的空間屬性,方法識別欺詐性的司機。超級工程師在這個用例在2016年引發峰會,在那裏他們討論我們的團隊背後的動機引發框架上使用激光衝徊化廣播加入所有的旅行和篩選欺詐性的。我們使用激光衝徊化引發的動機是3倍:

  1. 火花是超級積分的操作,很多內部團隊目前使用火花為各種類型的複雜數據處理包括機器學習、空間數據處理、時間序列計算,分析和預測,以及臨時數據科學探索。事實上,超級使用幾乎所有的組件(如火花MLlib,火花SQL,火花流,直接抽樣處理兩個紗和便;因為我們的基礎設施和工具圍繞著火花,我們的工程師可以創建和管理容易引發應用。
  2. 火花使它有效的進行數據清洗和特性工程之前,任何實際的機器學習,數據要快得多。超級的高容量收集的數據使得解決這一問題的基本方法不能攀登的和非常緩慢。
  3. 我們不需要這個方程的精確解,所以沒有需要購買和維護額外的硬件。在這種情況下,近似為我們提供足夠的信息來做出判斷潛在的欺詐活動,在這種情況下,足以解決我們的問題。激光衝徊化讓我們貿易一些精密節省大量的硬件資源。

由於這些原因,解決這個問題通過部署激光衝徊化火花是正確的選擇對我們的業務目標:規模、規模、和規模。

在高級別上,我們的方法使用激光衝徊化有三個步驟。首先,我們創建一個特征向量為每個旅行通過分解成麵積相等大小的片段。然後,我們散列向量MinHashJaccard距離函數。最後,我們做相似加入批或實時搜索。檢測欺詐的基本蠻力的方法相比,我們的數據集使火花工作更快完成一個完整的數量級(約55小時N ^ 2 4小時方法使用激光衝徊化)。

API教程

最好的展示激光衝徊化是如何工作的,我們將使用MinHashLSH在走過的一個例子維基百科提取(WEX)數據集找到類似的文章。

每個激光衝徊化家庭與它度量空間。在火花2.1中,有兩個激光衝徊化估計:

  • BucketedRandomProjectionLSH為歐氏距離
  • MinHashLSH Jaccard距離

在這個場景中,我們將使用MinHashLSH自從我們將與實值特征向量的單詞計數。

加載原始數據

在建立我們的火花集群和安裝WEX數據集,我們上傳WEX的樣本數據HDFS基於我們的集群大小。火花的外殼,我們在HDFS加載示例數據

/ /讀抽樣HDFS進口org.apache.spark.ml.feature._進口org.apache.spark.ml.linalg._進口org.apache.spark.sql.types._val df = spark.read.option (“分隔符”,“t \”). csv (“/ user / hadoop / testdata.tsv”)val dfUsed = df.select(坳(“_c1”)。作為(“標題”)、坳(“_c4”)。作為(“內容”))。過濾器(坳(“內容”)! = = null)dfUsed.show ()
控製台輸出顯示維基百科的前20行提取(WEX)數據集
表示為維基百科文章標題和內容。

圖1顯示了我們之前的結果代碼,顯示文章標題和主題。我們將使用內容哈希鍵和大約找到類似維基百科的文章下麵的實驗。

準備特征向量

MinHash是一種很常見的激光衝徊化技術快速估算相似的兩個集。在MinHashLSH在火花中實現,我們將每組表示為一個二進製稀疏向量。在這一步中,我們將維基百科的內容轉換成向量。

使用下麵的代碼功能的工程,我們將文章內容分為單詞(編譯器),創建單詞統計的特征向量(CountVectorizer)和刪除空的文章:

/ /標記wiki內容val記號賦予器=記號賦予器().setInputCol (“內容”).setOutputCol (“單詞”)val wordsDf = tokenizer.transform (dfUsed)/ /單詞計數為每個wiki內容向量val vocabSize =1000000val cvModel: CountVectorizerModel =CountVectorizer () .setInputCol (“單詞”).setOutputCol (“特征”).setVocabSize vocabSize .setMinDF (10).fit (wordsDf)val isNoneZeroVector = udf ({v:向量= >v。numNonzeros >0},DataTypes.BooleanType)val vectorizedDf = cvModel.transform wordsDf .filter (isNoneZeroVector(坳(“特征”))).select(坳(“標題”)、坳(“特征”))vectorizedDf.show ()
控製台輸出顯示維基百科的前20行提取(WEX)數據集轉換成二進製稀疏向量
特性工程代碼之後,維基百科的內容轉換為二進製稀疏向量。

適合和查詢一個激光衝徊化模型

為了使用MinHashLSH,我們首先滿足MinHashLSH模型featurized數據使用下麵的命令:

val mh =MinHashLSH () .setNumHashTables (3).setInputCol (“特征”).setOutputCol (“hashValues”)val模型= mh.fit (vectorizedDf)

我們用激光衝徊化可以使幾種類型的查詢模型,但是對於本教程的目的,我們首先運行一個特性轉換數據集:

model.transform (vectorizedDf)。顯示()

這個命令為我們提供了散列值,它可以用於手動連接和功能。

控製台輸出顯示維基百科提取(WEX)數據集與向量由MinHashLSH的新列
MinHashLSH將添加一個新列來存儲散列。每個散列向量的表示為一個數組。

接下來,我們運行一個近似最近鄰搜索尋找最接近我們的目標數據點。為了演示,我們大約搜索文章內容匹配的短語美國

val關鍵=向量。稀疏(vocabSize Seq (cvModel.vocabulary.indexOf(“聯合”),1.0),(cvModel.vocabulary.indexOf(“州”),1.0)))val k=40模型。approxNearestNeighbors (vectorizedDf,鑰匙,k)。顯示()
控製台輸出顯示的結果最近鄰搜索維基百科提取(WEX)數據集
一個近似最近鄰搜索找到相關的維基百科文章“美國”。

最後,我們運行一個近似相似加入找到類似的相同的數據集內對文章:

//自我加入val閾值=0.8模型。approxSimilarityJoin (vectorizedDf vectorizedDf閾值)。過濾器(“distCol ! = 0”)。顯示()

當我們使用自我加入,下麵,我們也可以加入不同的數據集來得到相同的結果。

控製台輸出顯示一個近似相似加入維基百科的文章列表
一個近似相似加入列表類似維基百科的文章,哈希表的數量。

圖5展示了如何設置的數量哈希表。的近似相似加入和近似最近鄰命令,哈希表的數量可以用來運行時間之間的權衡和假陽性率(或者)。增加哈希表的數量將增加的準確性(積極的),而且程序的溝通成本和運行時間。默認情況下,哈希表的數量設置為1。

獲得額外的練習使用激光衝徊化在火花2.1中,您也可以運行小火花分布的例子BucketRandomProjectionLSHMinHashLSH

性能測試

為了測量性能,我們基準測試的實現MinHashLSH WEX數據集。使用一個AWS雲,我們使用16執行人(m3。超大實例)進行近似最近鄰搜索和近似相似加入WEX樣本數據集。

圖表顯示性能比較
numHashTables = 5,近似最近鄰跑2 x的速度比全掃描(如圖所示)。numHashTables = 3,近似相似加入跑3 x-5x速度比完整的加入和過濾器(左)所示。

在上麵的表中,我們可以看到,近似最近鄰跑2 x的速度比全掃描與哈希表的數量設置為5,而近似相似加入跑3 x-5x更快取決於輸出行和哈希表的數量。

我們的實驗也表明,盡管他們的短期時間,實現高精度的算法相比,蠻力方法的結果作為地麵實況。同時,近似最近鄰搜索準確率達到85%返回的40行,而我們的近似相似加入成功發現93%附近的雙行。這-準確率權衡法則使得激光衝徊化一個強大的工具在檢測欺詐每天往返tb的數據。

下一個步驟

雖然我們的激光衝徊化模型幫助司機超級識別欺詐活動,我們的工作還遠遠沒有完成。在我們最初的激光衝徊化的實現,我們計劃功能部署在將來的版本中。優先級高的功能包括:

  1. 火星- 18450:除了指定數量的哈希表需要完成搜索,這個新功能用戶定義的數量在每個哈希表哈希函數。這種變化還將提供全力支持和/或複合擴增。
  2. 火星- 18082&火星- 18083:還有其他的激光衝徊化家庭我們想實現。這兩個更新將使一些抽樣之間的漢明距離兩個數據點和隨機投影的跡象餘弦距離中常用的機器學習任務。
  3. 火星- 18454:第三個特性將提高近似最近鄰搜索的API。這個新的搜索,multi-probe相似性搜索可以提高搜索質量沒有要求大量的哈希表。

我們歡迎你的反饋我們的項目將繼續發展和規模以上減少許多其他人。

免費試著磚
看到所有工程的博客的帖子
Baidu
map