推薦系統三十六式學習筆記:原理篇.內容推薦05|從文本到用戶畫像有多遠?

目錄

  • 從文本開始
  • 構建用戶畫像
    • 一、結構化文本
      • 1、TF-IDF
      • 2、TextRank
      • 3、內容分類:
      • 4、實體識別
      • 5、聚類
      • 6、詞嵌入
    • 二、標簽選擇
      • 1、卡方檢驗
      • 2、信息增益
  • 總結

對于一個早期的推薦系統來說,基于內容推薦離不開用戶構建一個初級的畫像,這種初級的畫像一般叫做用戶畫像(User Profile),今天我就來講一講從大量文本數據中挖掘用戶畫像常常用到的一些算法;

從文本開始

用戶這一端比如說有:
1、注冊資料中的姓名、個人簽名;
2、發表的評論、動態、日志等;
3、聊天記錄;

物品這一端也有大量文本信息,可以用于構建物品畫像(Item Profile),并最終幫助豐富用戶畫像(User Profile),這些數據舉例來說有:
1、物品的標題、描述;
2、物品本身的內容(一般指新聞資訊類);
3、物品的其他基本屬性的文本;

文本數據是互聯網產品中最常見的信息表達形式,數量多、處理快、存儲小,因為文本數據的特殊地位,所以今天專門介紹一些建立用戶畫像過程中用到的文本挖掘算法。

構建用戶畫像

要用物品和用戶的文本信息構建出一個基礎版的用戶畫像,大致需要做這些事;
1、把所有非結構化的文本結構化,去粗取精,保留關鍵信息;
2、根據用戶行為數據把物品的結構化結果傳遞給用戶,與用戶自己的結構化信息合并;

第一步最關鍵也最基礎,其準確性,粒度,覆蓋面都決定了用戶畫像的質量,這一步用到很多文本挖掘算法。
第二步會把物品的文本分析結果,按照用戶歷史行為把物品畫像(Item Profile)傳遞給用戶。

一、結構化文本

我們拿到的文本,常常是自然語言描述的,非結構化的,但是計算機在處理時,只能使用結構化的數據索引,檢索,然后向量化后再計算;所以文本分析,就是為了將非結構化的數據結構化。

從物品端的文本信息,我們可以利用成熟的NLP 算法分析得到的信息有下面幾種。
1、關鍵詞提取:最基本的標簽來源,也為其他文本分析提供基礎數據,常用TF-IDF和TextRank。
2、實體識別:人物、位置和地點、著作、影視劇、歷史事件和熱點事件等,常用于基于詞典的方法結合CRF模型。
3、內容分類:將文本按照分類體系分類,用分類來表達較粗粒度的結構化信息。
4、文本:在無人制定分類體系的前提下,無監督地將文本劃分成多個類簇也很常見,別看不是標簽,簇類編號也是用戶畫像的常見構成。
5、主題模型:從大量已有文本中學習主題向量,然后再預測新的文本在各個主題上的概率分布情況,其實這也是一種聚類思想,主題向量也不是標簽形式,也是用戶畫像的常用構成。
6、嵌入:也叫Embedding,從詞到篇章,無不可以學習這種嵌入表達。嵌入表達就是為了挖掘出字面意思之下的語義信息,并且用有限的維度表達出來。

下面我來介紹幾種常見的文本結構化算法。

1、TF-IDF

TF全稱就是Term Frequency,是詞頻的意思,IDF就是Inverse Document Frequency是逆文檔頻率的意思。TF-IDF 提取關鍵詞的思想來自信息檢索領域,其實思想很樸素,
包含了兩點:在一篇文本中反復出現的詞會更重要,在所有文本中都出現的詞更不重要。這兩點就分別量化成 TF和IDF兩個指標;
1、TF,就是詞頻,要提取關鍵詞在文本中出現的次數;
2、IDF,是提前統計好的,在已有的所有文本中,統計每一個詞出現在了多少文本中,記為n,也就是文檔頻率,一共有多少文本,記為N。

IDF就是這樣計算:

在這里插入圖片描述
計算過程為:詞出現的文檔數加1,再除總文檔數,最后結果再取對數。

IDF的計算公式有這么幾個特點:
1、所有詞的N都是一樣的,因此出現文本數越少(n)的詞,它的IDF值越大;
2、如果一個詞的文檔頻率為0,為防止計算出無窮大的IDF,所以分母中會有一個1;

