词嵌入算法

通俗易懂的理解
词嵌入算法就是使用一个低维度的向量来表示一个词,并且距离相近的向量在实际的词含义上也是相近的。比如:

  • “男人”的向量与“女人”向量的距离,相比“男人”向量与“游戏”向量的距离,谁更近?

对我来说,“电子竞技不存在爱情”,所以后者的距离比前者更近。
* “ 男 人 词 向 量 ” + “ 女 人 词 向 量 ” ≈ “ 爱 情 的 坟 墓 ” “男人词向量”+“女人词向量”\approx“爱情的坟墓” +
这使得词向量具有数据运算功能。

独热编码

那么问题来了,词语怎么怎么转换成一个数学可运算的状态呢?
文本长度不确定;文本词语每次都不一样,很难有效的编码来表达文本意思
One hot 独热编码:一位有效编码,其中每一位都用来存储一种状态。

假设数据有“男”“女”两个词,那我们的独热编码就一共两位

男人 01
女人 10

优点

将离散的文本数据都变成定长的数据,方便计算

缺点

过于稀疏,对一些新的语料的词可能,每个词向量为1位,其余全是零,长度很常见就上百万级。这就没有办法记录词与词之间的关系。
这样的话,对于数据的存储、运算都是相当困难。

分布式表示方法

分布式表示的方法来解决独热编码的问题

原理

通多对文本词的训练,将每个词都映射到比较短、稠密度高的向量上来。所有的词构成一个向量空间,通过统计学的方法来研究词之间的关系。
假设我们用以下几个维度来表示这几个人物的词。

通过上面的转换,就可以将稀疏的词向量转为稠密的向量。
把原本的词向量映射到这个相对低维空间的过程就称为词嵌入(Word Embedding)

上下文关系学习

我有一个沙雕室友王三爱学习
我有一个逗比室友李四爱学习
这两句可以看出王三和李四的词向量就很接近。这就叫上下文类似

算法原理

Word2Vec 的算法核心是神经网络算法
是包含一个隐藏层的浅层神经网络


输入层是我们去掉了某些部分的语料编码,在这里也就是 One Hot 编码,输出层的维度与输入层一样,所需要预测输出的是在输入层被去掉的部分。
所以这里有两种方案,第一个是去掉某个词,输入层是这个词的上下文,这种方法叫作 CBOW(Continuous Bag Of Word),输出层也就是要去预测这个词;第二种方案是去掉上下文,用这个词作为输入层,这种方法叫作 Skip-Gram,输出层需要预测上下文。

CBOW 模式

相当于填词游戏?
我今天____个狗

SKip-Gram模式

__ ___ 吃___

对于这个网络中,从输入层到隐藏层是没有激活函数的,也就是一个线性关系。这里需要注意的是 Word2Vec 所获得的模型并不是我们这个网络的最终结果,而是在训练完成之后,把隐藏层的权重矩阵获取出来,即形成了我们的 Word2Vec 算法的结果。

通过这个方法,我们语料中的每一个词都获得了一个预设维度的向量,由于隐藏层的维度要比 onehot 向量的维度小很多,这也起到了很好的降维作用。

优缺点

优点

  • 估计准确,因为考虑了上下文,以及词语顺序
  • 成功降低了向量维度
  • 适配后续NPL任务,通用性强

缺点

  • 不具有“渣男特质”,只能解决一对一词向量,对一词多义不好处理。

案例实战

import gensim #引入gensim
import os
import re
import sys
import multiprocessing #引入多线程操作
from time import timeclass getSentence(object):#初始化,获取文件路径def __init__(self, dirname):self.dirname = dirname
# 构建一个迭代器
def __iter__(self):for root, dirs, files in os.walk(self.dirname):for filename in files:file_path = root + '/' + filenamefor line in open(file_path):try:#清除异常数据,主要是去除空白符以及长度为0的内容s_line = line.strip()if s_line== "":continue#把句子拆成词word_line = [word for word in s_line.split( )]yield word_lineexcept Exception:print("catch exception")yield ""
if __name__ == '__main__':begin = time()#记录一个起始时间#获取句子迭代器sentences = getSentence("traindata")#训练word2vec模型 使用句子迭代器作为语料的输入,设定的最终向量长度为200维;窗口长度为15;词的最小计数为10,词频少于10的词不会进行计算;使用并行处理model = gensim.models.Word2Vec(sentences,size=200,window=15,min_count=10, workersmeans=multiprocessing.cpu_count())#模型存储,这块记得先预先新建一个model路径,或者也可以增加一段代码来识别是否已经创建,如果没有则新建一个路径model.save("model/word2vec_gensim")model.wv.save_word2vec_format("model/word2vec_org","model/vocabulary",binary=False)end = time()#输出运算所用时间print("Total procesing time: %d seconds" % (end - begin))

