对于文本处理,首要的任务是要对非结构化数据进行结构化处理,由此诞生了词向量表示的方法,再众多词向量表示方法中,尤其以One_hot和word2vec两种方法最常用,下面也针对这俩方法进行阐述

One_hot方法

One_hot方法是最简单的一种方法,也是出现最早的一种方法,其原理就比如一个语料有M各词,其中每一个词的One_hot表示方式为当前词用1表示,其余用0表示,也就是说语料有多少词,那么词向量的维度就是多少,而且词向量形式如[0,0,......,1,0,0,......],其中第i个词为1,其余为0。
从One_hot的原理不难发现,当语料中添加新的词,那么每个词的词向量就会发生变化,而且向量中充斥着大量的0,使得过于稀疏,除此之外,语料有多大,词向量的维度就有多大,使得最终的矩阵变得过于庞大,不利于存储及计算。尤其是One_hot不能表示词语之间的关系,比如猫,老鼠,直观上很容易理解的到老鼠 有比较强的关系,如果用One_hot来表示,结果就是
“猫”:[0,0,0,1,0,0,0]
“老鼠”:[0,0,1,0,0,0,0]
那么两个向量做内积,就很容易发现[0,0,0,1,0,0,0] x[0,0,1,0,0,0,0] = 0,最后的结果就是毫无关系,这显然不太符合实际,所以再现在One_hot方法较少的被用到实际项目中了。
针对One_hot存在的问题,Hinton提出了分布式表示方法,很好的解决了One_hot的缺陷。其中最具代表的就是word2vec

Word2Vec方法

Word2Vec通过Embedding层将One-Hot Encoder转化为低维度的连续值(稠密向量),并且其中意思相近的词将被映射到向量空间中相近的位置。 从而解决了One-Hot Encoder词汇鸿沟和维度灾难的问题。

1.Embedding层1.Embedding层1.Embedding

Embedding层(输入层到隐藏层)是以one hot为输入、中间层节点数为词向量维数的全连接层,这个全连接层的参数就是我们要获取的词向量表!

2.Word2vec模型概述2.Word2vec模型概述2.Word2vec

word2vec其实就是简化版的NN,它事实上训练了一个语言模型,通过语言模型来获取词向量。所谓语言模型,就是通过前n个字预测下一个字的概率,就是一个多分类器而已,我们输入one hot,然后连接一个全连接层,然后再连接若干个层,最后接一个softmax分类器,就可以得到语言模型了,然后将大批量文本输入训练就行了,最后得到第一个全连接层的参数,就是词向量表。

记词典大小为V
输入层:one-hot vector,V个节点
隐藏层:无激活函数,D个节点(D<V)
模型训练后输入层和隐藏层之间权重即为我们要获取的词向量
输出层:softmax回归输出输入词的邻近词的概率分布,V个节点



对同样一个句子:Hangzhou is a nice city。我们要构造一个语境与目标词汇的映射关系,其实就是input与label的关系。 假设滑窗尺寸为1 ,那么

CBOW的样本形式为:[Hangzhou,a]—>is,[is,nice]—>a,[a,city]—>nice
Skip-Gram的样本形式为:(is,Hangzhou),(is,a),(a,is), (a,nice),(nice,a),(nice,city)

3.模型求解:负采样方法3.模型求解:负采样方法3.

本文我们只对负采样方法negative sampling展开介绍

3.1 NCE Loss提出背景
Softmax是用来实现多类分类问题常见的损失函数。但如果类别特别多,softmax的效率就是个问题了。比如在word2vec里,每个词都是一个类别,在这种情况下可能有100万类。那么每次都得预测一个样本在100万类上属于每个类的概率,这个效率是非常低的。

3.2 NCE的主要思想
对于每一个样本,除了他自己的label,同时采样出N个其他的label
从而我们只需要计算样本在这N+1个label上的概率,而不用计算样本在所有label上的概率
而样本在每个label上的概率最终用了Logistic的损失函数
NCE本质上是把多分类问题转化为2分类问题

3.3 NCE负采样策略
带权采样:高频词选为负样本的概率大,低频词概率小

4.word2vec之连续词袋模型CBOW4.word2vec之连续词袋模型CBOW4.word2vecCBOW

根据当前词的上下文环境来预测当前词

5.word2vec之跳字模型skip−gram5.word2vec之跳字模型skip-gram5.word2vecskipgram

根据当前词预测上下文

可以理解为是将CBOW模型中的context(w)拆成一个个来考虑

6.基于word2vec简单实战6.基于word2vec简单实战6.word2vec

import jieba
import jieba.analyse
from gensim.test.utils import common_texts, get_tmpfile
from gensim.models import Word2Vec
#文件位置需要改为自己的存放路径
#将文本分词
with open('C:\\Users\Administrator\Desktop\\in_the_name_of_people\in_the_name_of_people.txt',encoding='utf-8') as f:document = f.read()document_cut = jieba.cut(document)result = ' '.join(document_cut)with open('./in_the_name_of_people_segment.txt', 'w',encoding="utf-8") as f2:f2.write(result)
#加载语料
sentences = word2vec.LineSentence('./in_the_name_of_people_segment.txt')
#训练语料
path = get_tmpfile("word2vec.model") #创建临时文件
model = word2vec.Word2Vec(sentences, hs=1,min_count=1,window=10,size=100)
# model.save("word2vec.model")
# model = Word2Vec.load("word2vec.model")
#输入与“贪污”相近的100个词
for key in model.wv.similar_by_word('贪污', topn =100):print(key)
#输出了100个,示例前几个
('地皮', 0.9542419910430908)
('高昂', 0.934522807598114)
('证', 0.9154356122016907)
('上强', 0.9113685488700867)
('一抹', 0.9097814559936523)
('得罪', 0.9082552790641785)
('屁股', 0.9072068929672241)
('能伸能屈', 0.9049990177154541)
('二十五万', 0.9045952558517456)

