全文共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 – manwoman ~= Queen(国王–男性女性 ~= 女王等任务),近乎神迹 。
现在有两种word2vec模型——连续词袋模型与Skip-Gram模型 。本文将使用后者 。
首先要了解如何计算word2vec向量或嵌入 。

2. 如何生成word2vec词嵌入?
word2vec模型是一个单个简单隐藏层的神经网络模型 。模型任务用于预测语句中每个单词的临近单词 。然而,我们的目标与此完全无关 。我们想做的只是知道模型被训练后隐藏层所学习的权重 。这些权重可做被用做词嵌入 。
下面的例子用于理解word2vec模型是如何工作的 。思考以下句子:

假设“teleport(传输)”这个词作为输入词 。该词拥有规格为2的上下文窗口 。这意味着只将此词左右两侧的两个单词作为相近单词 。
注意:上下文窗口的规格非固定,可根据需要改变 。
现在,任务是逐一选择相近单词(上下文窗口中的单词)并确定词汇表中每个单词被选中的可能性 。听起来很容易 , 对吗?
通过另一个例子来理解这个过程 。
2.1 训练数据
需要一个标签数据集来训练神经网络模型 。这意味着数据集需要有一组输入,每组都会有相应输出 。这时你可能会想问以下问题:
· 何处寻找这样的数据集?
· 该数据集需要包含什么内容?
· 这组数据有多大?
好消息!可以很容易地创建自己的标签数据来训练word2vec模型 。如下阐述了如何从文本生成数据集 。应用其中的一个句子并创建训练数据 。
第一步:黄色高亮单词作为输入,绿色高亮单词为输出 。窗口规格为2个单词 。将首单词作为输入词 。

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

第二步:将第二个单词作为输入词 。上下文窗口将同时改变 。现在的相近单词变成了“we”、“become”和“what” 。

新的训练样本将附于之前的样本后面,如下所示:

重复以上步骤直至最后一个单词 。最后 , 完整的训练数据如下所示:


一个句子能生成27个训练样本 。太赞了!这是我喜欢处理非结构化数据的原因之一——能让标签数据集从无到有 。
2.2 生成word2vec词嵌入
现在假设存在一组句子,用同样的方法提取出一组训练样本 。将会得到大量训练数据 。
【案例 代码详解:用Word2Vec建立你的私人购物助手】假设该数据集中唯一单词(即只出现一次的单词)的数量是5000,并且希望为每一个单词创建规格为100的单词向量 。同时word2vec架构如下所示:
· V=5000(词汇表规格)
· N=100(隐藏单元数量或词嵌入长度)

输入是独热编码向量 , 输出层是词汇表中各单词成为相近单词的概率 。
一旦模型被训练,很容易提取WV x N 矩阵的学习权重 , 并用以提取单词 。

如上所示,权重矩阵的规格为5000x100 。第一行对应词汇表中的第一个单词,第二行对应第二个 , 以此类推 。

这就是通过word2vec生成固定规格的单词向量或单词嵌入的方法 。数据集中的相似词会有相似向量,如指向同一方向的向量 。比如 , “car”和“jeep”两个词有着相似的向量 。

这是对于NLP中如何应用word2vec模型的简要介绍 。
实操之前请回答这个问题:如何将word2vec模型应用于产品推荐等非NLP任务?相信你从读到本文主题就想到了这一点 。下面解决此问题 。

3. 将word2vec模型应用于非文本数据
运用word2vec创建文本向量表示所需的自然语言有什么本质特征?
其本质特征即为文本的序列特质 。每个句子或短语都包含单词序列 。在没有序列的情况下,读者将难以理解文本 。试试解释以下句子:
