案例+代码详解:用Word2Vec建立你的私人购物助手

全文共7812字,预计学习时长16分钟或更长

图片来源:unsplash.com/@pixtolero2

你注意过亚马逊的“为你推荐”功能吗?事实上,此功能是由机器学习驱动的,精准无比。

网飞、谷歌、亚马逊、Flipkart等公司斥巨资完善推荐引擎是有原因的。推荐引擎是强大的获客渠道,并能增强用户体验。

举个例子:登录一个常用的网上商城买躺椅,商城会展示出几百种躺椅。

从传统的两座躺椅到回压躺椅;从可升降躺椅到靠墙躺椅。我们试着点开一个皮革手动躺椅:

 

注意此页面上展现的不同信息。图片左边包含从不同角度拍摄的产品照片。右边展示了产品细节以及相似产品图片。

网站推荐给我们相似的产品,帮消费者节省了手动搜寻和浏览相似扶手椅的时间。

本文将将从一个独特的角度展开展示如何搭建推荐系统,即应用一个NLP概念——Word2vec来进行推荐。

目录

1. word2vec介绍——单词的向量表示

2. 如何生成word2vec词嵌入?

2.1 训练数据

2.2 生成word2vec词嵌入

3. 对非文本数据应用word2vec模型

4. 案例研究:对于网上产品推荐使用word2vec

1. word2vec介绍——单词的向量表示

众所周知,机器处理原始文本数据。实际上,机器几乎不可能处理数据文本之外的其它文本。因此,以向量的形式表示文本一直是所有NLP任务的重要步骤。

其中非常关键的一步是word2vec词嵌入的使用。该方法在2013年被引入NLP领域,完全改变了NLP的前景。

这些嵌入法代表了处理词类比和相似度等任务可达到的最高水准。word2vec嵌入法也能实现King – man +woman ~= Queen(国王–男性 + 女性 ~= 女王等任务),近乎神迹。

现在有两种word2vec模型——连续词袋模型与Skip-Gram模型。本文将使用后者。

首先要了解如何计算word2vec向量或嵌入。

 

2. 如何生成word2vec词嵌入?

word2vec模型是一个单个简单隐藏层的神经网络模型。模型任务用于预测语句中每个单词的临近单词。然而,我们的目标与此完全无关。我们想做的只是知道模型被训练后隐藏层所学习的权重。这些权重可做被用做词嵌入。

下面的例子用于理解word2vec模型是如何工作的。思考以下句子:

 

假设“teleport(传输)”这个词作为输入词。该词拥有规格为2的上下文窗口。这意味着只将此词左右两侧的两个单词作为相近单词。

注意:上下文窗口的规格非固定,可根据需要改变。

现在,任务是逐一选择相近单词(上下文窗口中的单词)并确定词汇表中每个单词被选中的可能性。听起来很容易,对吗?

通过另一个例子来理解这个过程。

2.1 训练数据

需要一个标签数据集来训练神经网络模型。这意味着数据集需要有一组输入,每组都会有相应输出。这时你可能会想问以下问题:

· 何处寻找这样的数据集?

· 该数据集需要包含什么内容?

· 这组数据有多大?

好消息!可以很容易地创建自己的标签数据来训练word2vec模型。如下阐述了如何从文本生成数据集。应用其中的一个句子并创建训练数据。

第一步:黄色高亮单词作为输入,绿色高亮单词为输出。窗口规格为2个单词。将首单词作为输入词。

 

因此,该输入词的训练样本如下所示:

输入

输出

we

must

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要将Word2Vec的词嵌入与BERT模型结合起来,可以使用以下步骤: 1. 导入所需的库: ```python from transformers import BertModel, BertTokenizer import torch import numpy as np ``` 2. 加载BERT模型和分词器: ```python model_name = 'bert-base-uncased' bert_model = BertModel.from_pretrained(model_name) tokenizer = BertTokenizer.from_pretrained(model_name) ``` 3. 加载Word2Vec词嵌入模型并获取词嵌入向量: ```python word2vec_model_path = 'path_to_word2vec_model' # 替换为你的Word2Vec模型路径 # 加载Word2Vec模型 word2vec_model = gensim.models.Word2Vec.load(word2vec_model_path) # 获取词汇表和词嵌入矩阵 vocab = word2vec_model.wv.index_to_key embeddings = word2vec_model.wv.vectors ``` 4. 将Word2Vec的词嵌入转换为PyTorch张量: ```python embeddings = torch.tensor(embeddings) ``` 5. 将Word2Vec的词嵌入与BERT的词嵌入矩阵拼接在一起: ```python # 获取BERT的词嵌入矩阵 bert_embeddings = bert_model.embeddings.word_embeddings.weight.data # 将Word2Vec的词嵌入与BERT的词嵌入矩阵拼接在一起 combined_embeddings = torch.cat([bert_embeddings, embeddings], dim=0) ``` 6. 更新BERT模型的词嵌入矩阵: ```python bert_model.embeddings.word_embeddings.weight.data = combined_embeddings ``` 现在,BERT模型的词嵌入矩阵已经包含了Word2Vec的词嵌入。你可以使用这个更新后的BERT模型进行文本分类、命名实体识别等任务。请注意,Word2Vec的词嵌入矩阵需要与BERT模型的词汇表对齐,因此确保两者的词汇表相同或存在一定的重叠部分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值