Embedding方法:從Word2Vec到ltem2Vec

引言

在推薦系統領域,如何有效表征物品特征始終是核心挑戰。傳統協同過濾方法受限于稀疏性問題,直到2016年微軟研究院提出的Item2Vec方法,將自然語言處理中的Word2Vec技術創造性應用于物品表征學習,開啟了嵌入學習的新紀元。

Item2vec 脫胎于自然語言處理領域中的 word2vec 技術。word2vec 的核心目標是將文本中的單詞轉化為低維向量,使得語義相近的單詞在向量空間中距離相近。item2vec 則將這一思想拓展到了更廣泛的領域,它可以將任何類型的 “item”,如商品、電影、音樂、文章等,映射為低維向量,從而捕捉 item 之間的相似性和關聯性。這種向量表示為后續的數據分析、推薦系統、聚類等任務提供了堅實的基礎。

Word2vec核心思想

Word2Vec借鑒自然語言處理中的分布式假設:

“出現在相似上下文中的詞語具有相似語義”

將這一思想遷移到推薦場景:

  • 用戶行為序列視作"句子"
  • 單個物品視為"詞語"
  • 共同出現的物品構成"上下文"

通過神經網絡學習物品的稠密向量表示,使得相似物品在向量空間中距離相近。

數學原理

1. Skip-Gram模型

給定長度為T的物品序列 w 1 , w 2 , . . . , w T w_1,w_2,...,w_T w1?,w2?,...,wT?,最大化對數似然:

1 T ∑ t = 1 T ∑ ? k ≤ j ≤ k , j ≠ 0 log ? p ( w t + j ∣ w t ) \frac{1}{T} \sum_{t=1}^T \sum_{-k \leq j \leq k,j\neq0} \log p(w_{t+j}|w_t) T1?t=1T??kjk,j=0?logp(wt+j?wt?)

其中k為上下文窗口大小,條件概率通過softmax計算:

p ( w j ∣ w i ) = exp ? ( u j T v j ) ∑ w = 1 W exp ? ( u i T v k ) p(w_j|w_i) = \frac{\exp(\mathbf{u_j}^T \mathbf{v_j})}{\sum_{w=1}^W \exp(\mathbf{u_i}^T \mathbf{v_k})} p(wj?wi?)=w=1W?exp(ui?Tvk?)exp(uj?Tvj?)?

2. 負采樣優化

為了解決計算量過大的問題,負采樣技術應運而生。負采樣通過將公式中的 Softmax 函數替換為

p ( w j ∣ w i ) = σ ( u j T v i ) ∏ k = 1 N σ ( ? u i k T v i ) p(w_j | w_i) = \sigma(u_j^T v_i)\prod_{k = 1}^{N}\sigma(-u_{i_k}^T v_i) p(wj?wi?)=σ(ujT?vi?)k=1N?σ(?uik?T?vi?)

其中:

其中, σ ( x ) = 1 1 + exp ? ( ? x ) \sigma(x) = \frac{1}{1 + \exp(-x)} σ(x)=1+exp(?x)1? N N N是每個正樣本對應的負樣本數量。負樣本是從 unigram distribution 中按 3/4 次方采樣的。
P n ( w ) = f ( w ) 3 4 ∑ w ′ f ( w ′ ) 3 4 P_n(w) = \frac{f(w)^{\frac{3}{4}}}{\sum_{w'} f(w')^{\frac{3}{4}}} Pn?(w)=w?f(w)43?f(w)43??

