基于skip-gram做推荐系统的想法
一、人工智能之自然语言处理
自然语言处理(Natural Language Processing, NLP),是人工智能的分支科学,意图是使计算机具备处理人类语言的能力。
“处理人类语言的能力”要达到什么效果呢?举个例子!班主任问路班长:“你能把粉笔递过来么?”。这句话有两层意思,第一层:你能不能把粉笔递过来;第二层:把粉笔递过来。Get到第一层,班长回答“能”,Get到第二层意思,班长递上粉笔。倘若班长仅回答了“能”,情景略尴尬。
对于人类来说,Get到两层意思没什么问题,但是要计算机Get到第二层意思就不那么简单。因为人类语言囊括了许多主观意识,是人从出生开始不断学习而形成的技能,如果想要计算机达到这样的效果,也需要有一个学习的过程。基于这样一个出发点,自然语言处理应运而生。
二、自然语言处理之word2vec
计算机智能保存0、1这样的数据,不会保存kitty、tom、jerry、舒克这样的文本,那么该如何表达文本呢?
1、 one-hot编码
又称独热编码、一位有效编码。直观来说就是有多少个状态就有多少比特,而且只有一个比特为1,其他全为0的一种码制,如图一:
|
kitty |
1 |
0 |
0 |
0 |
|
tom |
0 |
1 |
0 |
0 |
|
jerry |
0 |
0 |
1 |
0 |
|
舒克 |
0 |
0 |
0 |
1 |
图一
举个例子:我们用{1,0,0,0}表示kitty,用{0,0,0,1}表示tom。这样kitty与tom之间的区分程度就可以用数学中的向量距离来表示。
但是one-hot有一个弊端,就是表达方式太冗余,仅仅利用了一个位置,其他位置全部浪费了。上面4个单词用了4列,其中3列为0,如果有1000个单词,那么就会有999列为0。因此需要一种更好的表达方式。
2、 Embeddings
是一组广泛应用于预测NLP建模的特征工程技术,是比one-hot更有效率的一种表达方式,如图二:
|
Cat |
Mouse |
|
|
kitty |
0.8 |
0.2 |
|
tom |
0.9 |
0.1 |
|
jerry |
0.2 |
0.8 |
|
舒克 |
0.3 |
0.7 |
图二
我们使用Cat和Mouse两个特征,kitty{0.8,0.2}与tom{0.9,0.1}之间的距离要小于kitty{0.8,0.2}与jerry{0.2,0.8}之间的距离,与直观上的感受是一致的,也可以达到区分的目的。而且空间占用相比于one-hot减小了一倍。
三、word2vec之skip-gram
首先我们要有一个直观的感受,来看下面四个句子:
1、 武磊在西班牙足球甲级联赛打入首粒入球;
2、 武磊确认为西班牙人足球队本场比赛的首发;
3、 湖人5连胜,詹姆斯三双再刷NBA历史纪录;
4、 詹姆斯又创NBA里程悲,湖人还有办法吗?
上面四个句子,我们可以发现:当“武磊”出现时,大概率会出现“足球”、“西班牙”, 小概率出现“NBA”;当“詹姆斯”出现时,大概率会出现“NBA”、“湖人”,小概率出现“足球”。
上述问题可以换一种抽象的描述:当X出现时,Y1、Y2、Y3…Yn会以较大概率出现。Skip-Gram-Naïve-Softmax模型可以处理这种情况,如图三:

图三
假设我们的输入是最左边的one-hot-vector向量,经过VxD维矩阵M1映射为1xD的Vc向量,再经过DxV维矩阵M2映射,最后经过SoftMax成为公式一
公式1
公式1可以用来用来表示的具体信息,我们暂不讨论数学公式,仅从直观上分析:要找到一种情景S使公式1最大,从而最有效的对矩阵M1、M2进行训练(参考神经网络相关知识)。
那么情景S如何选取呢,Skip-gram将情景S定义为单词的上下文,即距离目标单词Wi物理位置较近的Wi-1,Wi+1等等。比如说本节的例子,“武磊”附近大概率出现“足球”、“西班牙”,“詹姆斯”附近大概率出现“NBA”、“湖人“。
通过符合情景S的训练集,对图中的矩阵M1、M2进行训练,就可以得的单词的Embeddings表示,进而计算不同单词之间的距离。
代码实现、数据集:https://github.com/dongguadan/recommender-system.git
查询单词:kenya
相似度排名:
Colonialism:0.71
Sheeny:0.67
Score:0.65
Religious:0.64
Estereotyped:0.64
Africa:0.63
Maputo:0.63
Jodorowsky:0.61
Tankjacking:0.61
Cambodia:0.61