計算出TF和IDF后,將兩個值相乘,就得到每一個詞的權重。根據該權重篩選關鍵詞的方式有:
1、給定一個K,取Top K個詞,這樣做簡單直接,但有一點,如果總共得到的詞個數少于K,那么所有詞都是關鍵詞了,顯然這樣做不合理。
2、計算所有詞權重的平均值,取在平均值之上的詞作為關鍵詞;

另外,在某些場景下,還會加上以下其他過濾措施,如:只提取動詞和名詞作為關鍵詞。

2、TextRank

TextRank是PageRank的私生子之一,著名的pagerank算法是Google用來衡量網頁重要性的算法,TextRank算法的思想也與之類似,可以概括為:
1、文本中,設定一個窗口寬度,比如k個詞,統計窗口內的詞和詞的共線關系,將其看成無向圖。圖就是網絡,由存在連接關系的節點構成,所謂無向圖,就是節點之間的連線不考慮從誰出發,有關系就可以了。

2、所有詞初始化的重要性都是1;
3、每個節點把自己的權重平均分配給“和自己有連接”的其他節點;
4、每個節點將所有其他節點分給自己的權重求和,作為自己的新權重;
5、如此反復迭代第3,4兩步,直到所有的節點權重收斂為止。

通過TextRank計算后的詞語權重,呈現出這樣的特點:那些有共線關系的會互相支持對方成為關鍵詞。

3、內容分類:

在門戶網站時代,每個門戶網站都有自己的頻道體系,這個頻道體系就是一個非常大的內容分類體系,這一做法也延伸到了移動互聯網UGC時代,圖文信息流APP的資訊內容也需要被自動分類到不同的頻道中,從而能夠得到最粗粒度的結構化信息,也被很多推薦系統用來在用戶冷啟動時探索用戶興趣。

在門戶時代的內容分類,相對來說容易,因為那時候的內容都是長文本,長文本的內容分類可以提取很多信息,而如今UGC當道的時代,短文本的內容分類則更困難一些。短文本分類方面的經典算法是SVM,子啊工具上現在最常用的是Facebook開源的FastText。

4、實體識別

命名實體識別(也常常被簡稱為NER,Name-Entity Recognition)在NLP技術中常常被認為是序列標注問題,和分詞、詞性標注屬于同一類問題。

所謂序列標注問題,就是給你一個字符序列,從左往右遍歷每個字符,一邊遍歷一邊對每一個字符分類,分類的體系因序列標注問題不同而不同;
1、分詞問題:對每一個字符分類為“詞開始”“詞中間”“詞結束”三類之一;
2、詞性標注:對于每一個分好的詞,分類為定義的詞性集合之一;
3、實體識別:對每一個分好的詞,識別為定義的命名實體集合之一;

對于序列標注問題,通常的算法就是隱馬爾可夫模型(HMM)或者條件隨機場(CRF),我們在推薦系統中主要是挖掘出想要的結構化結果,對其中原理有興趣再去深入了解。

實體識別還有比較實用化的非模型做法:詞典法。提前準備好各種實體的詞典,使用trie-tree數據結構存儲,拿著分好的詞去詞典里找,找到某個詞就任務是提前定義好的實體。以實體識別為代表的序列標注問題上,工業級別的工具SpaCy比NLTK在效率上優秀一些;

5、聚類

傳統聚類方法在文本中的應用,今天逐漸被主題模型取代,同樣是無監督模型,以LDA為代表的主題模型更能夠更準確地抓住主題,并且能夠得到軟聚類的效果,也就是說可以讓一條文本屬于多個類簇。

LDA模型需要設定主題個數,如果你有時間,那么這個K可以通過一些實驗來對比挑選,方法是:每次計算K個主題兩兩之間的平均相似度,選擇一個較低的K值;在推薦系統領域,只要計算資源夠用,主題數可以盡量多一些。

另外,需要注意的事,得到文本在各個主題上的分布,可以保留概率最大的前幾個主題作為文本的主題。LDA工程上較難的是并行化,如果文本數量沒有到海量程度,提高單機配置是可以的,開源的LDA訓練工具有Gensim,PLDA等可供選擇。

6、詞嵌入

關于嵌入,是一個數學概念。以詞嵌入為例來說吧。
詞嵌入,也叫作Word Embedding。前面講到的結構化方案,除了LDA,其他得到的一下標簽無一例外都是稀疏的,而詞嵌入則能夠為每一個詞學習得到一個稠密的向量。