其中: f ( w ) f(w) f(w)是詞 $w $ 在語料庫中的頻率。

  • f ( w ′ ) f(w') f(w) 是語料庫中每個詞 w ′ w' w的頻率。

實驗證明,這種分布顯著優于普通的一元分布。負采樣大大減少了計算量,因為它只需要考慮少數幾個負樣本,而不是整個詞匯表,使得模型能夠在大規模數據上高效訓練。

3.處理單詞頻率不平衡:子采樣過程

在實際數據中,單詞的頻率往往存在很大差異,高頻詞出現的次數遠遠多于低頻詞。這種不平衡會影響模型的學習效果,因為模型可能會過度關注高頻詞,而忽略低頻詞的信息。為了解決這個問題,引入了子采樣過程。

給定輸入單詞序列,每個單詞w以概率p(discard|w)被丟棄
p ( d i s c a r d ∣ w ) = 1 ? p f ( w ) p(discard|w) = 1 -\sqrt{ \frac{p}{f(w)}} p(discardw)=1?f(w)p? ?
其中 f ( w ) f(w) fw是單詞w的頻率,p是預定閾值。

這樣的結果是:

1.頻率較低的詞會被保留,頻率較高的詞則可能會被丟棄
2.加速了學習過程因為他降低了高頻詞的數量,降低了計算量,還顯著改善了低頻詞的表示。通過子采樣,模型能夠更加平衡地學習高頻詞和低頻詞的特征,提高了模型的泛化能力。

Item2Vec 原理

在商品推薦中的應用 在傳統的基于協同過濾(Collaborative Filtering, CF)的推薦系統中,商品之間的相似性通常是基于用戶的行為數據來計算的。Item2Vec 通過將商品的購買歷史轉換為一個序列,類似于處理自然語言中的單詞序列,來學習商品的嵌入表示。通過學習商品間的相似度,推薦系統可以根據用戶的購買歷史推薦相似的商品。

序列 vs. 集合

與傳統的自然語言處理任務不同,Item2Vec 處理的是商品的集合(如用戶購買的商品列表),而不是一個有序的商品序列。因此,在訓練過程中,Item2Vec 會忽略商品順序的信息,認為同一集合中的商品是相似的,不考慮其出現的順序或時間。

訓練過程

Item2Vec 的訓練過程與 Skip-gram with Negative Sampling 類似,模型的輸入是用戶的商品購買集合,目標是最大化目標商品與其上下文商品之間的相似度。 對于一個包含 K K K 個商品的集合,Item2Vec 的目標函數可以表示為:
Objective = ∑ i = 1 K ∑ j ≠ i log ? p ( w j ∣ w i ) \text{Objective} = \sum_{i=1}^{K} \sum_{j \neq i} \log p(w_j | w_i) Objective=i=1K?j=i?logp(wj?wi?)
其中, w i w_i wi? w j w_j wj? 是同一集合中的商品,模型的目標是學習每一對商品之間的相似度。

負采樣和子采樣代碼實現

負采樣

def get_negative_samples(word_prob, k = 5):"""從采樣分布中隨機抽取負樣本:param word_prob: 采樣分布, 字典形式, key為單詞索引, value為概率:param words: 單詞索引列表:param num_samples: 每個單詞的負樣本數量:return: 負樣本列表"""# 從采樣分布中隨機抽取負樣本word = list(word_prob.keys())prob = list(word_prob.values())negative_samples =  np.random.choice(word, size=k, p=prob)return negative_samples

子采樣

def get_unigram_distribution(words,power):"""子采樣函數:param words: 單詞索引列表:param power: 次方:return: 采樣分布"""# 使用 collections.Counter 統計每個單詞的頻率word_counts = collections.Counter(words)total_words = len(words)# 計算每個單詞的頻率word_freq_power = {word: np.power(count / total_words, power) for word, count in word_counts.items()}word_sum = sum(word_freq_power.values())# 計算每個單詞的概率word_prob = {word: freq_power / word_sum for word, freq_power in word_freq_power.items()}return word_prob

結論

Item2Vec 利用 SGNS(Skip-gram with Negative sampling) 方法通過學習商品的嵌入向量來捕捉商品間的相似性,從而提升推薦系統的性能。它將商品看作是無序集合的元素,忽略了順序信息,但仍然能夠有效地通過計算商品間的相似度來進行推薦。在實際應用中,Item2Vec 為商品推薦系統提供了一種高效、準確的解決方案。

Reference

  1. Barkan, O., & Koenigstein, N. (2016). Item2Vec: Neural item embedding for collaborative filtering. Proceedings of the 10th ACM Conference on Recommender Systems (RecSys '16) , 143-150. DOI: 10.1145/2959100.2959167
  2. 王喆《深度學習推薦系統》

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

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

相關文章

Udp發送和接收數據(python和QT)

服務端代碼 (python) import socketdef udp_server(host0.0.0.0, port12345):# 創建一個UDP套接字sock socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 綁定服務器的IP地址和端口號sock.bind((host, port))print(f"UDP服務器已啟動,監聽端口 {port}...&…

VBA腳本將DeepSeek嵌入Word中教程

一、獲取API-Key 目前我們可以直接只用官網的API來實現,申請這一步是關鍵 也可以直接訪問官網的API平臺:https://platform.deepseek.com/ ,沒注冊的注冊完登錄一下,我們點擊到左側菜單的“APIKeys”按鈕,然后點擊右側…

DeepSeek接入Siri(已升級支持蘋果手表)完整版硅基流動DeepSeek-R1部署

DeepSeek接入Siri(已升級支持蘋果手表)完整版硅基流動DeepSeek-R1部署 **DeepSeek** 是一款專注于深度學習和人工智能的工具或平臺,通常與人工智能、機器學習、自動化分析等領域有關。它的主要功能可能包括:深度學習模型搜索&…

網站搭建基本流程

需求分析: 實現網站搭建的過程:首先進行網站的需求性分析 網站可分為前臺系統和后臺系統,由不同的功能拆分為不同的模塊 如下是一個電商網站可以拆分出的模塊: 在編寫代碼前,我們要先對網站進行架構,通過…

解決elementUi el-select 響應式不生效的問題

情況一,字段類型不匹配 考慮option的value值的字段類型是否和api返回的字段類型一致&#xff0c;如果一個為字符串一個為數字類型是無法匹配上的 <template> <div><el-select v-model"value" size"large"style"width: 240px"&…

QT實戰-基于QWidget實現的異形tip窗口

本文主要介紹了qt中,基于QWidget實現異形tip窗口的幾種實現方式,話不多說,先上圖, 1.使用QPainter和QPainterPath實現 代碼:tipwnd1.h #ifndef TIPWND1_H #define TIPWND1_H#include <QWidget>class TipWnd1 : public QWidget {Q_OBJECTQ_PROPERTY(QColor my_border…

【C++篇】樹影搖曳,旋轉無聲:探尋AVL樹的平衡之道

文章目錄 從結構到操作&#xff1a;手撕AVL樹的實現一、AVL樹介紹1.1 什么是AVL樹1.2 平衡因子的定義1.3 平衡的意義1.4 AVL樹的操作 二、AVL樹的節點結構2.1 節點結構的定義&#xff1a; 三、插入操作3.1 插入操作概述3.2 步驟1&#xff1a;按二叉查找樹規則插入節點3.3 步驟2…

么是靜態住宅IP,跨境電商為什么需要靜態住宅IP

靜態住宅IP是指直接分配給一臺屬于私人住宅網絡的設備的固定IP地址&#xff0c;這種地址不會頻繁更改。它們作為代理IP&#xff0c;使使用者能夠通過這些代理服務器進行網絡訪問&#xff0c;而對外顯示的則是該住宅的IP地址。由于這些IP地址屬于真實的住宅或個人&#xff0c;并…

清華大學deepseek教程第四版 DeepSeek+DeepResearch 讓科研像聊天一樣簡單(附下載)

deepseek使用教程系列 DeepSeekDeepResearch 讓科研像聊天一樣簡單(附下載) https://pan.baidu.com/s/1VMgRmCSEzNvhLZQc8mu6iQ?pwd1234 提取碼: 1234 或 https://pan.quark.cn/s/f3d4511b790a

leetcode刷題記錄(一百零七)——279. 完全平方數

&#xff08;一&#xff09;問題描述 279. 完全平方數 - 力扣&#xff08;LeetCode&#xff09;279. 完全平方數 - 給你一個整數 n &#xff0c;返回 和為 n 的完全平方數的最少數量 。完全平方數 是一個整數&#xff0c;其值等于另一個整數的平方&#xff1b;換句話說&#x…

軟考高級信息系統項目管理師筆記-第2章信息技術發展

第2章 信息技術發展 2.1 信息技術及其發展 1、按表現形態的不同,信息技術可分為硬技術(物化技術)與軟技術(非物化技術)。前者指各種信息設備及其功 能,如傳感器、服務器、智能手機、通信衛星、筆記本電腦。后者指有關信息獲取與處理的各種知識、方法 與技能,如語言文字…

搭建RAG知識庫的完整源碼實現

搭建RAG知識庫的完整源碼實現&#xff08;基于Python 3.8&#xff09;&#xff1a; # -*- coding: utf-8 -*- # 文件名&#xff1a;rag_knowledge_base.py # RAG知識庫搭建完整源碼&#xff08;含中文注釋&#xff09;import os import re import shutil import chromadb from…

利用AFE+MCU構建電池管理系統(BMS)

前言 實際BMS項目中&#xff0c;可能會綜合考慮成本、可拓展、通信交互等&#xff0c;用AFE&#xff08;模擬前端&#xff09;MCU&#xff08;微控制器&#xff09;實現BMS&#xff08;電池管理系統&#xff09;。 希望看到這篇博客的朋友能指出錯誤或提供改進建議。 有紕漏…

基于SpringBoot的智慧家政服務平臺系統設計與實現的設計與實現(源碼+SQL腳本+LW+部署講解等)

專注于大學生項目實戰開發,講解,畢業答疑輔導&#xff0c;歡迎高校老師/同行前輩交流合作?。 技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;…

什么是 Cloud Studio DeepSeek ; 怎么實現Open WebUI快速體驗

什么是 Cloud Studio DeepSeek ;怎么實現Open WebUI快速體驗 一、概述 歡迎使用 Cloud Studio DeepSeek 工作空間!我們已為您預裝并啟動了以下服務,等待加載十幾秒即可查看效果: Ollama 服務:支持通過 API 調用 DeepSeek 模型。 AnythingLLM 前端服務:提供交互式聊天界…

【Python 語法】常用 Python 內置函數

reversed() 反轉reversed() 的語法反轉字符串、列表、元組 sorted() 自定義排序sorted() 語法使用示例1. 基本排序&#xff1a;默認升序排列2. 基本排序&#xff1a;降序排列3. 自定義排序&#xff1a;使用 key 參數4. 自定義排序&#xff1a;按某種規則進行排序5. 排序字典&am…

[網絡] 如何開機自動配置靜態IP,并自動啟動程序

背景&#xff1a; 需要固定ip地址&#xff0c;并且能夠自動啟動可執行文件。 流程&#xff1a; 1.在/etc/network/interfaces 中添加 auto eth0 iface eth0 inet staticaddress 192.168.1.100netmask 255.255.255.0gateway 192.168.1.1 2.將下面這行代碼添加自動啟動腳本 …

打造智能聊天體驗:前端集成 DeepSeek AI 助你快速上手

DeepSeek AI 聊天助手集成指南 先看完整效果&#xff1a; PixPin_2025-02-19_09-15-59 效果圖&#xff1a; 目錄 項目概述功能特點環境準備項目結構組件詳解 ChatContainerChatInputMessageBubbleTypeWriter 核心代碼示例使用指南常見問題 項目概述 基于 Vue 3 TypeScrip…

【C# 數據結構】隊列 FIFO

目錄 隊列的概念FIFO (First-In, First-Out)Queue<T> 的工作原理&#xff1a;示例&#xff1a;解釋&#xff1a; 小結&#xff1a; 環形隊列1. **FIFO&#xff1f;**2. **環形緩沖隊列如何實現FIFO&#xff1f;**關鍵概念&#xff1a; 3. **環形緩沖隊列的工作過程**假設…

Mac 清理緩存,提高內存空間

步驟 1.打開【訪達】 2.菜單欄第五個功能【前往】&#xff0c;點擊【個人】 3.【command shift J】顯示所有文件&#xff0c;打開【資源庫】 4.刪除【Containers】和【Caches】文件 Containers 文件夾&#xff1a;用于存儲每個應用程序的沙盒數據&#xff0c;確保應用程序…