图四
四、Skip-gram应用于推荐系统
上面的数据集是基于影视评论的统计,通过计算于目标单词相似度最近的单词,可以找到与评论者近似的评论,进而对评论者的兴趣进行评估、做友好推荐。
五、参考
https://github.com/DSKSD/DeepNLP-models-Pytorch
https://www.jianshu.com/p/8e291e4ba0da
基于skip-gram做推荐系统的想法的更多相关文章
- 基于Spark的电影推荐系统(实战简介)
写在前面 一直不知道这个专栏该如何开始写,思来想去,还是暂时把自己对这个项目的一些想法 和大家分享 的形式来展现.有什么问题,欢迎大家一起留言讨论. 这个项目的源代码是在https://github. ...
- 基于Spark的电影推荐系统(推荐系统~2)
第四部分-推荐系统-数据ETL 本模块完成数据清洗,并将清洗后的数据load到Hive数据表里面去 前置准备: spark +hive vim $SPARK_HOME/conf/hive-site.x ...
- 基于Spark的电影推荐系统(推荐系统~4)
第四部分-推荐系统-模型训练 本模块基于第3节 数据加工得到的训练集和测试集数据 做模型训练,最后得到一系列的模型,进而做 预测. 训练多个模型,取其中最好,即取RMSE(均方根误差)值最小的模型 说 ...
- 基于Spark的电影推荐系统(推荐系统~7)
基于Spark的电影推荐系统(推荐系统~7) 22/100 发布文章 liuge36 第四部分-推荐系统-实时推荐 本模块基于第4节得到的模型,开始为用户做实时推荐,推荐用户最有可能喜爱的5部电影. ...
- 基于Mahout的电影推荐系统
基于Mahout的电影推荐系统 1.Mahout 简介 Apache Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域 ...
- 基于pytorch的电影推荐系统
本文介绍一个基于pytorch的电影推荐系统. 代码移植自https://github.com/chengstone/movie_recommender. 原作者用了tf1.0实现了这个基于movie ...
- 基于Spark的电影推荐系统(推荐系统~1)
第四部分-推荐系统-项目介绍 行业背景: 快速:Apache Spark以内存计算为核心 通用 :一站式解决各个问题,ADHOC SQL查询,流计算,数据挖掘,图计算 完整的生态圈 只要掌握Spark ...
- 基于Django的图书推荐系统和论坛
基于Django的图书推荐系统和论坛 关注公众号"轻松学编程"回复"图书系统"获取源码 一.基本功能 登录注册页面 基于协同过滤的图书的分类,排序,搜索,打分功 ...
- 基于trie树做一个ac自动机
基于trie树做一个ac自动机 #!/usr/bin/python # -*- coding: utf-8 -*- class Node: def __init__(self): self.value ...
随机推荐
- 【转】Java学习---HashMap和HashSet的内部工作机制
[原文]https://www.toutiao.com/i6593863882484220430/ HashMap和HashSet的内部工作机制 HashMap 和 HashSet 内部是如何工作的? ...
- java调用Linux执行Python爬虫,并将数据存储到elasticsearch--(环境脚本搭建)
java调用Linux执行Python爬虫,并将数据存储到elasticsearch中 一.以下博客代码使用的开发工具及环境如下: 1.idea: 2.jdk:1.8 3.elasticsearch: ...
- JSR规范
JSR是JavaSpecification Requests的缩写,意思是Java 规范提案.是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求.任何人都 ...
- document.getElementByClassName的兼容问题
if(!document.getElementsByClassName){ document.getElementsByClassName = function(className, element) ...
- Django商城项目笔记No.16用户部分-用户中心收货地址
首先完成省市区三级联动 新建areas应用 python ../../manage.py startapp areas 模型类代码 class Area(models.Model): "&q ...
- BZOJ3632:外太空旅行(最大团,DFS)
Description 在人类的触角伸向银河系的边缘之际,普通人上太空旅行已经变得稀松平常了.某理科试验班有n个人,现在班主任要从中选出尽量多的人去参加一次太空旅行活动. 可是n名同学并不是和平相处的 ...
- MD5+DES在C#.NET与Java/Android中的加解密使用
一.背景后台(C#.NET)使用一个MD5+DES的加解密算法,查了下,很多网友都使用了这个算法.在Android里,也需要这个算法,如何把这个加解密算法切换成Java版,成了难题.毕竟好久没涉及到这 ...
- JS模拟下拉框select
最近做的一个项目有下拉框 同事都是用的是美化控件,但是用美化控件当然是好 但是网上找的一个控件不知道扩展性怎么样?对以后的维护会不会造成有影响?比如我想增加一个功能或者减少一个功能会不会影响?还有就是 ...
- python3 raise HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 403: Forbid
1.分析: 如果用 urllib.request.urlopen 方式打开一个URL,服务器端只会收到一个单纯的对于该页面访问的请求,但是服务器并不知道发送这个请求使用的浏览器,操作系统,硬件平台等信 ...
- office2016word 每次打开都有进度条问题 解决方式
最佳答案 每次打开Office 2016都提示配置进度(包括Word.PPT.Excel等等Office产品都有这种现象),如图,先是显示“安装程序正在准备必要的文件”,接着显示“正在配置Mi ...