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