比如北京,可能包含“首都,中國,北方,直轄市,大城市”等等這些詞義在所有文本上是有限的,比如128個,于是每個詞就有一個128維的向量表達,向量中各個維度上的值大小代表了詞包含各個語義的多少。

得到這些向量可以做:
1、計算詞和詞之間的相似度,擴充結構化標簽;
2、累加得到一個文本的稠密向量;
3、用于聚類,會得到比使用詞向量聚類更好的語義聚類效果。

這方面當屬大名鼎鼎的Word2Vec了,Word2Vec是用淺層神經網絡學習得到每個詞的向量表達,Word2Vec最大的貢獻在于一些工程技巧上的優化,使得百萬詞的規模是在單機上可以幾分鐘輕松跑出來,得到這些詞向量后可以聚類或者進一步合成句子向量再使用;

二、標簽選擇

用戶端的文本,物品端的文本如何結構化,得到諸如標簽(關鍵詞,分類等)、主題、詞嵌入向量。接下來就是第二步:如何把物品的結構化信息給用戶呢?

我們想一想,用戶在產品上看到了很多我們用各種邏輯和理由展示給他的物品,他只從中消費了一部分物品。現在問題就是,到底是哪些特性吸引了他消費呢?

我們把用戶對物品的行為,消費沒有消費看成是一個分類問題。用戶用實際行動幫我們標注了若干數據,那么挑選出他實際感興趣的特性就變成了特征選擇問題。

最常用的兩個方法:卡方檢驗(CHI)和信息增益(IG)。基本思想是:
1、把物品的結構化內容看成文檔;
2、把用戶對物品的行為看成是類別;
3、每個用戶看到過的物品就是一個文本集合;
4、在這個文本集合上使用特征選擇算法選出每個用戶關心的東西。

1、卡方檢驗

CHI就是卡方檢驗,本身是一種特征選擇方法。

前面的TF-IDF和TextRank都是無監督關鍵詞提取算法,而卡方檢驗(CHI)則是有監督的,需要提供分類標注信息。

為什么需要呢?在文本分類任務中,挑選關鍵詞是為了分類任務服務,而不僅僅是挑選出一種直觀上看著重要的詞。

卡方檢驗本質上在檢驗詞和某個類別C相互獨立這個假設是否成立,和這個假設偏離越大,就越說明這個詞和類別C關聯緊密,那當然這個詞就是關鍵詞了。

計算一個詞Wi和Cj的卡方值,需要統計四個值:
1、類別為 C j C_j Cj?的文本中出現詞 W i W_i Wi?的文本數A;
2、詞 W i W_i Wi?在非 C j C_j Cj?的文本中出現的文本數B;
3、類別為 C j C_j Cj?的文本中沒有出現詞 W i W_i Wi?的文本數C;
4、詞 W i W_i Wi?在非 C j C_j Cj?的文本中沒有出現的文本數D;

在這里插入圖片描述
然后按照如下公式計算每一個詞和每一個類別的卡方值:

在這里插入圖片描述
關于這個卡方值計算,我在這里說明幾點:
1、每個詞和每個類別都要計算,只要對其中一個類別有幫助都應該留下;
2、由于是比較卡方值的大小,所以公式的N可以不參與計算,因為它對于每個詞都一樣,就是總的文本數;
3、卡方值越大,意為著偏離詞和類比相互獨立的假設越遠;

2、信息增益

IG即information Gain,信息增益,也是一種有監督的關鍵詞選擇方法,也需要有標注信息。要理解信息增益,先理解信息熵;
信息熵,舉一個例子,比如一批文本被標注了類別,那么隨意挑選一個文本,問你這是什么類別?
如果各個類別的文本數量都差不多,也就是說每個類別的概率都相對較小,則信息熵較大;
如果其中一個類別的文本數明顯大于其他類別,你猜這個類比猜對的概率就相對較大,此時這個類別的信息熵則較小;
可以簡單理解信息熵和概率成反比,信息熵大,概率低,信息熵小,則概率大;

信息增益表示在得知特征X的信息后,對于分類結果的不確定性的減少程度。具體來說,信息增益是指在得知特征X的取值后,對于分類結果的熵減少的程度。
信息增益的計算公式如下:
信息增益 = 父節點的熵 ? 子節點的熵 \text{信息增益} = \text{父節點的熵} - \text{子節點的熵} 信息增益=父節點的熵?子節點的熵

