电影推荐系统(二)
电影推荐思路
利用doc2vec做电影推荐,其实核心就是比较两部电影介绍文本之间的向量相似程度。自然语言处理中的分布式假设提出了“某个单词的含义由它周围的单词形成”。那么根据这个理论,与爱情相关的电影简介向量相互之间应该是相似的。那我们只需要将doc2vec模型训练出来,将文本向量化,比较文本相似度,输出排行靠前的就行了。
项目目录
数据预处理
网上关于电影简介的数据非常少,但是我们可以通过网络爬虫先获取电影信息。这里我是爬取了爱奇艺的电影信息,关于爬取操作将在另一篇文章中介绍这里只关注自然语言处理相关的操作。
网络上爬取的数据格式为csv,内容包含了id、电影名称、电影简介。
因为考虑到后续的训练,我打算将所有的数据都处理成嵌套的列表,这样就可以直接通过列表的索引,找到相对应的电影。
所需要用到的库
1 |
|
写几个函数处理源数据
1 |
|
就是简单的列表嵌套,接下来的电影类型和电影介绍也是一样的道理。
1 |
|
1 |
|
然后在主函数中读取文件并调用函数
1 |
|
接下来要对电影的简介做进一步的处理,对它进行切词和去除停用词
首先,导入停用词
1 |
|
我把停用词做成一个列表,等切词结束之后直接将不在停用词列表中的词添加列表就可以了
1 |
|
切词函数,其实就是不断地读取列表中的内容并操作,一步一步打印也没什么难度
修改一下主函数
1 |
|
将数据预处理了之后就可以进行模型的训练。
模型训练
所需要用到的库
1 |
|
因为是要将文本向量化,所以用到的就是Doc2Vec模型
该模型训练需要先将文本转化为TaggedDocument类
1 |
|
假如不关心模型的参数,只是单纯的训练模型。Doc2Vec模型的训练并不难,只需要将数据转化为TaggedDocument类就行。
然后再写一个测试函数
1 |
|
主函数
1 |
|
函数就是将文本向量化之后,比较出相似度最高的前几个电影。我直接拿了数据中的第一个爱情主题的电影来进行预测。
结果确实是可以匹配到爱情主题的电影
我们再尝试多一点电影
我们发现基本都是爱情主题的电影
结束
从结果上看这个模型好像还不错,接下来我们还可以对它进行评估,优化以及封装成一个web网站或者也可以是微信小程序。
至此电影推荐的核心部分就介绍完了。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!