【自然语言处理-2】word2vec词嵌入算法“男人”+“女人”=“爱情的坟墓”相关推荐

  1. 自然语言处理技术之词嵌入方法-2

    词嵌入是自然语言处理(NLP)中语言模型与表征学习技术的统称,也是实现自然语言处理任务的基础. 目录 传统词向量特征的表示方法 1.one-hot one-hot的缺点 2.TF-IDF TF-IDF ...

  2. word2vec python实现_教程 | 在Python和TensorFlow上构建Word2Vec词嵌入模型

    原标题:教程 | 在Python和TensorFlow上构建Word2Vec词嵌入模型 选自adventuresinmachinelearning 参与:李诗萌.刘晓坤 本文详细介绍了 word2ve ...

  3. 在Python和TensorFlow上构建Word2Vec词嵌入模型

    本文详细介绍了 word2vector 模型的模型架构,以及 TensorFlow 的实现过程,包括数据准备.建立模型.构建验证集,并给出了运行结果示例. GitHub 链接:https://gith ...

  4. Word2Vec词嵌入向量延伸-原理剖析

    传送:基于Hierarchical Softmax的word2vec模型原理 基于Negative Sampling的word2vec模型原理 一.基本概念准备 稀疏向量(one-hot repres ...

  5. 文本特征提取_02:Word2Vec词嵌入矩阵

    王小草SparkML笔记 笔记整理时间:2017年1月10日 笔记整理者:王小草 今日计事: 除开上周五在家工作,2017年的工作日从3号开始今天第5次上班迟到,无论起多早每天都是会迟几分钟.第一次挤 ...

  6. 自然语言处理 —— 2.3 词嵌入的特性

    词嵌入还有一个特性是能帮助实现类比推理,尽管类比推理可能不是自然语言处理中最重要的存在,不过它能帮助人们理解词嵌入做了什么以及词嵌入能做什么,让我们来一探究竟. 上图是一系列你希望词嵌入可以捕捉的单词 ...

  7. 【解释】Word2vec 词嵌入

    在NLP 里面,最细粒度的是 词语,词语组成句子,句子再组成段落.篇章.文档.所以处理 NLP 的问题,首先就要拿词语开刀. 举个简单例子,判断一个词的词性,是动词还是名词.用机器学习的思路,我们有一 ...

  8. 【自然语言处理】Word2Vec 词向量模型详解 + Python代码实战

    文章目录 一.词向量引入 二.词向量模型 三.训练数据构建 四.不同模型对比 4.1 CBOW 4.2 Skip-gram 模型 4.3 CBOW 和 Skip-gram 对比 五.词向量训练过程 5 ...

  9. 【自然语言处理】【词嵌入】dLCE:将词汇对比集成到近义反义的词嵌入中

    Integrating distributional lexical contrast into word embeddings for antonym synonym 文章目录 Integratin ...

最新文章

  1. JAVA 中equals()与==的区别
  2. 他让张一鸣登门请教,培养出戴文渊李沐陈天奇,创建了传说中的上海交大ACM班...
  3. 怎么取html网页中的样式,从建站到拿站 -- HTML和CSS基础
  4. 数组中只出现一次的数字+第一个只出现一次的字符
  5. spring防止爬虫_Spring安全:防止暴力攻击
  6. edge浏览器扩展插件中心10月发布 可直接安装Chrome扩展
  7. python语义分析_Python差异的潜在语义分析
  8. RTMP协议学习笔记
  9. 【留言板 Message Board】
  10. 做YH更新,引发众多思考.
  11. 自动档汽车正确的操作方法和习惯---请教贴
  12. 清华计算机科学与技术专业收分,2016年清华大学计算机科学与技术专业最低分是多少?...
  13. django使用ajax传输数据
  14. 2019年PMP考试模拟题(附答案解析)
  15. 一款自动生成唯一头像的开源代码库
  16. 2019年房价调整是大概率事件,如果房价下跌,会出现什么问题?
  17. 微擎跳过云平台_2018年10月微擎安装之阿里云懒人教程篇
  18. 组网技术:ADSL+无线路由器组网实例图解(组图)
  19. 预防ddos攻击常用方法有哪些
  20. 非常实用的12条 SQL 优化方案

热门文章

  1. 短视频风口持续 今日头条再投10亿补贴火山小视频
  2. 【Redis】Failed listening on port 6379 (TCP), aborting.
  3. mysql8.0压缩包安装
  4. 陈臣java_小菜学设计模式——享元模式
  5. 物理建模钢琴-Modartt Pianoteq Pro v6.7.0 WiN
  6. TensorFlow 入门到进阶,如何快速学习?
  7. android平板 可以刷ios,终于跟上安卓!iPad Pro新功能曝光:系统升级方便了
  8. 231313132131
  9. angular的 #
  10. html多行注释正则表达式,RegEx用于匹配/替换JavaScript注释(多行和内联)