模型设计介绍
神经网络模型设计是电影推荐任务中重要的一环。它的作用是提取图像、文本或者语音的特征,利用这些特征完成分类、检测、文本分析等任务。在电影推荐任务中,我们将设计一个神经网络模型,提取用户数据、电影数据的特征向量,然后计算这些向量的相似度,利用相似度的大小去完成推荐。
根据第一章中对建模思路的分析,神经网络模型的设计包含如下步骤:
- 分别将用户、电影的多个特征数据转换成特征向量。
- 对这些特征向量,使用全连接层或者卷积层进一步提取特征。
- 将用户、电影多个数据的特征向量融合成一个向量表示,方便进行相似度计算。
- 计算特征之间的相似度。
依据这个思路,我们设计一个简单的电影推荐神经网络模型:
图1:网络结构的设计
该网络结构包含如下内容:
首先,提取用户特征和电影特征作为神经网络的输入,其中:
- 用户特征包含四个属性信息,分别是用户ID、性别、职业和年龄。
- 电影特征包含三个属性信息,分别是电影ID、电影类型和电影名称。
提取用户特征。使用Embedding层将用户ID映射为向量表示,输入全连接层,并对其他三个属性也做类似的处理。然后将四个属性的特征分别全连接并相加。
提取电影特征。将电影ID和电影类型映射为向量表示,输入全连接层,电影名字用文本卷积神经网络得到其定长向量表示。然后将三个属性的特征表示分别全连接并相加。
得到用户和电影的向量表示后,计算二者的余弦相似度。最后,用该相似度和用户真实评分的均方差作为该回归模型的损失函数。
衡量相似度的计算有多种方式,比如计算余弦相似度、皮尔森相关系数、Jaccard相似系数等等,或者通过计算欧几里得距离、曼哈顿距离、明可夫斯基距离等方式计算相似度。余弦相似度是一种简单好用的向量相似度计算方式,通过计算向量之间的夹角余弦值来评估他们的相似度,本节我们使用余弦相似度计算特征之间的相似度。
为何如此设计网络呢?
网络的主体框架已经在第一章中做出了分析,但还有一些细节点没有确定。
- 如何将“数字”转变成“向量”?
如NLP章节的介绍,使用词嵌入(Embedding)的方式可将数字转变成向量。
- 如何合并多个向量的信息?例如:如何将用户四个特征(ID、性别、年龄、职业)的向量合并成一个向量?
最简单的方式是先将不同特征向量(ID 32维、性别 16维、年龄 16维、职业 16维)通过4个全连接层映射到4个等长的向量(200维度),再将4个等长的向量按位相加即可得到1个包含全部信息的向量。
电影类型的特征是多个数字转变成的多个向量(6个),也可以通过该方式合并成1个向量。
- 如何处理文本信息?
如NLP章节的介绍,使用卷积神经网络(CNN)和长短记忆神经网络(LSTM)处理文本信息会有较好的效果。因为电影标题是相对简单的短文本,所以我们使用卷积网络结构来处理电影标题。
- 尺寸大小应该如何设计? 这涉及到信息熵的理念:越丰富的信息,维度越高。所以,信息量较少的原始特征可以用更短的向量表示,例如性别、年龄和职业这三个特征向量均设置成16维,而用户ID和电影ID这样较多信息量的特征设置成32维。综合了4个原始用户特征的向量和综合了3个电影特征的向量均设计成200维度,使得它们可以蕴含更丰富的信息。当然,尺寸大小并没有一贯的最优规律,需要我们根据问题的复杂程度,训练样本量,特征的信息量等多方面信息探索出最有效的设计。
第一章的设计思想结合上面几个细节方案,即可得出上图展示的网络结构。
接下来我们进入代码实现环节,首先看看如何将数据映射为向量。在自然语言处理中,我们常使用词嵌入(Embedding)的方式完成向量变换。