信息增益應用最廣就是數據挖掘中的決策樹分類算法,經典的決策樹分類算法挑選分裂節點時就是計算各個屬性的信息增益,始終挑選信息增益最大的節點作為分裂節點。

卡方檢驗和信息增益不同之處在于:前者是針對每一個行為單獨篩選一套標簽出來,后者是全局統一篩選;
這些方法都是在離線階段批量完成的,把用戶的畫像生成配置成離線任務,每天更新一遍,次日就可以使用新的用戶畫像了。

總結

用戶畫像對于推薦系統還是非常必要的,而產品中屬文本數據越多,那如何用文本數據構建出用戶的畫像內容呢?
本文按照如下步驟梳理了這一過程:
1、分析用戶的文本和物品的文本,使其結構化;
2、為用戶挑選有信息量的結構化數據,作為其畫像內容;

其中,我們提出了把為用戶挑選畫像標簽看成是特征選擇問題,主要方法是卡方檢驗和信息增益。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/24541.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/24541.shtml
英文地址,請注明出處:http://en.pswp.cn/web/24541.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【數據結構】棧的應用

目錄 0 引言 1 棧在括號匹配中的應用 2 棧在表達式求值中的應用 2.1 算數表達式 2.2 中綴表達式轉后綴表達式 2.3 后綴表達式求值 3 棧在遞歸中的應用 3.1 棧在函數調用中的作用 3.2 棧在函數調用中的工作原理 4 總結 0 引言 棧(Stack)是一…

MySQL A表的字段值更新為B表的字段值

MySQL A表的字段值更新為B表的字段值 準備數據表 create table person (id int unsigned auto_increment comment 主鍵 primary key,uuid varchar(32) not null comment 系統唯一標識符32個長度的字符串,mobile varchar(11) null comment 中國國內手機號,nickn…

使用 Ollama 和 Open WebUI 自托管 LLM 聊天機器人(無需 GPU)

?點擊這里?:🚀原文鏈接:(更好排版、視頻播放、社群交流、最新AI開源項目、AI工具分享都在這個公眾號!) 使用 Ollama 和 Open WebUI 自托管 LLM 聊天機器人(無需 GPU) &#x1f31…

二叉查找樹詳解

目錄 二叉查找樹的定義 二叉查找樹的基本操作 查找 插入 建立 刪除 二叉樹查找樹的性質 二叉查找樹的定義 二叉查找樹是一種特殊的二叉樹,又稱為排序二叉樹、二叉搜索樹、二叉排序樹。 二叉樹的遞歸定義如下: (1)要么二…

10. MySQL 用戶

文章目錄 【 1. 權限表 】1.1 user 權限表1.1.1 用戶列1.1.2 權限列1.1.3 安全列1.1.4 資源控制列 1.2 db 表用戶列權限列 1.3 tables_priv 表1.4 columns_priv 表1.5 procs_priv表 【 2. 用戶管理 】2.1 創建用戶 CREATE USER2.2 用戶的登陸、退出登陸 MySQL退出 MySQL 2.3 重…

Java常見錯誤-內部類-簡要分析

Java常見錯誤-內部類-簡要分析 概念分類成員內部類(非靜態內部類)靜態內部類成員內部類和靜態內部類區別 局部內部類匿名內部類 注意事項總結 概念 ? 內部類,顧名思義,就是在一個類的內部定義的類。這種設計允許將一個類的實現細…

深度學習-10-測試

深度學習-10-測試 本文是《深度學習入門2-自製框架》 的學習筆記,記錄自己學習心得,以及對重點知識的理解。如果內容對你有幫助,請支持正版,去購買正版書籍,支持正版書籍不僅是尊重作者的辛勤勞動,也是鼓勵…

Web前端ES6-ES13筆記合集(下)

#### 五.ES10新特性 ##### 1. Object.fromEntries > Object.fromEntries()方法允許你輕松地將鍵值對列表轉換為對象 js const arr [["name", "kerwin"], ["age", 100]]; console.log(Object.fromEntries(arr))//{name: kerwin, age: 100} …

pytorch 筆記:pytorch 優化內容(更新中)

1 Tensor創建類 1.1 直接創建Tensor,而不是從Python或Numpy中轉換 不要使用原生Python或NumPy創建數據,然后將其轉換為torch.Tensor直接用torch.Tensor創建或者直接:torch.empty(), torch.zeros(), torch.full(), torch.ones(), torch.…

樹莓派【Raspberry Pi-64位】3b+,Pi4J 2.0入門

一.前言: 前面的文章講解了樹莓派在centos7 arm64版本下的使用,用一款智能小車為例子,做了代碼實踐。 由于centos7不再維護,且Pi4J 1.x版本也因為WiringPi 的局限,Pi4J從1.x升級為2.x.所以本專欄的技術棧也將進行調整,A.從centos7系統回到Raspberry Pi-64位系統。B.Pi4…

4.通用編程概念

目錄 一、變量與常量1.1 變量1.2 常量 二、遮蔽三、數據類型3.1 標量類型1. 整型2. 浮點型3. 布爾類型4.字符類型 3.2 復合類型1. 元組2. 數組 四、函數五、語句和表達式六、函數的返回值 一、變量與常量 1.1 變量 在Rust中默認的變量是不可變的,如果修改其值會導致…

《青少年編程與數學》課程方案:4、課程策略

《青少年編程與數學》課程方案:4、課程策略 一、工程師思維二、使命感驅動三、價值觀引領四、學習現代化五、工作生活化六、與時代共進 《青少年編程與數學》課程策略強調采用工程師思維,避免重復造輪子,培養使命感,通過探索興趣、…

編程語言有哪些?這些希望你都知道

編程語言有哪些 編程語言有很多種,包括但不限于以下幾種: Java:當今最普遍使用的開發語言之一,簡單易學,且跨平臺性非常強,對網絡開發的支持令人稱贊。Python:語法清楚,干凈&#…

【Vue】如何提供訪問vuex的數據

文章目錄 一、提供數據二、訪問Vuex中的數據通過$store訪問的語法1)模板中使用2)組件邏輯中使用3)js文件中使用 三、通過輔助函數 - mapState獲取 state中的數據 一、提供數據 State提供唯一的公共數據源,所有共享的數據都要統一…

