架构1班 无心水
2020年7月28日 更新
开启更多功能,提升办公效能

分享人:无心水

分享主题:机器学习之Word2Vec

分享提纲:

  1. 认识机器学习
  1. 基本概念
  1. 领域划分
  1. 认识Word2vec
  1. 基本原理
  1. 理论基础
  1. 训练模型
  1. 常见API
  1. 实战
  1. WIKI中文训练实战
  1. 步骤
  1. 训练效果
  1. 向量可视化展示
  1. 推荐系统
  1. 训练用户行为记录
  1. 基于协同过滤推荐
  1. 知识扩展
  1. 分词工具
  1. 相似度
  1. 开放语料


机器学习

机器学习是计算机基于数据构建概率统计模型并运⽤模型对数据进⾏预测与分析的学科。


关于人工智能、机器学习、深度学习之间的关系:




范围划分

根据输⼊输出类型的不同,机器学习可分为

  • 分类问题
  • 回归问题
  • 标注问题


根据训练数据是否具有标签信息,可以将机器学习的任务分成以下三类。

  • 监督学习:基于已知类别的训练数据进⾏学习。
  • ⽆监督学习:基于未知类别的训练数据进⾏学习。
  • 半监督学习:同时使⽤已知类别和未知类别的训练数据进⾏学习。


监督学习

监督学习是从已标记的训练数据来推断一个功能的机器学习任务,主要特点就是训练数据是有标签的。

 

无监督学习

本质上是一个统计手段,在没有标签的数据里可以发现潜在的一些结构的一种训练方式。


我们把⼀堆猫和狗的照⽚给机器,不给这些照⽚打任何标签,但是我们希望机器能够将这 些照⽚分分类。



强化学习

首先机器会观察它所处的环境,然后做出行动;机器的行动会改变环境;接着机器再次观察环境,再次做出行动,如此循环。

每一次训练结束,机器都会收到一个回馈,机器根据回馈,不断调整模型。


强化学习更接近⽣物学习的本质,因此有望获得更⾼的智能。



Word2vec

word2vec是word Embedding 表示方式之一,属于监督学习,是NLP领域常用工具之一。由Google的Tomas Mikolov领导的一组研究人员在2013年创建和发布,并获得了专利。

基本原理

2013年goole推出的一个用于获取词向量的工具包。


算法架构:




论文


Distributed Representations of Sentences and Documents

作者:Tomas Mikolov

贡献:在前人基础上提出更精简的语言模型(language model)框架并用于生成词向量,这个框架就是 Word2vec


Efficient estimation of word representations in vector space

作者:

  贡献:专门讲训练 Word2vec 中的两个trick:hierarchical softmax 和 negative sampling


word2vec Explained- Deriving Mikolov et al.’s Negative-Sampling Word-Embedding Method

作者:Yoav Goldberg

优点:对 negative-sampling 的公式推导非常完备

缺点:不够全面,而且都是公式,没有图示,略显干枯


word2vec Parameter Learning Explained

作者:Xin Rong

优点:理论完备由浅入深非常好懂,且直击要害,既有 high-level 的 intuition 的解释,也有细节的推导过程。


模型

CBOW 模型

Continuous bag-of-words,CBOW


拿一个词语的上下文作为输入,来预测这个词语本身



训练过程演示:


word2vec-cbow.mp41.2MB


Skip-gram 模型

Skip-gram,简称sg模型


用一个词语作为输入,来预测它周围的上下文



训练过程演示:



word2vec-sg.mp41.1MB


优化方法

  • hierarchical softmax

本质是把 N 分类问题变成 log(N)次二分类

  • negative sampling

本质是预测总体类别的一个子集




词向量衡量指标

1)词汇相似度任务,比如wordsim353,但是这种方式比较依赖于数据集。

2)类比任务,比如男人-女人=国王-王后

3)应用于实际任务上的效果,比如文本分类,情感分析,句法分析,序列标注,阅读理解等等。这种方法我觉得是比较靠谱的,因为我们训练词向量是希望得到一个好的词向量,然后能在别的任务上work,

4)可视化,可以用谷歌的Embedding Projector工具,用 PCA、t-SNE对高维词向量进行可视化,把数据降到三维,以3D方式查看数据。


API

常用API:


