NLP学习——Word2vec
一、Word2vec简介
WordW2vec是google在2013年的论文《Efficient Estimation of Word Representations inVector Space》中提出的。顾名思义,是一个词向量模型,也就是将字词转为向量表示。
Word2vec模型包含两种训练词向量的方法:CBOW和skip-gram。其中CBOW的基本思想是通过该关键词的上下文的词语来预测这个关键词:而skip-gram的基本思想与CBOW相反,是通过该关键词来预测上下文的词语。如下图所示:
二、训练过程
- CBOW
具体如上图所示:
- 首先将关键词的上下文词语进行独热编码,得到的向量长度为词表长度(所有训练语料中不同的词的总个数),形状为的向量,该词的位置为1,其余位置为0。
- 将每个上下文词语的独热编码乘以一个的权重矩阵,每个词语都乘以同一个权重矩阵。得到多个的向量。
- 对于这么多个的向量,采用相加求平均的方法整合成一个的向量。
- 然后将这个的向量与该关键字对应的的矩阵,得到一个的向量。
- 对于这个的向量需要通过softmax层归一化后得到的向量为关键词的预测向量,该向量不是独热编码,而是有许多浮点数值的概率组成的。概率最大的位置为关键词独热编码为1的位置。
- 将关键词的预测向量与标签向量(独热编码的向量)进行一个误差计算,通常采用交叉熵。
- 将这个误差反传回神经元,每一次前向计算后都会将误差反传,从而达到调整权重矩阵和的目的,与BP神经网络同理。
当损失达到最优则训练结束,便得到了我们需要的权重矩阵,通过这个权重矩阵便可根据输入的独热向量形成词向量。
- skip-gram
其实skip-gram就是将CBOW反过来操作,如以上那张CBOW的过程图一样,只不过用上面同样的步骤从右边开始解读。明白的话这部分的训练步骤可以不看。
- 首先将关键词进行独热编码。
- 将每个关键词的独热编码乘以一个的权重矩阵。
- 然后将这个关键词的的向量与该关键字的上下文词语词向量(共用一个)的矩阵相乘,得到多个的向量。
- 对于这些的向量需要通过softmax层归一化后得到的向量为关键词上下文词语的预测向量。
- 将关键词上下文词语的预测向量与标签向量(独热编码的向量)进行一个误差计算,通常采用交叉熵,对得到的多个交叉熵损失进行求和。
- 将这个误差反传回神经元,每一次前向计算后都会将误差反传,从而达到调整权重矩阵和的目的。
- 最后得到形成词向量的权重矩阵是。
三、优缺点
- 优点
- 由于 Word2vec 会考虑上下文,跟之前的 Embedding 方法相比,效果要更好。
- 比之前的 Embedding方法维度更少,所以速度更快
- 通用性很强,可以用在各种 NLP 任务中
- 缺点
- 由于词和向量是一对一的关系,所以多义词的问题无法解决。
- Word2vec 是一种静态的方式,虽然通用性强,但是无法针对特定任务做动态优化。
注意:word2vec有负采样和层次softmax的改进,也是知识点和难点,详细可以产靠这篇博客:http://t.csdn.cn/Nie7O
四、代码示例
这里没有弄很详细的代码,就调用了word2vec的一个包,也就是一个简单的使用例子,知道怎么使用就行,具体的模型参数网上都可以查得到,也不多:
import loggingfrom gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence
from all_model_param import *logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s',level=logging.INFO)
model = Word2Vec(LineSentence(open('file_path', 'r', encoding='utf8')),sg=0,epochs=300,vector_size=word_vector_size,window=5,min_count=1,workers=8
)# 词向量保存
model.wv.save_word2vec_format('word2vec/data.vector', binary=False)# 模型保存
model.save('word2vec/test.model')
NLP学习——Word2vec相关推荐
- 用gensim学习word2vec
20211224 输入为分词列表 import gensim # Train Word2Vec model model = gensim.models.Word2Vec(all_data_test[' ...
- NLP学习难在哪里?这份最全NLP学习路线图帮你解决难题!
作为一名人工智能之自然语言处理的技术小享,最常被问到的莫过于「如何入门NLP」了? 今天小享就整理了保姆级NLP学习路线图(思维导图),非常的全面和清晰,分享给大家. 希望这个指南会伴随你们一起成长哟 ...
- 深度学习word2vec笔记之基础篇
深度学习word2vec笔记之基础篇 声明: 1)该博文是多位博主以及多位文档资料的主人所无私奉献的论文资料整理的.具体引用的资料请看参考文献.具体的版本声明也参考原文献 2)本文仅供学术交流,非商用 ...
- NLP学习-Task 3: 子词模型Subword Models
NLP学习 更新流程↓ Task 1: 简介和词向量Word Vectors Task 2: 词向量和词义Word Senses Task 3: 子词模型Subword Models Task 4: ...
- 深度学习word2vec笔记
基础篇 算法篇 应用篇 深度学习word2vec笔记之基础篇 一.前言 伴随着深度学习的大红大紫,只要是在自己的成果里打上deep learning字样,总会有人去看.深度学习可以称为当今机器学习领域 ...
- 深度学习 | Word2vec原理及应用
聊聊Word2vec 1 前言 2 什么是Word2vec? 2.1 定义 2.1.1 分词的原理介绍 2.1.2 文本向量化的方式 2.2 数学原理 2.2.1 CBOW(Continuous Ba ...
- 利用计算机技术实现对文本篇章,自然语言处理NLP学习笔记一:概念与模型初探...
前言 先来看一些demo,来一些直观的了解. 自然语言处理: 可以做中文分词,词性分析,文本摘要等,为后面的知识图谱做准备. 知识图谱: 还有2个实际应用的例子,加深对NLP的理解 九歌机器人: 微软 ...
- NLP之word2vec:利用 Wikipedia Text(中文维基百科)语料+Word2vec工具来训练简体中文词向量
NLP之word2vec:利用 Wikipedia Text(中文维基百科)语料+Word2vec工具来训练简体中文词向量 目录 输出结果 设计思路 1.Wikipedia Text语料来源 2.维基 ...
- 曝!BAT大厂NLP学习进阶之法~
"语言理解是人工智能领域皇冠上的明珠." --比尔盖茨 自然语言处理是一门综合性的学问,它远远不止机器学习算法.相比图像或语音,文本的变化更加复杂,例如从预处理来看,NLP 就要求 ...
最新文章
- 国产游戏《黑神话:悟空》刷爆全网,虚幻引擎4打造,网友:有生之年终于看到国产3A!...
- JSP的3大指令Page,include,taglib
- Java多线程(三):使用ThreadPoolExecutor创建线程池
- 每个zone的low memory是怎么计算出来的
- 钮扣电池电压电量_纽扣厂
- viewpager默认界面_使用默认方法的界面演变–第一部分:方法
- SQL 关于apply的两种形式cross apply 和 outer apply(转)
- 访问vector元素方法的效率比较(转)
- 【习题 8-10 UVA - 1614】Hell on the Markets
- Linq的内部执行原理浅析
- [Python]正相匹配中文分词【哈工大 车万翔老师视频公开课】
- 学习能力篇:“拼图式”学习法
- trun off PInvokeStackImbalance
- 在船舶共轨实验平台上使用Mbed LPC1768
- 运行时错误-2147024770 或者 word运行时错误424
- 大华DSS视频综合应用平台webservice接口使用手册-php测试用例
- 回归分析中的相关度(Corr)和R^2
- 基于RK3399的LED驱动开发
- python实现视频剪辑_MoviePy常用剪辑类及Python视频剪辑自动化
- android studio 皮肤,Android Studio 自定义皮肤主题和背景
热门文章
- 大数据时代下:标签体系的应用
- MySql通过Data恢复数据库数据
- go cobra初试
- 错误 The inferior stopped because it received a signal from the Operating System
- 有关HTTP2.0详解
- jdbc mysql例子
- 蓝牙模块HC-05 AT指令使用以及两个蓝牙模块的配对
- R2决定系数(Coefficient of Determination)
- matlab不是内部或外部命令_如何解决Telnet不是内部或外部命令(电脑提示telnet不是内部或外部命令...
- java jsf_JSF----概述