参考作者:传送门

One_hot和Word2Vec两种词向量方法的原理及比较相关推荐

  1. cs224u GloVe词向量方法

    GloVe是Jeffrey Pennington 等作者于2014年提出的一种词向量方法,该方法基于全局词汇,通过统计单词共现的信息训练词向量,将统计信息与局部上下文窗口方法结合起来. 论文:Penn ...

  2. 你可能不需要固定词表:一种与词表无关的组合式词向量方法

    论文标题: Grounded Compositional Outputs for Adaptive Language Modeling 论文作者: Nikolaos Pappas (UW), Phoe ...

  3. word2vec预训练词向量+通俗理解word2vec+CountVectorizer+TfidfVectorizer+tf-idf公式及sklearn中TfidfVectorizer

    文章目录 文分类实(一) word2vec预训练词向量 2 数据集 3 数据预处理 4 预训练word2vec模型 canci 通俗理解word2vec 独热编码 word2vec (Continuo ...

  4. tfidf和word2vec构建文本词向量并做文本聚类

    一.相关方法原理 1.tfidf tfidf算法是一种用于文本挖掘.特征词提取等领域的因子加权技术,其原理是某一词语的重要性随着该词在文件中出现的频率增加,同时随着该词在语料库中出现的频率成反比下降, ...

  5. word2vec如何得到词向量

    word2vec是如何得到词向量的?这个问题比较大.从头开始讲的话,首先有了文本语料库,你需要对语料库进行预处理,这个处理流程与你的语料库种类以及个人目的有关,比如,如果是英文语料库你可能需要大小写转 ...

  6. 基于word2vec的中文词向量训练

    基于word2vec的中文词向量训练 使用katex解析的数学公式,csdn好像不支持 word2vec来源 Google开源 可以在百万数量级的词典和上亿的数据集上进行高效地训练 该工具得到的训练结 ...

  7. word2vec 构建中文词向量

    2019独角兽企业重金招聘Python工程师标准>>> word2vec 构建中文词向量 词向量作为文本的基本结构--词的模型,以其优越的性能,受到自然语言处理领域研究人员的青睐.良 ...

  8. matlab 遍历每个像素点,Mat中两种像素遍历方法比较

    小白,入门中,不足其指正.刚刚接触opencv,从一个Matlab风格的编程环境突然跳转到C++,实在有些不适.单就pixels scanning花了好长时间研究.opencv-tutorials给出 ...

  9. GET和POST两种基本请求方法的区别

    GET和POST两种基本请求方法的区别 回退 回退时无害 会再次提交请求 记录 URL可被记录, 用于再访问 不可以 缓存 主动缓存 可手动设置 编码方式 只进行url编码 多种编码方式 参数长度 有 ...

最新文章

  1. CoordinatorLayout中AppBarLayout的折叠仅依靠滑动RecyclerView实现
  2. 修改DEDECMS文章标题长度,解决DEDECMS文章标题显示不全
  3. Docker配置国内镜像加速
  4. easyexcel和poi是否有版本冲突_easyexcel--解决poi大文件发生OOM问题
  5. java生成折线图,饼状图,柱形图
  6. php基本语法实验总结,PHP总结(一)基本语法内容
  7. druid mysql 乱码_2017.02.21   Mysql 字符集 乱码 排错过程
  8. 图解:SQL SERVER2005的安装
  9. Hadoop在业界的使用情况
  10. MATLAB快速傅里叶变换(fft)函数详解
  11. Android 8.0系统透明主题适配解决办法
  12. 【提前批】【第二批】CUHK CSE 面经2022.6.17
  13. 贺泓胜:2.24黄金今日走势分析操作建议,黄金原油解套指导
  14. 第二届太原理工大学程序设计新生赛决赛-(Cappuccino ~ the end of journey-M)简单模拟
  15. Quartz——简介和使用
  16. datastage作业hang住
  17. 百度,互联网的“流氓大亨”?
  18. 百度收录批量查询-免费大量百度收录批量查询工具软件
  19. [学渣啃西瓜书]绪论-基本概念辨析(4)-归纳偏好
  20. Android 仿Windows Metro 界面UI

热门文章

  1. 帖子:刚刚结束美国J1签证所需的英语熟练度面试
  2. Vue Element正则验证(所有)
  3. MySQL数据库 日志管理、备份与恢复
  4. java打印数组的连续非空子集_求一个字符串数组所有非空子集
  5. Safari安装使用JsonView插件
  6. mysql myisam转innodb_转:MySQL从MyISAM引擎转换到InnoDB引擎需要注意的地方
  7. 单用户MIMO系统(二):信道信息在发端未知
  8. 多Tabs的横向滚动插件(支持Zepto和jQuery)
  9. antd中table组件中如何进行换行操作(react中)
  10. 图片缩略图,CMYK图片变红问题解决