word2vec.Word2Vec用的多些。


class gensim.models.word2vec.Word2Vec(sentences=None, corpus_file=None, size=100, alpha=0.025, window=5, min_count=5, max_vocab_size=None, sample=0.001, seed=1, workers=3, min_alpha=0.0001, sg=0, hs=0, negative=5, ns_exponent=0.75, cbow_mean=1, hashfxn=<built-in function hash>, iter=5, null_word=0, trim_rule=None, sorted_vocab=1, batch_words=10000, compute_loss=False, callbacks=(), max_final_vocab=None)


sentences:可以是一个list,对于大语料集,建议使用BrownCorpus,Text8Corpus或ineSentence构建。

sg: 用于设置训练算法,默认为0,对应CBOW算法;sg=1则采用skip-gram算法。

size:是指特征向量的维度,默认为100。

window:表示当前词与预测词在一个句子中的最大距离是多少

sample:  高频词汇的随机降采样的配置阈值,默认为1e-3,范围是(0,1e-5)

workers:  参数控制训练的并行数。


其他API参考:models.word2vec – Word2vec embeddings

实战

WIKI中文实战

wiki_zh_word-train-sg.html0.3MB

步骤


训练效果

SG模型,余炫相似性:



CBOW模型,验证相似性:

向量可视化

可视化主要是通过数据降维的形式,图形化表示。

由于维度降低了,便于计算和可视化,其更深层次的意义在于有效信息的提取综合及特征的发现。

  • 主成分分析算法(PCA):通过某种线性投影,将高维的数据映射到低维的空间中表示,并期望在所投影的维度上数据的方差最大,以此使用较少的数据维度,同时保留住较多的原数据点的特性
  • TSNE:将数据点之间的相似度转换为概率。主要是关注数据的局部结构


WIKI中文词向量PCA展示:



简易语料PCA展示:

向量PCA降维展示.html0.3MB

推荐系统


核心代码:

from gensim.models import Word2Vec
import gensim

model_file = 'user_history.model'
with open('user_history.txt') as f:
prefs_str = ''.join(f.readlines())
print("用户历史记录:")


用户历史记录:
david 融通汇成
david 人人友信-秒贷
david 宁波通商银行-房屋抵押贷
andy 永捷金融-优业贷
jack 平安银行-公积金贷
jack 永捷金融-房产抵押贷
jack 融通汇成
michale 平安普惠-宅E贷
michale 人人友信-秒贷
ann 永捷金融-车抵贷
................



def calc_item_cf():
sents = sents_from_prefs(prefs)
vocab = [s.split() for s in sents]
model = Word2Vec(vocab, size=100, window=5, min_count=1, workers=4,sg=1)
model.wv.save_word2vec_format(model_file, binary=False)

for i, item in enumerate(items):
print(i, item[0], item[1])
print('\n\r 基于产品名称的 word2vec 协同过滤推荐')
for item in set(flatMap(vocab)):
print('\n根据 %s 推荐:' % item)
for item_score in model.most_similar(positive=[item]):
item, score = item_score
print('\t%s %.2f' % (item, score))


基于产品名称的 word2vec 协同过滤推荐

根据 阳光财险-阳房贷 推荐:
永捷金融-优业贷 0.08
商银行-经营抵押 0.07
根据 中信银行-房逸贷 推荐:
工商银行-经营抵押 0.24
平安银行-公积金贷 0.12
根据 杭州银行-企业经营贷 推荐:
永捷金融-房产抵押贷 0.27
光大银行-公积金贷 0.20

知识扩展

扩展1-分词工具

常用中文分词工具对比



中文分词准确率对比



扩展2-相似度

相似度度量







扩展3-开放语料


互联网常用语料








数据源:

搜狗实验室:http://www.sogou.com/labs/resource/list_news.php

Pre-trained word vectors of 30+ languages:https://github.com/Kyubyong/wordvectors

中文维基分词语料:链接 https://pan.baidu.com/s/1qXKIPp6 密码 kade 

腾讯AI Lab开源大规模高质量中文词向量数据,800万中文词随你用:https://mp.weixin.qq.com/s/b9NWR0F7GQLYtgGSL50gQw



参考:

机器学习 – machine learning | ML

[NLP] 秒懂词向量Word2vec的本质

word2vec