[office] 快速刪除excel中的空行和列的方法 #其他#學習方法#經驗分享

快速刪除excel中的空行和列的方法 用戶在網上下載好的Excel表格打開之后發現有很多空白行,怎么樣將這些空白行或單元格一次性刪除掉呢?下面教大家在Excel中用定位一次性可以把空白行刪除 用戶在網上下載好的Excel表格打開之后發現有很多空白行,怎么樣將…

Vue3 使用audio播放語音+監聽播放語音完成事件

需求&#xff1a;輸入一段文字&#xff0c;點擊語音框&#xff0c;將本地語音&#xff08;提前準備好的&#xff09; 播放出來 播放中效果 代碼 <div class"listConAI" click"handleOpenSpeech" ><imgsrc"../../../../assets/images/blueo…

web前端 孫俏:深度探索與實戰之路

web前端 孫俏&#xff1a;深度探索與實戰之路 在這個數字化、信息化的時代&#xff0c;web前端技術以其獨特的魅力&#xff0c;吸引著越來越多的開發者投身其中。今天&#xff0c;我們將跟隨孫俏的腳步&#xff0c;一同探索web前端的深度與廣度&#xff0c;揭開其神秘的面紗。…

中文文案寫作有哪些合適的AIGC工具?

這是計育韜老師第 8 次開展面向全國高校的新媒體技術公益巡講活動了。而在每場講座尾聲&#xff0c;互動答疑環節往往反映了高校師生當前最普遍的運營困境&#xff0c;特此計老師在現場即興答疑之外&#xff0c;會盡量選擇有較高價值的提問進行文字答疑梳理。 *本輪巡講主題除了…

【Vue】開啟嚴格模式及Vuex的單項數據流

文章目錄 一、引出問題二、開啟嚴格模式 一、引出問題 目標 明確 vuex 同樣遵循單向數據流&#xff0c;組件中不能直接修改倉庫的數據 這樣數據的流向才會更加清晰&#xff0c;將來對數據的修改&#xff0c;都在倉庫內部實現的&#xff0c;更易于維護 直接在組件中修改Vuex中…

Git:版本控制的藝術與GitLab實戰指南

在當今快速發展的軟件開發領域&#xff0c;高效、協同的代碼管理是項目成功的關鍵。Git&#xff0c;作為一款分布式版本控制系統&#xff0c;憑借其強大的功能和靈活性&#xff0c;成為了眾多開發者首選的版本控制工具。本文將帶您深入探索Git的核心概念、基礎操作&#xff0c;…