一種對在線社交網絡用戶進行結構化屬性推斷的方法與流程
2023-04-29 00:02:46 2

本發明屬於網絡信息技術領域,更為具體地講,涉及一種對在線社交網絡用戶進行結構化屬性推斷的方法。
背景技術:
屬性推斷是用來自動預測在線社交網絡中用戶的未知屬性和潛在特質的主要技術手段,可應用於市場分析中定義不同的客戶類型,深度挖掘用戶屬性信息以優化個性化的推薦方法,同時針對可能的用戶屬性推斷攻擊採取相應的保護措施。如推測用戶的年齡、性別、地理位置、興趣、職業等,這些信息可用於商品推薦、資訊推薦。
已有屬性推斷方法提取的特徵包括用戶本身的個人信息如性別、年齡、職業、教育水平,以及用戶的行為信息如瀏覽的網頁、共享的位置、購買的商品數據等。然而由於涉及個人隱私,提取的用戶個人信息往往存在不真實不全面的問題;用戶行為信息(特徵數據)大多數也不容易獲取,且需耗費大量的時間和資源。
此外,已有屬性推斷採取多個屬性分別預測的方法,忽視了屬性之間本身存在的相關性質,因此已有屬性推斷方法效率低且準確性不高。同時,已有屬性推斷方法的思路是利用用戶的行為特徵相似,進而推斷用戶屬性存在相同的趨勢,通過提取用戶行為特徵進行用戶建模,從而設計算法進行單個屬性推斷。儘管已有屬性推斷方法完成了屬性推斷的任務,但其所需的輸入信息較多,且難以避免不真實的用戶信息對屬性推斷結果的影響,故而屬性推斷的可移植性不高。
技術實現要素:
本發明的目的在於克服現有屬性推斷的不足,提出一種對在線社交網絡用戶進行結構化屬性推斷的方法,以提高屬性推斷的效率和準確性,並避免不真實的用戶信息對屬性推斷結果的影響,改善屬性推斷的可移植性。
為實現上述發明目的,本發明對在線社交網絡用戶進行結構化屬性推斷的方法,其特徵在於,包括以下步驟:
(1)、確定在線社交網絡
根據需求,確定一個需要進行用戶屬性推斷的在線社交網絡(osn),且該在線社交網絡中用戶的每個屬性即用戶屬性atti只有一個值,其中,i為用戶屬性編號;
(2)、選取部分已知用戶屬性的用戶,構建其0-1組合屬性類別向量
2.1)、將用戶屬性規範為i個,對於用戶的第i個屬性atti,統計其屬性值個數ni,並構建只有一個位置為1的、元素個數為ni的0-1形式向量:0-1形式向量的每一位對應一個屬性值,如果已知用戶屬性的用戶,其第i個屬性atti屬於某一個屬性值,則0-1形式向量中對應屬性值位為1;
2.2)、將已知用戶屬性用戶的所有屬性atti對應的0-1形式向量組合在一起,形成一個結構化屬性向量;
2.3)、構建一個映射表:映射表的索引為結構化屬性向量所有可能的取值,映射值為只有一個位置為1的、元素個數為d的0-1組合屬性類別向量,d為結構化屬性向量所有可能的取值數量,索引與映射值一一對應;
已知用戶屬性用戶的結構化屬性向量根據其取值,查找映射表,得到其對應的0-1組合屬性類別向量vec_tk,其中,k為已知用戶屬性用戶的編號,k=1,2,...,k,k為已知用戶屬性用戶的數量;
(3)、權重化隨機遊走,獲取用戶節點序列集walklist
將在線社交網絡中用戶間存在的好友關係表示為由代表用戶的節點集v和代表用戶間好友關係的邊集e組成的無向圖即用戶節點關係圖g;
對用戶節點關係圖g中所有節點進行遍歷,得到在線社交網絡osn的用戶節點序列集walklist:
3.1)、對於在線社交網絡osn,初始化節點之間的權重為1;
3.2)、第一趟遍歷用戶節點關係圖g中的所有節點時,依次選擇一個節點作為開始節點進行權重修改的隨機遊走,遊走時從開始節點或到達節點的鄰居節點中,選擇一個鄰居節點作為下一跳,同時修改並保存兩節點之間的權重,權重修改方式如下:①若選擇的鄰居節點與上一節點相同,則以兩個節點之間的權重乘以1/p的概率修改兩節點之間的權重;②若選擇的鄰居節點與上一節點互為鄰居節點,則兩節點之間的權重不變;③若選擇的鄰居節點並無上述兩種關係,則以兩個節點之間的權重乘以1/q的概率修改兩節點之間的權重,直到走過的節點形成一個長度l的節點序列;
下一趟遍歷時,某一節點在選擇下一跳節點時,計算其所有鄰居節點的權重之和wa,每個鄰居節點被選為下一跳的概率為wj/wa,權重比越大的鄰居節點被選中的概率越大,選中某一鄰居節點後,按照權重修改方式修改兩節點之間的權重並保存;其中,wj為所述節點與鄰居節點之間的權重;
每次遍歷結束得到以不同節點作為起點的節點序列集,多趟循環遍歷用戶節點關係圖g中的所有節點,得到多個節點序列集並組成用戶節點序列集walklist;
(4)、獲取s維空間的用戶節點向量表示
將用戶節點序列集walklist用詞轉向量工具word2vec進行轉換,得到用戶在s維空間(s一般取值範圍在幾十到幾百之間)的向量表示,具體為:
將用戶節點序列集walklist中的所有節點序列輸入詞轉向量工具word2vec中,按照設置的窗口(window-size)以及維度(dimensions=s)進行轉換,得到各個用戶xv(v∈v)在s維空間對應的向量vec_xv;
(5)、訓練得到一個全連接神經網絡模型
構建一個全連接神經網絡,將k個已知用戶屬性的用戶節點向量vec_x1,vec_x2,...,vec_xk以及對應的0-1組合屬性類別向量vec_t1,vec_t2,...,vec_tk作為訓練集,放入全連接神經網絡中進行訓練,得到一個全連接神經網絡模型;
(6)、推斷用戶屬性
將需要推斷用戶屬性的用戶節點向量vec_xu,輸入到已經訓練好的全連接神經網絡模型中,通過各層網絡計算,最終輸出一個概率向量,概率向量中每一個位置對應一個0-1組合屬性類別向量取值,輸出的概率向量中最大值的所在位置對應的0-1組合屬性類別向量取值即為該需要推斷用戶屬性用戶的結構化屬性,根據步驟(2),可得到該用戶的i個用戶屬性。
本發明的目的是這樣實現的。
本發明對在線社交網絡(osn)用戶進行結構化屬性推斷的方法,可從osn用戶中提取好友關係來同時推斷用戶的多個屬性。根據推斷屬性需求,提取一個在線社交網站中所有用戶的多個屬性以及它們之間存在的好友關係進行預處理,將整個osn中的用戶關係表示為節點集v和邊集e組成的無向圖;將每個用戶的結構化屬性向量映射成one-hot編碼的組合屬性類別向量;接著在該無向圖即用戶節點關係圖g中進行權重化的隨機遊走獲取用戶節點序列集;然後利用詞轉向量工具word2vec生成每個用戶的向量表示即節點向量;再構建一個五層的神經網絡模型,以osn中的已知用戶屬性的用戶節點向量和組合屬性類別向量作為訓練集,訓練得到一個全連接神經網絡模型。將需要推斷用戶屬性的用戶節點向量輸入到訓練好的全連接神經網絡模型中,計算得出每個組合屬性類別向量的概率,取概率最大的為該用戶的組合屬性類別,對應的結構化屬性向量即為該用戶的推斷屬性集。本發明可應用於市場分析中定義不同的客戶類型,深度挖掘用戶屬性信息以優化個性化的推薦方法,同時針對可能的屬性推斷攻擊採取相應的保護措施。
本發明具有以下有益效果:
(1)、本發明僅基於osn用戶的好友關係來推斷用戶屬性,只需提取用戶的屬性信息以及用戶間的好友關係(或關注關係),無需獲取額外的用戶行為特徵數據,提高了osn中用戶屬性推斷方法的效率和可移植性,同時減少了資源的消耗;
(2)、本發明實現了同時推斷多個用戶屬性,考慮到用戶不同屬性之間本身存在的相關關係,將用戶的多個屬性用結構化的向量表示,再將每種可能的結構化屬性向量映射成一種類別,通過構建全連接神經網絡,以osn中的已知用戶屬性的用戶節點向量和組合屬性類別向量作為訓練集,訓練得到一個全連接神經網絡模型,再利用訓練好的全連接神經網絡模型實現組合屬性類別推斷,進而實現結構化的屬性推斷,這種充分利用屬性之間內在聯繫的方法,提高了屬性推斷的準確度;
(3)、本發明根據已知的用戶好友關係,將用戶映射成網絡中的節點,利用詞轉向量工具word2vec將每個用戶節點嵌入到一個高維空間,這種網絡嵌入方法形成的用戶節點向量能充分體現用戶的好友關係,使得僅基於好友關係的結構化屬性推斷成為可能。
附圖說明
圖1是生成用戶節點向量表示過程示意圖;
圖2是構建用戶組合屬性類別向量過程示意圖;
圖3是結構化屬性推斷神經網絡模型示意圖;
圖4是對在線社交網絡(osn)用戶進行結構化屬性推斷方法的一種具體實施方式流程圖;
圖5是獲取用戶節點序列集的工作流程圖。
具體實施方式
下面結合附圖對本發明的具體實施方式進行描述,以便本領域的技術人員更好地理解本發明。需要特別提醒注意的是,在以下的描述中,當已知功能和設計的詳細描述也許會淡化本發明的主要內容時,這些描述在這裡將被忽略。
一、基本原理
對於一個在線社交網絡(onlinesocialnetworks,osn)的用戶來說,如果兩個或者多個用戶之間存在好友關係,那麼可以認為他們在屬性上有著某種相似性,表現為他們之間的一個或多個屬性相同。比如知乎網中用戶1是用戶2的好友,用戶3同時是用戶1和2的好友,則用戶1、2、3的某一屬性可能相同或相近。因此,本發明考慮利用用戶的好友關係這一表現來進行用戶的屬性推斷。
圖1是生成用戶節點向量表示的過程示意圖。
在本實施例中,如圖1所示,首先構建用戶節點關係圖g,根據用戶節點關係圖遍歷所有節點,依次選擇一個節點作為起始節點進行權重化的隨機遊走,每次遍歷結束可以得到所有節點各自的一條長度為l的序列集,遍歷多次後以每一節點為起點的序列就有多條,這樣就把用戶的好友關係表現在這些節點序列集上。與傳統的隨機遊走相比,權重化的隨機遊走在每次選擇下一節點時會同時修改對應邊的權重值,這使得遊走得到的節點序列集更充分體現了用戶的好友關係。用戶在向量空間上的s維實數值(節點向量)表示可利用word2vec工具對多個節點序列集組成用戶節點序列集進行轉換得到。
圖2是構建用戶組合屬性類別向量過程示意圖。
要想通過用戶向量推斷用戶屬性,則需將用戶的多個屬性值也映射到一個d維坐標空間,於是,如圖2所示,本發明用0表示用戶無該屬性值,用1表示用戶有該屬性值,則用戶的每個屬性都可以表示為僅有一個值為1的0-1向量,多個屬性向量組合成一個d維空間向量,再將所有可能的結構化屬性向量映射為只有一個元素為1的組合屬性類別向量。如此便可將多屬性多類別預測任務轉換為組合屬性類別預測。
圖3是結構化屬性推斷神經網絡模型示意圖。
在本實施例中,本發明構建一個五層全連接神經網絡進行用戶的組合屬性類別預測,將一個在線社交網絡中的部分用戶節點向量和與之對應的已知組合屬性類別向量用於訓練該全連接神經網絡,得到一個全連接神經網絡模型,對需要推斷用戶屬性用戶進行屬性推斷時,只需將需要推斷用戶屬性用戶的節點向量輸入到訓練好的全連接神經網絡模型中,經過多層神經元計算得到每個組合屬性類別向量的概率,概率最大的即為該目標用戶的組合屬性類別,對應的結構化屬性向量即為目標推斷用戶的屬性集。
二、屬性推斷方法
在本實施例中,如圖4所示,本發明對在線社交網絡(osn)用戶進行結構化屬性推斷的方法包括五個步驟:數據預處理(步驟s1)、權重化的隨機遊走獲取用戶節點序列集(步驟s2)、學習用戶向量表示(步驟s3)、訓練多層神經網絡模型(步驟s4)、計算概率獲取推斷用戶組合屬性類別(步驟s5)。
步驟s1、數據預處理
本實施例中的數據集來源於http://snap.stanford.edu/data/soc-pokec.html,該社交網絡包含1632803個節點集v、30622564條邊集e,其中一個文本文檔記錄了用戶的好友關係,另一個文本文檔記錄了每個用戶的屬性信息,由於用戶的必填屬性極少,大部分屬性只有少部分用戶有記錄,因此本例中只選取用戶的性別和年齡屬性進行預測。
因為在數據獲取的過程中對用戶進行了匿名化處理,所有用戶最終只用一串數位化的id進行標識,於是記錄用戶好友關係的文本文檔最終以如下形式呈現:
表1
然後讀取好友關係文本文檔中的每條邊,記錄到圖邊字典dict中,以每個用戶節點id作為鍵,節點相鄰的所有邊作為值,最終我們將所有用戶的好友關係表示為字典類型的變量{id,(鄰接id)},所有用戶字典即構成該社交網絡中用戶節點關係圖g。
接著對用戶屬性信息文本文檔進行處理,用戶屬性信息文本文檔中記錄了每個用戶的id標識號和其對應的屬性信息,在本實施例中,只需提取用戶的性別和年齡屬性,其中性別對應的列為1表示該用戶為男,0表示該用戶為女,由於部分用戶的性別和年齡未公開,我們將未公開性別(對應屬性列的值為『null』)和年齡(對應屬性列的值為『0』或『null』)的用戶刪除,通過統計所有用戶的年齡在[0,120]歲的範圍之間,考慮部分用戶提供了不真實的年齡信息,我們只保留該在線社交網絡中年齡在15-60歲之間的用戶,最終我們只留下1021003個用戶的性別和年齡信息。
最後將用戶的屬性信息進行結構化處理,將其表示成一個d維坐標空間中的向量。由於用戶的年齡信息呈連續性分布,首先將年齡劃分為五個段:15-25,25-35,35-45,45-55,55-60,劃分的年齡段越多,最終推斷的用戶年齡越接近其真實值。
對每一個屬性來說,用戶對應的屬性值只有一個,我們將每個屬性的值映射為0-1向量形式,例如:用戶1的性別為男,則將其性別映射為[10],用戶3的性別為女,則映射為[01];若用戶的年齡在15-25歲之間,則將其年齡映射為[10000],若在25-35歲之間,則映射為[01000],依此類推,將所有用戶的年齡處理成只有一個位置為1的向量形式,最後將兩種屬性的0-1形式向量組合形成用戶的結構化屬性向量表示。
在本實施例中,每個用戶的結構化屬性向量則表示為一個7維的0-1向量,最終構建所有用戶的結構化屬性向量標籤集labellist。處理後的用戶屬性數據以如下形式呈現(其中第一列為用戶的id標識號,後面對應的為該用戶的結構化屬性向量):
表2
結構化屬性向量所有可能的取值構成集合attset,在本實施例中,集合attset中共有10(2×5)個元素,將attset中結構化屬性向量每個取值映射成只有一個元素為1的0-1組合屬性類別向量,組合屬性類別向量的維度為10,即attset中元素個數d=10。在本實施例中,用戶347的結構化屬性向量為[1010000],則將其映射為[1000000000]的組合屬性類別向量。最終用戶的組合屬性類別以如下形式呈現(其中第一列為用戶的id標識號,後面對應的為該用戶的組合屬性類別向量):
表3
2、權重化的隨機遊走獲取用戶節點序列集
用圖邊字典表示的用戶節點關係圖g進行權重化的隨機遊走,獲取該社交網絡所有用戶的節點序列集walklist。
如圖5所示,初始化所有節點之間的權重wj(j∈e),內循環遍歷所有節點,將某一節點作為開始節點進行隨機遊走,從開始節點或到達節點的鄰居節點中,隨機選擇一個鄰居節點為下一個節點,並修改對應邊的權重值,直到形成一條長度為l的節點序列。隨機遊走時修改對應邊的權重,可控制節點的遊走範圍,使得每條序列包含更豐富的好友關係。
具體實施包括以下步驟:
步驟s201:初始化參數,包括循環次數設置為20,初始節點權重wj(j∈e)為1,權重更改參數p=6、q=2;
步驟s202:判斷是否到達循環次數,如果達到,則進入步驟s206,否則進入步驟s203;
步驟s203:判斷該次循環是否遍歷完所有節點,若遍歷完,則進入步驟s205,否則進入步驟s204;
步驟s204:以未遍歷的某一節點為初始節點進行隨機遊走,權重越大的鄰居節點被選為下一跳節點的概率越大,選擇某一鄰居節點作為下一跳後修改並保存兩節點之間的權重,修改方式如下:①若選擇的鄰居節點與上一節點相同,則以wj乘以1/p的概率修改兩節點之間的權重;②若選擇的鄰居節點與上一節點互為鄰居節點,則以兩節點之間的權重仍為wj;③若選擇的鄰居節點並無上述兩種關係,則以wj乘以1/q的概率修改兩節點之間的權重。直到走過的節點形成一個長度l的節點序列,則返回步驟s203;
步驟s205:循環次數加1,返回步驟s202;
步驟s206:返回用戶節點序列集。
在本實施例中,每條序列長度為20,循環遍歷20次,每個節點都能得到以其為初始節點的20條長度為20的序列集。最終獲得的部分序列集walklist如下所示:
表4
3、用戶節點向量表示
將表4中用戶節點序列集walklist採用詞轉向量工具word2vec工具進行轉換,通過設置窗口(window-size)及維度(dimensions=s)大小,將用戶節點序列集中所有長度為l的序列輸入word2vec中,得到s維的表示用戶的向量模型umodel。
word2vec是將詞轉換為向量的工具,其具體過程屬於現有技術,在這裡就不再贅述。
在本實施例中,window-size=1,dimensions=100,得到的部分用戶向量模型umodel如下所示(第一列為用戶id標識號):
表5
4、訓練多層全連接神經網絡模型
4.1)、構建一個五層的全連接神經網絡,設置各層神經元個數nm(m=1,2,...,5),並隨機初始化各層神經元權重矩陣wm(m=1,2,...,5)參數和偏置向量bm(m=1,2,...,5)參數,設置每個神經元的激活函數f(z)以及損失函數c,其中z=∑j(wjxj+bj)表示某一神經元的帶權和輸入,f(z)表示該神經元的輸出。
在本實施例中,用該在線社交網絡osn中的部分已知用戶屬性用戶節點向量集x和與之對應的組合屬性類別向量集y作為訓練集,其中x=(vec_x1,vec_x2,...,vec_xk)t,y=(vec_t1,vec_t2,...,vec_tk)t;同時從剩餘已知用戶屬性用戶中選取部分用戶節點向量集和與之對應的組合屬性類別向量集作為驗證集。
4.2)、採用隨機梯度下降算法,解如下優化問題:
其中,aj=f(zj),zj=∑j(wjxj+bj),yj為目標向量vec_tk中的所有元素,為最後一層神經元的所有輸出值,xj為輸入向量vec_xk中的所有元素,x為訓練集x中的所有向量;
首先,初始化每層神經元權重矩陣wm(m=1,2,...,5)的值為正太分布,每層神經元權重矩陣大小分別為w1=s×n1維、w2=n1×n2維、w3=n2×n3維、w4=n3×n4維、w5=n4×n5維,同時初始化每層神經元的偏置向量bm(m=1,2,...,5)中元素均為0,每個偏置向量的元素個數即為對應層神經元的個數,前四層神經元採用激活函數relu(rectifiedlinearunits),最後一層神經元採用激活函數softmax;
然後進行h次迭代,對於第h(0<h≤h)次迭代,隨機選擇r個樣本點{vec_xk、vec_tk}(1≤k≤r),分別計算輸出層權重和偏置的梯度:
其中,akl-1為第四層中第k個神經元的輸出,接下來,更新輸出層的權重和偏置:其中,η為學習率,利用bp算法,將誤差向前傳一層,直到更新完網絡中所有5層的參數;每次迭代後,將驗證集數據輸入到網絡中計算模型預測用戶組合屬性類別的準確度,經過若干次迭代,上述優化問題中的求和函數值逐漸收斂,驗證集在網絡模型中獲得的準確度也趨於穩定,此時的迭代次數即為h,得到的神經網絡模型參數即為更新後的各層神經元權重矩陣wm(m=1,2,...,5)和偏置向量bm(m=1,2,...,5);
在本實施例中,選擇該社交網絡中80%的用戶作為訓練集,10%的用戶作為驗證集,即k=818000,將k個已知用戶屬性用戶節點向量vec_x1,vec_x2,...,vec_xk以及對應的0-1組合屬性類別向量vec_t1,vec_t2,...,vec_tk作為訓練集,輸入構建的五層全連接神經網絡中進行訓練。每層網絡的神經元個數依次為n1=1000、n2=800、n3=600、n4=250、n5=10,每次迭代隨機選取1000個用戶,即r=1000,學習率η逐漸遞減,其範圍為[0.98,0.08],共迭代100000次,即h=100000,使得所有訓練樣本能進行多次訓練,每次迭代後將所有驗證集數據輸入到網絡中計算驗證集預測準確度,當驗證集準確度不再改變時則表明網絡模型達到了穩定。最終得到網絡模型參數:每層神經元的權重矩陣w1、w2、w3、w4、w5以及偏置向量b1、b2、b3、b4、b5。
由於用戶的輸入向量為100維,第一層神經元個數為1000,所以w1為100*1000的矩陣,b1為1000維的向量,由於網絡模型參數過多,這裡僅給出權重矩陣w1和偏置向量b1的結果如下:
5、計算概率獲取推斷用戶組合屬性類別
將該在線社交網絡osn中除去訓練集和驗證集的剩餘每個用戶xi進行以下屬性推斷:將用戶向量vec_xi輸入到已經訓練好的五層神經網絡模型中,通過各層網絡計算,最終輸出每個組合屬性類別的概率,概率最大的即為該推斷用戶的組合屬性類別,同時與該組合屬性類別向量對應的結構化屬性向量即為該用戶的推斷屬性集。
三、實例驗證
在上述實施例中,採用本發明所闡述的方法推斷了除訓練集和驗證集以外的剩餘103003個用戶的屬性,即採用80%左右的用戶作為訓練集,10%左右的用戶作為驗證集,10%左右的用戶作為測試集。本次實施例的實驗結果如下:驗證集的準確度穩定在76.5%,測試集的準確度為78.2%。
該結果表明僅利用在線社交網絡中用戶的好友關係即可同時推斷出用戶的多個屬性,相比其它需要利用大量用戶行為特徵信息的方法而言,本發明的方法具有很好的移植性和較高的推斷準確度。
儘管上面對本發明說明性的具體實施方式進行了描述,以便於本技術領域的技術人員理解本發明,但應該清楚,本發明不限於具體實施方式的範圍,對本技術領域的普通技術人員來講,只要各種變化在所附的權利要求限定和確定的本發明的精神和範圍內,這些變化是顯而易見的,一切利用本發明構思的發明創造均在保護之列。