RS(2)--从文本数据到用户画像
點擊上方“算法猿的成長“,關(guān)注公眾號,選擇加“星標“或“置頂”
總第 122 篇文章,本文大約 5100 字,閱讀大約需要 ?15 分鐘
上一篇文章簡單介紹了推薦系統(tǒng)的定義和應(yīng)用,推薦系統(tǒng)第二篇,簡單介紹用戶畫像的知識, 以及通過文本來構(gòu)建用戶畫像的知識。
目錄如下:
用戶畫像
用戶畫像的定義
用戶畫像的關(guān)鍵
構(gòu)建用戶畫像的方法
從文本到用戶啊畫像
構(gòu)建用戶畫像
結(jié)構(gòu)化文本
標簽選擇
小結(jié)
用戶畫像
用戶畫像的定義
用戶畫像其實就是從海量的用戶數(shù)據(jù)中,建模抽象出來每個用戶的屬性標簽體系,這些屬性通常需要具有一定的商業(yè)價值。
而如果從計算機的角度,用戶畫像是對用戶信息的向量化表示,向量化是為了給計算機計算,用戶畫像應(yīng)該是給機器看的,而不是人看的。
用戶標簽體系一般分為多個大類(一級分類),每個大類下有多個小分類(二級分類),小分類下面還可以繼續(xù)再劃分更小的三級、四級等分類,大分類通常包括這幾種:
人口屬性。用戶固有屬性,比如年齡性別等;
興趣偏好。用戶的個人偏好,包括品類便好、品牌便好、距離便好、業(yè)務(wù)單元便好等;
特征人群。具有特定意義的人群劃分,比如學生、旅游達人、有車一族、母嬰、吃貨等;
用戶分級。區(qū)分用戶的層級劃分,比如會員等級、消費水平、優(yōu)惠敏感度等;
LBS屬性。和用戶位置相關(guān)的各種屬性,比如用戶的常駐城市和國家、家鄉(xiāng)、用戶足跡、居住商圈、工作商圈等
對于一個推薦系統(tǒng),用戶畫像并不是它的目的,而是在構(gòu)建推薦系統(tǒng)的過程中產(chǎn)生的一個關(guān)鍵環(huán)節(jié)的副產(chǎn)品。
通常推薦系統(tǒng)會分為召回和排序兩個階段,在這兩個階段中都可能會用到用戶畫像。
用戶畫像的關(guān)鍵
用戶畫像的關(guān)鍵元素是維度和量化。
維度
維度首先要保證每個維度的名稱是可理解的,比如推薦一部手機給用戶的時候,維度包括價格、手機品牌、手機的內(nèi)存大小、外觀等,這里需要保證用戶和手機的維度能夠匹配上;
維度的數(shù)量一般越多,用戶畫像也越精細,但計算代價也會變大,需要做一個權(quán)衡。
具體采用哪些維度,需要以推薦的目的為主,而不是為了用戶畫像而做用戶畫像,比如目的是提高點擊率,那就需要考慮哪些因素可能會影響用戶點擊產(chǎn)品,比如推薦手機的時候,手機的品牌、價格、配置因素,都會影響用戶是否會點擊查看手機的具體信息,因此手機產(chǎn)品的標題都會標明這些很重要的信息,比如:“iphone 11 128g, 5999元”。
量化
對用戶畫像的量化,其實就是對數(shù)據(jù)的處理方式,也可以說就是特征工程,應(yīng)該以目標為導向,根據(jù)推薦效果為查看具體采用哪種量化的方法。
構(gòu)建用戶畫像的方法
按照對用戶量化的手段來分,可以分成3類方法
1. 查戶口
直接采用原始數(shù)據(jù)作為用戶畫像的內(nèi)容,比如注冊資料等人口統(tǒng)計學信息,或者是購買、瀏覽歷史,這種通常只是做了數(shù)據(jù)清洗的工作,數(shù)據(jù)本身沒有做任何抽象和歸納,通常對用戶冷啟動等場景非常有用。
2. 堆數(shù)據(jù)
方法就是堆積歷史數(shù)據(jù),做統(tǒng)計工作,也是最常見的用戶畫像數(shù)據(jù),比如常見的興趣標簽,從歷史行為中去挖掘出這些標簽,然后在標簽維度上做數(shù)據(jù)統(tǒng)計,用統(tǒng)計結(jié)果作為量化結(jié)果。
3. 黑盒子
采用機器學習方法,學習出人類無法直觀理解的稠密向量,在推薦系統(tǒng)中承擔的作用非常大。比如:
使用淺語義模型構(gòu)建用戶閱讀興趣;
采用矩陣分解得到的隱因子;
采用深度模型學習用戶的 Embedding 向量;
這個方法的缺點就是得到的用戶畫像數(shù)據(jù)通常是不可解釋的,不能直接被人看懂。
從文本到用戶畫像
文本數(shù)據(jù)是互聯(lián)網(wǎng)產(chǎn)品中最常見的信息表達形式,數(shù)量多、處理快、存儲小,常見的文本數(shù)據(jù)可以有:
對用戶來說,包括注冊時候的姓名、性別、愛好,發(fā)表的評論等;
對于物品,比如物品的標題、描述、物品本身的內(nèi)容(一般是新聞資訊類)、其他基本屬性的文本等;
接下來會介紹一些從文本數(shù)據(jù)建立用戶畫像的方法。
構(gòu)建用戶畫像
根據(jù)用戶和物品的文本信息構(gòu)建出一個基礎(chǔ)版本的用戶畫像,通常步驟是這樣的:
結(jié)構(gòu)化文本:把所有非結(jié)構(gòu)化的文本結(jié)構(gòu)化,去粗取精,保留關(guān)鍵信息;
標簽選擇: 根據(jù)用戶行為數(shù)據(jù),合并用戶和物品的結(jié)構(gòu)化信息
第一步是最關(guān)鍵也是最基礎(chǔ),其準確性、粒度、覆蓋面都決定了用戶畫像的質(zhì)量。這一步主要用到文本挖掘算法,接下來會介紹常用的文本挖掘算法;
第二步則是根據(jù)用戶歷史行為把物品畫像傳遞給用戶。
下面會分別介紹這兩步中的一些做法和常用算法。
結(jié)構(gòu)化文本
一般原始的文本數(shù)據(jù)常常是自然語言描述的,也就是“非結(jié)構(gòu)化”的,但計算機處理數(shù)據(jù),只能采用結(jié)構(gòu)化的數(shù)據(jù)索引,檢索,然后向量化再計算,因此對于文本數(shù)據(jù)需要先進行結(jié)構(gòu)化,再進行后續(xù)的處理。
對于文本信息,可以利用成熟的 NLP ?算法分析得到的信息有以下幾種:
關(guān)鍵詞提取:最基礎(chǔ)的標簽來源,也為其他文本分析提供基礎(chǔ)數(shù)據(jù),常用的算法是 TF-IDF 和 TextRank;
實體識別:識別一些名詞,包括人物、位置和地點、著作、影視劇、歷史事件和熱點事件等,常用基于詞典的方法結(jié)合 CRF 模型;
內(nèi)容分類:將文本按照分類體系分類,用分類來表達較粗粒度的結(jié)構(gòu)化信息;
文本:在無人制定分類體系的前提下,通過無監(jiān)督算法將文本劃分成多個類簇也是很常見的,類簇編號也是用戶畫像的常見構(gòu)成;
主題模型:從大量已有文本中學習主題向量,然后再預(yù)測新的文本在各個主體上的概率分布情況,這也是一種聚類思想,主題向量也不是標簽形式,也是用戶畫像的常用構(gòu)成;
嵌入:即 Embedding,從詞到篇章,都可以學習這種嵌入表達,它的目標是挖掘出字面意思之下的語義信息,并用有限的維度表達出來。
1. TF-IDF
TF 全稱是 Term Frequency,即詞頻,而 IDF 是 Inverse Document Frequency, 是逆文檔頻率。這個方法提取關(guān)鍵詞的思想很樸素:
在一篇文章中反復出現(xiàn)的詞會很重要,在所有文本中都出現(xiàn)的詞更不重要。
根據(jù)這思想分別量化成 TF 和 IDF 兩個指標:
TF:詞頻,在要提取的文本中出現(xiàn)的次數(shù);
IDF:在所有文本中,統(tǒng)計每個詞出現(xiàn)在多少文本中,記為 n,也就是文檔頻率,而文本的數(shù)量記為 N。
所以 IDF 的計算公式如下:
它有這么幾個特點:
所有詞的 N 都是一樣的,因此出現(xiàn)文本數(shù)(n)越少的詞,IDF 也就越大;
分母中的 1 是防止有的詞的文檔頻率 n 為 0,導致得到無窮大的計算結(jié)果;
對于新詞,本身應(yīng)該是 n=0,但也可以默認賦值為所有詞的平均文檔頻率。
TF-IDF 的最終計算公式就是 TF * IDF ,這樣可以計算每個詞語的一個權(quán)重,根據(jù)權(quán)重來篩選關(guān)鍵詞的方式通常有這兩種:
選擇 top-k 的詞語,簡單直接,缺點是需要考慮 k 的取值,如果能提取的詞語少于 k 個,那所有詞都是關(guān)鍵詞,這就是不合理的;
計算所有詞權(quán)重的平均值,取權(quán)重大于平均值的詞語作為關(guān)鍵詞。
另外,根據(jù)實際場景,可能會加入一些過濾條件,比如只提取動詞和名詞作為關(guān)鍵詞。
2. TextRank
TextRank 是著名的 PageRank 算法的衍生算法之一,PageRank 算法是谷歌用來衡量網(wǎng)頁重要性的算法,因此 TextRank 算法的思想也比較相似,可以概括為:
首先在文本中,設(shè)定一個窗口寬度,比如 k 個詞,統(tǒng)計窗口內(nèi)的詞之間的共現(xiàn)關(guān)系,將其看成無向圖(圖就是網(wǎng)絡(luò),由存在連接關(guān)系的節(jié)點構(gòu)成,所謂無向圖,就是節(jié)點之間的連接關(guān)系不考慮從誰出發(fā),有關(guān)系即可);
所有詞的初始化重要性都是 1;
每個節(jié)點把自己的權(quán)重平均分配給“和自己有連接”的其他節(jié)點;
每個節(jié)點將所有其他節(jié)點分給自己的權(quán)重之和,作為自己的新權(quán)重;
如此反復迭代第3、4兩步,直到所有的節(jié)點權(quán)重收斂為止。
通過這個算法計算得到的詞語權(quán)重,會呈現(xiàn)這樣的特點:有共現(xiàn)關(guān)系的會互相支持對方成為關(guān)鍵詞。
3. 內(nèi)容分類
在門戶網(wǎng)站的時代,每個網(wǎng)站都有自己的頻道體系,這個頻道體系就是一個非常大的內(nèi)容分類體系,而到了現(xiàn)在的移動互聯(lián)網(wǎng)時代,新聞資訊類的 app 也會對不同的新聞進行分類到對應(yīng)的不同頻道下,比如熱門、娛樂、體育、科技、金融等這樣的分類體系,這種做法可以得到最粗粒度的結(jié)構(gòu)化信息,也是在用戶冷啟動時探索用戶興趣的方法。
長文本的內(nèi)容分類可以提取很多信息,但短文本的內(nèi)容分類則因為可提取信息較少而比較困難。短文本分類方面經(jīng)典的算法是 SVM,在工具上現(xiàn)在最常用的是 Facebook 開源的 FastText。
4. 實體識別
命名實體識別(Named-Entity Recognition, NER)在 NLP 中常常被認為是序列標注問題,和分詞、詞性標注屬于同一類問題。
所謂序列標注問題,就是給定一個字符序列,從左到右遍歷每個字符,一邊遍歷一邊對每個字符分類,分類的體系因序列標注問題不同而不同:
分詞問題:劃分詞語,對每個字符分類是 “詞開始”,“詞中間”,“詞結(jié)束” 三類之一;
詞性標注:對每個分好的詞,分類為定義的詞性集合之一;
實體識別:對每個分好的詞,識別為定義的命名實體集合之一
常用的算法就是**隱馬爾可夫模型(HMM)**或者條件隨機場(CRF)。
另外還有比較實用的非模型做法:詞典法。提前準備好各種實體的詞典,使用 trie-tree ?數(shù)據(jù)結(jié)構(gòu)存儲,拿著分好的詞去詞典里找,找到個某個詞就認為是提前定義好的實體了。
在工業(yè)級別的工具上,spaCy 比 NLTK 在效率上優(yōu)秀一些。
5. 聚類
目前常用的聚類方法主要是主題模型,同樣作為無監(jiān)督算法,以 LDA 為代表的主題模型能夠更準確地抓住主題,并且能夠得到軟聚類的效果,即每個文本可以屬于多個類簇。
LDA 模型需要設(shè)定主題個數(shù),如果有時間,可以對主題個數(shù) K 做一些實驗進行挑選,方法是每次計算 K 個主題兩兩之間的平均相似度,選擇一個較低的 K 值;但如果時間不足,那么在推薦系統(tǒng)領(lǐng)域,只要計算資源夠用,主題數(shù)量可以盡量多一些;
另外,需要注意的是,得到文本在各個主題上的分布,可以保留概率最大的前幾個主題作為文本的主題。
LDA 工程上的困難在于并行化,如果文本數(shù)量沒有到海量程度,提高單機配置是可以的,開源的訓練工具有 Gensim,PLDA 等。
6. 詞嵌入
詞嵌入,即 Word Embedding,前面的幾種方案,除了 LDA,其他都是得到一些標簽,而且都是稀疏的,而詞嵌入可以為每個詞學習得到一個稠密的向量。
簡單說,一個詞語可能隱藏很多語義信息,比如北京,可能包含“首都、中國、北方、直轄市、大城市”等等,這些語義在所有文本上是有限的,比如 128 個,所以可以用一個 128 維的向量表達每個詞語,向量中各個維度上的值大小代表了詞包含各個語義的多少。
這些向量的用途有:
計算詞語之間的相似度,擴充結(jié)構(gòu)化標簽;
累加得到一個文本的稠密向量;
用于聚類
在這方面最著名的算法就是 Word2Vec,它是用淺層神經(jīng)網(wǎng)絡(luò)學習每個詞語的向量表達,其最大的貢獻是在工程技巧上的優(yōu)化,使得百萬詞的規(guī)模在單機上可以幾分鐘就跑出結(jié)果。
標簽選擇
完成第一步的結(jié)構(gòu)化文本信息后,可以得到標簽(關(guān)鍵詞、分類等)、主題、詞嵌入向量,接下來就是第二步,如何將物品的結(jié)構(gòu)化信息給用戶呢?
第一種做法是非常簡單粗暴,直接將用戶產(chǎn)生過行為的物品標簽累積在一起;
第二種方法則是這樣一個思路:將用戶對物品的行為,是否有消費看成一個分類問題,用戶通過實際行動幫助我們標注了若干數(shù)據(jù),那么挑選出他實際感興趣的特性就變成了特征選擇問題。
最常用的是兩個方法:卡方檢驗(CHI)和信息增益(IG)。基本思想是:
把物品的結(jié)構(gòu)化內(nèi)容看成文檔;
把用戶對物品的行為看成是類別;
每個用戶看見過的物品就是一個文本集合;
在這個文本集合上采用特征選擇算法選出每個用戶關(guān)心的東西。
1. 卡方檢驗
卡方檢驗是一種監(jiān)督學習算法,即需要提供分類標注信息,為什么需要呢?因為在文本分類任務(wù)中,挑選和檢測就是為了分類任務(wù)服務(wù);
卡方檢驗本質(zhì)上是在檢驗“詞和某個類別 C 相互獨立“這個假設(shè)是否成立,如果偏離越大,說明這個詞很可能屬于類別 C,這個詞就是關(guān)鍵詞了。
具體來說,計算一個詞 Wi 和 一個類別 Cj 的卡方值,需要統(tǒng)計四個值:
類別為 Cj 的文本中出現(xiàn)詞語 Wi 的文本數(shù) A;
詞 Wi 在非 Cj 的文本中出現(xiàn)的文本數(shù) B;
類別為 Cj 的文本中沒有出現(xiàn)詞語 Wi 的文本數(shù) C;
詞 Wi 在非 Cj 的文本中沒有出現(xiàn)的文本數(shù) D。
用表格在展示如下:
| 包含詞 Wi | A | B | A+B |
| 不包含詞 Wi | C | D | C+D |
| 總計 | A+C | B+D | N=A+B+C+D |
卡方值的計算公式如下:
對于這個計算,有這幾點說明:
每個詞和每個類別都要計算,只要對其中一個類別有幫助的詞都應(yīng)該留下;
因為是比較卡方值的大小,可以不需要 N ,因為它是總的文本數(shù),每個詞都一樣;
卡方值越大,表示離“詞語和類別相互獨立”的假設(shè)越遠,也就是詞語和類別更可能是互相不獨立,也就是詞語可能就是關(guān)鍵詞。
2. 信息增益
信息增益也是一種有監(jiān)督的關(guān)鍵詞選擇方法,需要標注信息。
首先要了解信息熵這個概念,它其實指的是對一件事情的不確定性的大小,比如給定任意一個文本,讓你猜它屬于什么類別,如果每個類別的文本數(shù)量差不多,那么肯定不好猜,但是假如少數(shù)類別的文本,比如類別C的文本占據(jù)了90%的數(shù)量,那么可以猜它是類別 C 的猜中概率就很高。
這兩種情況的區(qū)別激素信息熵不同:
各個類別的文本數(shù)量差不多時,信息熵比較大;
少數(shù)類別的文本數(shù)量明顯較多時,信息熵就較小。
接下來,假如從一堆文本中挑出包含有詞語 W 的文本數(shù),再來猜任意一條文本的類別時,還是會存在上述兩種情況,但如果在整個文本上的情況是 1,挑出包含詞 W 后的情況是 2,那么這種情況就說明 W 發(fā)揮了很大作用,這個過程其實也就是信息增益了。
信息增益計算的步驟如下:
統(tǒng)計全局文本的信息熵;
統(tǒng)計每個詞的條件熵,也就是知道一個詞后再統(tǒng)計文本的信息熵,這里需要統(tǒng)計包含和不包含詞兩部分的信息熵,再按照各自文本比例加權(quán)平均;
兩者相減就是每個詞的信息增益。
信息增益應(yīng)用最廣的就是決策樹分類算法,經(jīng)典的決策樹分類算法挑選分裂點時就是計算每個屬性的信息增益,始終選擇信息增益最大的節(jié)點作為分裂節(jié)點。
卡方檢驗和信息增益的不同之處:前者是針對每個行為單獨篩選一套標簽,后者是全局統(tǒng)一篩選。
小結(jié)
這篇文章先是介紹了什么是用戶畫像,常用的構(gòu)建用戶畫像的例子,然后介紹了從文本數(shù)據(jù)來構(gòu)建用戶畫像的方法,以及如何結(jié)合物品信息和用戶信息。
參考:
《推薦系統(tǒng)三十六式》第4-5節(jié)課程
精選AI文章
1.?機器學習入門學習資料推薦
2.初學者的機器學習入門實戰(zhàn)教程!
3.常用機器學習算法匯總比較(完)
4.特征工程之數(shù)據(jù)預(yù)處理(上)
5.實戰(zhàn)|手把手教你訓練一個基于Keras的多標簽圖像分類器
精選python文章
1.?Python 基礎(chǔ)入門--簡介和環(huán)境配置
2.?python版代碼整潔之道
3.?快速入門 Jupyter notebook
4.?Jupyter 進階教程
5.?10個高效的pandas技巧
精選教程資源文章
1.?[資源分享] TensorFlow 官方中文版教程來了
2.?[資源]推薦一些Python書籍和教程,入門和進階的都有!
3.?[Github項目推薦] 推薦三個助你更好利用Github的工具
4.?Github上的各大高校資料以及國外公開課視頻
5.?GitHub上有哪些比較好的計算機視覺/機器視覺的項目?
歡迎關(guān)注我的微信公眾號--算法猿的成長,或者掃描下方的二維碼,大家一起交流,學習和進步!
?如果覺得不錯,在看、轉(zhuǎn)發(fā)就是對小編的一個支持!
總結(jié)
以上是生活随笔為你收集整理的RS(2)--从文本数据到用户画像的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 12张图带你彻底理解分布式事务产生的场景
- 下一篇: 浅谈(Java)AIO-异步IO