因子分解機(FM) +場感知分解機 (FFM) 入門
前言
FM和FFM模型是最近幾年提出的模型,憑藉其在資料量比較大並且特徵稀疏的情況下,仍然能夠得到優秀的效能和效果的特性,屢次在各大公司舉辦的CTR預估比賽中獲得不錯的戰績。在計算廣告領域,點選率CTR(click-through rate)和轉化率CVR(conversion rate)是衡量廣告流量的兩個關鍵指標。準確的估計CTR、CVR對於提高流量的價值,增加廣告收入有重要的指導作用。預估CTR/CVR,業界常用的方法有人工特徵工程 + LR、GBDT+ LR[1][2][3]、FM(Factorization Machine)[2][7]和FFM[9]模型。在這些模型中,FM和FFM近年來表現突出,分別在由Criteo和Avazu舉辦的CTR預測競賽中奪得冠軍
FM原理
FM(Factorization Machine)是由Konstanz大學Steffen Rendle於2010年最早提出的,旨在解決稀疏資料下的特徵組合問題[7]。以一個示例引入FM模型。假設一個廣告分類的問題,根據使用者和廣告位相關的特徵,預測使用者是否點選了廣告。源資料如下[8]
Clicked? | Country | Day | Ad_type |
---|---|---|---|
1 | USA | 26/11/15 | Movie |
0 | China | 1/7/14 | Game |
1 | China | 19/2/15 | Game |
"Clicked?"是label,Country、Day、Ad_type是特徵。由於三種特徵都是categorical型別的,需要經過獨熱編碼(One-Hot Encoding)轉換成數值型特徵。
Clicked? | Country=USA | Country=China | Day=26/11/15 | Day=1/7/14 | Day=19/2/15 | Ad_type=Movie | Ad_type=Game |
---|---|---|---|---|---|---|---|
1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 |
0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 |
1 | 0 | 1 | 0 | 0 | 1 | 0 | 1 |
由上表可以看出,經過One-Hot編碼之後,大部分樣本資料特徵是比較稀疏的。上面的樣例中,每個樣本有7維特徵,但平均僅有3維特徵具有非零值。實際上,這種情況並不是此例獨有的,在真實應用場景中這種情況普遍存在。例如,CTR/CVR預測時,使用者的性別、職業、教育水平、品類偏好,商品的品類等,經過One-Hot編碼轉換後都會導致樣本資料的稀疏性。特別是商品品類這種型別的特徵,如商品的末級品類約有550個,採用One-Hot編碼生成550個數值特徵,但每個樣本的這550個特徵,有且僅有一個是有效的(非零)。由此可見,資料稀疏性是實際問題中不可避免的挑戰。
One-Hot編碼的另一個特點就是導致特徵空間大。例如,商品品類有550維特徵,一個categorical特徵轉換為550維數值特徵,特徵空間劇增。
同時通過觀察大量的樣本資料可以發現,某些特徵經過關聯之後,與label之間的相關性就會提高。例如,“USA” 與 “Thanksgiving” 、“China”與“Chinese New Year”這樣的關聯特徵,對使用者的點選有著正向的影響。換句話說,來自“China”的使用者很可能會在“Chinese New Year”有大量的瀏覽、購買行為,而在“Thanksgiving”卻不會有特別的消費行為。這種關聯特徵與label的正向相關性在實際問題中是普遍存在的,如“化妝品”類商品與“女”性,“球類運動配件”的商品與“男”性,“電影票”的商品與“電影”品類偏好等。因此,引入兩個特徵的組合是非常有意義的。
多項式模型是包含特徵組合的最直觀的模型。在多項式模型中,特徵 和 的組合採用 表示,即 和 都非零時,組合特徵才有意義。從對比的角度,本文只討論二階多項式模型。模型的表示式如下
(1)
其中,代表樣本的特徵數量,是第 個特徵的值,、、 是模型引數。
從公式(1)可以看出,組合特徵的引數一共有 個,任意兩個引數都是獨立的。然而,在資料稀疏性普遍存在的實際應用場景中,二次項引數的訓練是很困難的。其原因是,每個引數 的訓練需要大量 和 都非零的樣本;由於樣本資料本來就比較稀疏,滿足“和 都非零”的樣本將會非常少。訓練樣本的不足,很容易導致引數 不準確,最終嚴重影響模型的效能。
那麼,如何解決二次項引數的訓練問題呢?矩陣分解提供了一種解決思路。在model-based的協同過濾中,一個rating矩陣可以分解為user矩陣和item矩陣,每個user和item都可以採用一個隱向量表示[8]。比如在下圖中的例子中,我們把每個user表示成一個二維向量,同時把每個item表示成一個二維向量,兩個向量的點積就是矩陣中user對item的打分。
類似地,所有二次項引數 可以組成一個對稱陣 (為了方便說明FM的由來,對角元素可以設定為正實數),那麼這個矩陣就可以分解為 , 的第 列便是第 維特徵的隱向量。換句話說,每個引數 ,這就是FM模型的核心思想。因此,FM的模型方程為(本文不討論FM的高階形式)
(2)
其中,是第 維特徵的隱向量,代表向量點積。隱向量的長度為(),包含 個描述特徵的因子。根據公式(2),二次項的引數數量減少為 個,遠少於多項式模型的引數數量。另外,引數因子化使得 的引數和 的引數不再是相互獨立的,因此我們可以在樣本稀疏的情況下相對合理地估計FM的二次項引數。具體來說,和 的係數分別為 和 ,它們之間有共同項 。也就是說,所有包含“的非零組合特徵”(存在某個,使得 )的樣本都可以用來學習隱向量 ,這很大程度上避免了資料稀疏性造成的影響。而在多項式模型中,和 是相互獨立的。
顯而易見,公式(2)是一個通用的擬合方程,可以採用不同的損失函式用於解決迴歸、二元分類等問題,比如可以採用MSE(Mean Square Error)損失函式來求解迴歸問題,也可以採用Hinge/Cross-Entropy損失來求解分類問題。當然,在進行二元分類時,FM的輸出需要經過sigmoid變換,這與Logistic迴歸是一樣的。直觀上看,FM的複雜度是 。但是,通過公式(3)的等式,FM的二次項可以化簡,其複雜度可以優化到 [7]。由此可見,FM可以線上性時間對新樣本作出預測。
(3)
下面給出詳細證明過程:
其中第(1)步到第(2)步,這裡用AA表示係數矩陣VV的上三角元素,BB表示對角線上的交叉項係數。由於係數矩陣VV是一個對稱陣,所以下三角與上三角相等,有下式成立:
我們再來看一下FM的訓練複雜度,利用SGD(Stochastic Gradient Descent)訓練模型。模型各個引數的梯度如下:
(4)
其中, 是隱向量 的第 個元素。由於只與 有關,而與 無關,在每次迭代過程中,只需計算一次所有 的 ,就能夠方便地得到所有 的梯度。顯然,計算所有的 的複雜度是;已知時,計算每個引數梯度的複雜度是 ;得到梯度後,更新每個引數的複雜度是 ;模型引數一共有 個。因此,FM引數訓練的複雜度也是 。綜上可知,FM可以線上性時間訓練和預測,是一種非常高效的模型。
FM與其他模型的對比
FM是一種比較靈活的模型,通過合適的特徵變換方式,FM可以模擬二階多項式核的SVM模型、MF模型、SVD++模型等[7]。
相比SVM的二階多項式核而言,FM在樣本稀疏的情況下是有優勢的;而且,FM的訓練/預測複雜度是線性的,而二項多項式核SVM需要計算核矩陣,核矩陣複雜度就是N平方。
相比MF而言,我們把MF中每一項的rating分改寫為,從公式(2)中可以看出,這相當於只有兩類特徵 和 的FM模型。對於FM而言,我們可以加任意多的特徵,比如user的歷史購買平均值,item的歷史購買平均值等,但是MF只能侷限在兩類特徵。SVD++與MF類似,在特徵的擴充套件性上都不如FM,在此不再贅述。
FFM原理
FFM(Field-aware Factorization Machine)最初的概念來自Yu-Chin Juan(阮毓欽,畢業於中國臺灣大學,現在美國Criteo工作)與其比賽隊員,是他們借鑑了來自Michael Jahrer的論文[14]中的field概念提出了FM的升級版模型。通過引入field的概念,FFM把相同性質的特徵歸於同一個field。以上面的廣告分類為例,“Day=26/11/15”、“Day=1/7/14”、“Day=19/2/15”這三個特徵都是代表日期的,可以放到同一個field中。同理,商品的末級品類編碼生成了550個特徵,這550個特徵都是說明商品所屬的品類,因此它們也可以放到同一個field中。簡單來說,同一個categorical特徵經過One-Hot編碼生成的數值特徵都可以放到同一個field,包括使用者性別、職業、品類偏好等。在FFM中,每一維特徵 xixi,針對其它特徵的每一種field fjfj,都會學習一個隱向量 vi,fjvi,fj。因此,隱向量不僅與特徵相關,也與field相關。也就是說,“Day=26/11/15”這個特徵與“Country”特徵和“Ad_type"特徵進行關聯的時候使用不同的隱向量,這與“Country”和“Ad_type”的內在差異相符,也是FFM中“field-aware”的由來。
假設樣本的 個特徵屬於個field,那麼FFM的二次項有 個隱向量。而在FM模型中,每一維特徵的隱向量只有一個。FM可以看作FFM的特例,是把所有特徵都歸屬到一個field時的FFM模型。根據FFM的field敏感特性,可以匯出其模型方程。
(4)
其中,是第 個特徵所屬的field。如果隱向量的長度為 ,那麼FFM的二次引數有 個,遠多於FM模型的 個。此外,由於隱向量與field相關,FFM二次項並不能夠化簡,其預測複雜度是 。
下面以一個例子簡單說明FFM的特徵組合方式[9]。輸入記錄如下
User | Movie | Genre | Price |
---|---|---|---|
YuChin | 3Idiots | Comedy, Drama | $9.99 |
這條記錄可以編碼成5個特徵,其中“Genre=Comedy”和“Genre=Drama”屬於同一個field,“Price”是數值型,不用One-Hot編碼轉換。為了方便說明FFM的樣本格式,我們將所有的特徵和對應的field對映成整數編號。
Field name | Field index | Feature name | Feature index |
---|---|---|---|
User | 1 | User=YuChin | 1 |
Movie | 2 | Movie=3Idiots | 2 |
Genre | 3 | Genre=Comedy | 3 |
Price | 4 | Genre=Drama | 4 |
Price | 5 |
那麼,FFM的組合特徵有10項,如下圖所示。
其中,紅色是field編號,藍色是特徵編號,綠色是此樣本的特徵取值。二次項的係數是通過與特徵field相關的隱向量點積得到的,二次項共有 個。
FFM實現
Yu-Chin Juan實現了一個C++版的FFM模型,原始碼可從Github下載[10]。這個版本的FFM省略了常數項和一次項,模型方程如下。
(5)
其中,是非零特徵的二元組合,是特徵,屬於field ,是特徵對field 的隱向量。此FFM模型採用logistic loss作為損失函式,和L2懲罰項,因此只能用於二元分類問題。
其中, 是第 個樣本的label,是訓練樣本數量,是懲罰項係數。模型採用SGD優化,優化流程如下。
參考 , 下面簡單解釋一下FFM的SGD優化過程。
演算法的輸入 、、 分別是訓練樣本集、驗證樣本集和訓練引數設定。
- 根據樣本特徵數量()、field的個數()和訓練引數(),生成初始化模型,即隨機生成模型的引數;
- 如果歸一化引數 為真,計算訓練和驗證樣本的歸一化係數,樣本 i 的歸一化係數為:
- 對每一輪迭代,如果隨機更新引數 為真,隨機打亂訓練樣本的順序;
- 對每一個訓練樣本,執行如下操作
- 計算每一個樣本的FFM項,即公式(5)中的輸出 ;
- 計算每一個樣本的訓練誤差,如演算法所示,這裡採用的是交叉熵損失函式 ;
- 利用單個樣本的損失函式計算梯度,再根據梯度更新模型引數;
- 對每一個驗證樣本,計算樣本的FFM輸出,計算驗證誤差;
- 重複步驟3~5,直到迭代結束或驗證誤差達到最小。
在SGD尋優時,程式碼採用了一些小技巧,對於提升計算效率是非常有效的。
第一,梯度分步計算。採用SGD訓練FFM模型時,只採用單個樣本的損失函式來計算模型引數的梯度。
上面的公式表明,與具體的模型引數無關。因此,每次更新模型時,只需計算一次,之後直接呼叫 的值即可。對於更新 個模型引數,這種方式能夠極大提升運算效率。
第二,自適應學習率。此版本的FFM實現沒有采用常用的指數遞減的學習率更新策略,而是利用 nfknfk 個浮點數的臨時空間,自適應地更新學習率。學習率是參考AdaGrad演算法計算的[11],按如下方式更新
其中,是特徵 對field 隱向量的一個元素,元素下標未標出;是損失函式對引數 的梯度;是第 次迭代的梯度;是初始學習率。可以看出,隨著迭代的進行,每個引數的歷史梯度會慢慢累加,導致每個引數的學習率逐漸減小。另外,每個引數的學習率更新速度是不同的,與其歷史梯度有關,根據AdaGrad的特點,對於樣本比較稀疏的特徵,學習率高於樣本比較密集的特徵,因此每個引數既可以比較快速達到最優,也不會導致驗證誤差出現很大的震盪。
第三,OpenMP多核平行計算。OpenMP是用於共享記憶體並行系統的多處理器程式設計的編譯方案,便於移植和多核擴充套件[12]。FFM的原始碼採用了OpenMP的API,對引數訓練過程SGD進行了多執行緒擴充套件,支援多執行緒編譯。因此,OpenMP技術極大地提高了FFM的訓練效率和多核CPU的利用率。在訓練模型時,輸入的訓練引數ns_threads指定了執行緒數量,一般設定為CPU的核心數,便於完全利用CPU資源。
第四,SSE3指令並行程式設計。SSE3全稱為資料流單指令多資料擴充套件指令集3,是CPU對資料層並行的關鍵指令,主要用於多媒體和遊戲的應用程式中[13]。SSE3指令採用128位的暫存器,同時操作4個單精度浮點數或整數。SSE3指令的功能非常類似於向量運算。例如, 和 採用SSE3指令相加(aa 和 bb 分別包含4個數據),其功能是 中的4個元素與 中4個元素對應相加,得到4個相加後的值。採用SSE3指令後,向量運算的速度更加快捷,這對包含大量向量運算的FFM模型是非常有利的。
除了上面的技巧之外,FFM的實現中還有很多調優技巧需要探索。例如,程式碼是按field和特徵的編號申請引數空間的,如果選取了非連續或過大的編號,就會造成大量的記憶體浪費;在每個樣本中加入值為1的新特徵,相當於引入了因子化的一次項,避免了缺少一次項帶來的模型偏差等。
FFM應用
在DSP的場景中,FFM主要用來預估站內的CTR和CVR,即一個使用者對一個商品的潛在點選率和點選後的轉化率。
CTR和CVR預估模型都是線上下訓練,然後用於線上預測。兩個模型採用的特徵大同小異,主要有三類:使用者相關的特徵、商品相關的特徵、以及使用者-商品匹配特徵。使用者相關的特徵包括年齡、性別、職業、興趣、品類偏好、瀏覽/購買品類等基本資訊,以及使用者近期點選量、購買量、消費額等統計資訊。商品相關的特徵包括所屬品類、銷量、價格、評分、歷史CTR/CVR等資訊。使用者-商品匹配特徵主要有瀏覽/購買品類匹配、瀏覽/購買商家匹配、興趣偏好匹配等幾個維度。
為了使用FFM方法,所有的特徵必須轉換成“field_id:feat_id:value”格式,field_id代表特徵所屬field的編號,feat_id是特徵編號,value是特徵的值。數值型的特徵比較容易處理,只需分配單獨的field編號,如使用者評論得分、商品的歷史CTR/CVR等。categorical特徵需要經過One-Hot編碼成數值型,編碼產生的所有特徵同屬於一個field,而特徵的值只能是0或1,如使用者的性別、年齡段,商品的品類id等。除此之外,還有第三類特徵,如使用者瀏覽/購買品類,有多個品類id且用一個數值衡量使用者瀏覽或購買每個品類商品的數量。這類特徵按照categorical特徵處理,不同的只是特徵的值不是0或1,而是代表使用者瀏覽或購買數量的數值。按前述方法得到field_id之後,再對轉換後特徵順序編號,得到feat_id,特徵的值也可以按照之前的方法獲得。
CTR、CVR預估樣本的類別是按不同方式獲取的。CTR預估的正樣本是站內點選的使用者-商品記錄,負樣本是展現但未點選的記錄;CVR預估的正樣本是站內支付(發生轉化)的使用者-商品記錄,負樣本是點選但未支付的記錄。構建出樣本資料後,採用FFM訓練預估模型,並測試模型的效能。
#(field) | #(feature) | AUC | Logloss | |
---|---|---|---|---|
站內CTR | 39 | 2456 | 0.77 | 0.38 |
站內CVR | 67 | 2441 | 0.92 | 0.13 |
由於模型是按天訓練的,每天的效能指標可能會有些波動,但變化幅度不是很大。這個表的結果說明,站內CTR/CVR預估模型是非常有效的。
在訓練FFM的過程中,有許多小細節值得特別關注。
第一,樣本歸一化。FFM預設是進行樣本資料的歸一化,即 pa.normpa.norm 為真;若此引數設定為假,很容易造成資料inf溢位,進而引起梯度計算的nan錯誤。因此,樣本層面的資料是推薦進行歸一化的。
第二,特徵歸一化。CTR/CVR模型採用了多種型別的源特徵,包括數值型和categorical型別等。但是,categorical類編碼後的特徵取值只有0或1,較大的數值型特徵會造成樣本歸一化後categorical類生成特徵的值非常小,沒有區分性。例如,一條使用者-商品記錄,使用者為“男”性,商品的銷量是5000個(假設其它特徵的值為零),那麼歸一化後特徵“sex=male”(性別為男)的值略小於0.0002,而“volume”(銷量)的值近似為1。特徵“sex=male”在這個樣本中的作用幾乎可以忽略不計,這是相當不合理的。因此,將源數值型特徵的值歸一化到 [0,1][0,1] 是非常必要的。
第三,省略零值特徵。從FFM模型的表示式(4)可以看出,零值特徵對模型完全沒有貢獻。包含零值特徵的一次項和組合項均為零,對於訓練模型引數或者目標值預估是沒有作用的。因此,可以省去零值特徵,提高FFM模型訓練和預測的速度,這也是稀疏樣本採用FFM的顯著優勢。
後記
本文主要介紹了FFM的思路來源和理論原理,並結合原始碼說明FFM的實際應用和一些小細節。從理論上分析,FFM的引數因子化方式具有一些顯著的優勢,特別適合處理樣本稀疏性問題,且確保了較好的效能;從應用結果來看,站內CTR/CVR預估採用FFM是非常合理的,各項指標都說明了FFM在點選率預估方面的卓越表現。當然,FFM不一定適用於所有場景且具有超越其他模型的效能,合適的應用場景才能成就FFM的“威名”。
參考文獻
相關推薦
因子分解機(FM) +場感知分解機 (FFM) 入門
前言 FM和FFM模型是最近幾年提出的模型,憑藉其在資料量比較大並且特徵稀疏的情況下,仍然能夠得到優秀的效能和效果的特性,屢次在各大公司舉辦的CTR預估比賽中獲得不錯的戰績。在計算廣告領域,點選率CTR(click-through rate)和轉化率CVR(conversi
推薦系統學習筆記之四 Factorization Machines 因子分解機 + Field-aware Factorization Machine(FFM) 場感知分解機
前言 Factorization Machines(FM) 因子分解機是Steffen Rendle於2010年提出,而Field-aware Factorization Machine (FFM) 場感知分解機最初的概念來自於Yu-Chin Juan與其比賽
ML.NET 示例:推薦之場感知分解機
寫在前面 準備近期將微軟的machinelearning-samples翻譯成中文,水平有限,如有錯漏,請大家多多指正。 如果有朋友對此感興趣,可以加入我:https://github.com/feiyun0112/machinelearning-samples.zh-cn Movie Rec
因子分解機FM原理及SGD訓練
1.背景 Steffen Rendle於2010年提出Factorization Machines(下面簡稱FM),併發布開源工具libFM。FM的提出主要對比物件是SVM,與SVM相比,有如下幾個優
因子分解機 FM和FFM
因子分解機 Factorization Machine 因子分解機主要是考慮了特徵之間的關聯。 FM主要是為了解決資料稀疏的情況下,(而SVM無法解決稀疏問題),特徵怎樣組合的問題。 資料稀疏是指資料的維度很大,但是其中為0的維度很多。推薦系統是常見應用場
Sigmoid非線性啟用函式,FM調頻,膽機,HDR的意義
前幾天家裡買了個二手車子,較老,發現只有FM收音機,但音響效果不錯,車子帶藍芽轉FM,可以手機藍芽播放音樂,但經過幾次轉換以及對FM的質疑,所以懷疑音質是否會劇烈下降,抱著試試的態度放了一個手機上的音樂,結果感動的流淚了,為什麼以前手機帶的高保
查找域內所有的Windows Server 2012 R2的服務器,並區分出哪些是物理機,那些是虛擬機
powershell 基本命令通過使用Get-Adcomputer和Get-Wmiobject 組合來實現。思路是這樣的,先看一臺服務器的屬性值有什麽可用利用的。[12r2-dc]: PS C:\> Get-ADComputer -Identity 12r2-dc -Properties *Accoun
Hyper-V 2016 系列教程40 使用 PowerShell 實現虛擬機自動化和管理虛擬機
windows server 2012 2016; hyper-v;虛擬化註:以下內容部分取自微軟官網:可以在 Hyper-V 主機上的 Windows 10 或 Windows Server 技術預覽版虛擬機中使用 PowerShell Direct 運行任意 PowerShell,而無論網絡配置或遠程管理
virtual 將 Ubuntu16.04 設置 網絡橋接,主機與虛擬機ping通,虛擬機與其他機器ping通
網卡名 拒絕 ati 鏈接 eth0 down inter 技術分享 and http://www.jianshu.com/p/a4dbdb40b72b http://blog.csdn.net/briup_acmer/article/details/72125172
6種品牌打印機介紹及打印機旗艦店推薦
掃描儀 blank 十大品牌 ron 制造商 lan targe 企業 dia 小朋友上幼兒園了,很開心。老師總是隔三差五的讓帶個照片,做個成長手冊什麽的,這個就老頭疼了,每次都出去打印確實不太方便,要是自己家能有個打印機就好多了,不管什麽時候需要照片,材料什麽的都不必麻煩
51單片機和STM32單片機的基本命名規則
-m img tex .com ice 目前 集成 閃存 cor 51內核的單片機命名規則,以STC12 5A 60 S2為例 STM32代表ST品牌Cortex-Mx系列內核(ARM)的32位MCU;命名規則如下: STM32 F 103 C 6 T 7 x
Linux虛擬機學習環境搭建—虛擬機創建
centos6、vmware虛擬機創建 主機環境是Windows8.1,虛擬機軟件用VMware Workstation10,Linux選擇CentOS6.6 x86_64版本。 一:安裝VMware。 準備VMware安裝文件包,點擊安裝,就是在windows環境安裝應用
使用vmware vconverter從物理機遷移系統到虛擬機P2V(多圖)
ensure 網卡通信 src block 用戶界面 vswitch sp2 winrar select zhuan:https://segmentfault.com/a/1190000002697929 本文完整記錄了如何從物理服務器,保持所有環境配置信息,紋絲不
Linux虛擬機學習環境搭建—虛擬機安裝
虛擬機安裝接上一篇的Linux虛擬機學習環境搭建—虛擬機創建“ 點擊“開啟此虛擬機”,進入系統安裝界面。Tab鍵可以調整選項,直接選擇第一項,回車。備註:鼠標點擊進入虛擬機,要跳出虛擬機回到主機控制,按下Ctrl+Alt。出現Disc Found界面,用Tab鍵,選擇到Skip選項,回車。備註:此操作是校
獲取本機IP及在本機IP的基礎上自增1(只針對有一個IP的機器)
turn else data 返回 主機名 add cleanup done get 1、獲取本機IP 1 char* getLocalIP() 2 { 3 WSADATA wsaData; 4 int err = WSAStartup(MAKEW
宿主機無法訪問linux虛機中的網站
nginx linux 問題現象: Nginx服務已啟動 80端口被nginx監聽 宿主和linux虛機可相互ping通 Linux虛機可用curl訪問網站 宿主無法用瀏覽器訪問網站 排查:1. 查看nginx的access.log發現沒有請求進來由此可判斷是防火墻給擋住了 檢查iptable
來看看最近火爆的在線推幣機和在線娃娃機
在線推幣機 在線娃娃機 娃娃機 推幣機 遊戲 前端: 成熟的APP+SDK+H5 方案,可定制二次開發硬件:推流方案+硬件主板方案+攝像頭線下:娃娃機 推幣機租賃+娃娃禮品倉儲物流 手機網絡推幣機特點:?1、操作簡單:操作和線下相比簡單一線上抓娃娃機之後,給各大公司帶來的很大的商機,各大公
本地打印機和共享打印機以及server版本如何創建新用戶
ima 以及 版本 遠程共享 serve 計算機管理 密碼 設備 用戶名 這篇跟大家分享一點打印機的知識內容,我們習慣把打印設備叫打印機,這裏我們按專業角度來講,我們現實中看得見的那是打印設備叫物理打印機,而打印機其實是邏輯驅動,也叫邏輯打印機。首先我們打開兩臺虛擬機,se
virtualBox NAT模式,設置虛擬機可上網,宿主機可訪問虛擬機的方法
設置 PV TP alt mage === box href 想要 環境描述: 宿主機:windows Server 2008 64bit,IPV4地址,有網絡。 宿主機上的主要軟件環境: virtualBox 5.0.24 virtualBox中安裝了
VirtualBox網絡環境配置,宿主機與虛擬機互聯,同時虛擬機也可以使用互聯網
linux image mark 虛擬網卡 pre sco 編輯器 連接 使用 最近在折騰虛擬機,在VirtualBox 上安裝centOS 7 ,安裝過程再次不說互聯網上一大堆,咱們這裏只說虛擬機網絡配置問題。 配置網卡1 在高級裏設置去全部允許 網卡2 高級裏同樣