NLP之word2vec:word2vec简介、安装、使用方法之详细攻略-阿里云开发者社区

开发者社区> 一个处女座的程序猿> 正文

NLP之word2vec:word2vec简介、安装、使用方法之详细攻略

简介: NLP之word2vec:word2vec简介、安装、使用方法之详细攻略
+关注继续查看

word2vec简介


    word distributed embedding最早是Bengio 03年的论文"A Neural Probabilistic Language Model"提出来,rnn lm 在10年被mikolov提出。      

     word2vec 是 Google 于 2013 年开源推出的一个用于获取词向量(word vector)的工具包,它简单、高效。word2vec也叫word embeddings,中文名“词向量”,作用就是将自然语言中的字词转为计算机可以理解的稠密向量Dense Vector。所谓的word vector,就是指将单词向量化,将某个单词用特定的向量来表示。将单词转化成对应的向量以后,就可以将其应用于各种机器学习的算法中去。一般来讲,词向量主要有两种形式,分别是稀疏向量和密集向量。

    word2vec的思想类似于antodecoder,但是并不是将自身作为训练目标,也不是用RBM来训练。 word2vec将 context和word5:别作为训练目标,Wskip-gram和CBOW。


      word2vec其实就是two layer shallow neural network,减少了深度神经网络的复杂性,快速的生成word embedding.    

Skip-gram: works well with small amount of the training data, represents well even rare words or phrases.

CBOW: several times faster to train than the skip-gram, slightly better accuracy for the frequent words  

    This can get even a bit more complicated if you consider that there are two different ways how to train the models: the normalized hierarchical softmax, and the un-normalized negative sampling. Both work quite differently.


1、稀疏向量One-Hot Encoder


      在word2vec出现之前,自然语言处理经常把字词转为离散的单独的符号,也就是One-Hot Encoder。就是用一个很长的向量来表示一个词,向量的长度为词典的大小N,向量的分量只有一个1,其他全为0,1的位置对应该词在词典中的索引[1]。

     举例来说,如果有一个词典[“比特币”,”区块链”,”机器学习”],那么“比特币”对应的词向量就是[1,0,0],“区块链”对应的词向量就是[0,1,0]。这种表示方法不需要繁琐的计算,简单易得,但是缺点也不少,比如长度过长(这会引发维数灾难),以及无法体现出近义词之间的关系,比如“比特币”和“区块链”显然有非常紧密的关系,但转化成向量[1,0,0]和[0,1,0]以后,就看不出两者有什么关系了,因为这两个向量相互正交。


      但是使用One-Hot Encoder有以下问题。一方面,城市编码是随机的,向量之间相互独立,看不出城市之间可能存在的关联关系。其次,向量维度的大小取决于语料库中字词的多少。如果将世界所有城市名称对应的向量合为一个矩阵的话,那这个矩阵过于稀疏,并且会造成维度灾难。以及无法体现出近义词之间的关系。


      使用Vector Representations可以有效解决这个问题。Word2Vec可以将One-Hot Encoder转化为低维度的连续值,也就是稠密向量,并且其中意思相近的词将被映射到向量空间中相近的位置。


2、密集向量distributed representation


     又称distributed representation,即分布式表示。最早由Hinton提出,可以克服one-hot representation的上述缺点,基本思路是通过训练将每个词映射成一个固定长度的短向量,所有这些向量就构成一个词向量空间,每一个向量可视为该空间上的一个点[1]。此时向量长度可以自由选择,与词典规模无关。这是非常大的优势。

     还是用之前的例子[“比特币”,”区块链”,”机器学习”],经过训练后,“比特币”对应的向量可能是[1,0,1,1,0],而“区块链”对应的可能是[1,0,1,0,0],而“机器学习”对应的可能是[0,1,0,0,1]。这样“比特币”向量乘“区块链”=2,而“比特币”向量乘“机器学习”=0 。这样就体现出比特币与区块链之间的关系更加紧密,而与机器学习就没什么关系了。这种表示方式更精准的表现出近义词之间的关系,比之稀疏向量优势很明显。


     word2vec模型其实就是简单化的神经网络。word2vec做的事情很简单,大致来说,就是构建了一个多层神经网络,然后在给定文本中获取对应的输入和输出,在训练过程中不断修正神经网络中的参数,最后得到词向量。


3、word2vec的两大语言模型


    所谓的语言模型,就是指对自然语言进行假设和建模,使得能够用计算机能够理解的方式来表达自然语言。word2vec采用的是n元语法模型(n-gram model),即假设一个词只与周围n个词有关,而与文本中的其他词无关。这种模型构建简单直接,当然也有后续的各种平滑方法。


CBOW模型和skip-gram模型

    word2vec主要分为CBOW(Continuous Bag of Words)和Skip-Gram两种模式。CBOW是从原始语句推测目标字词;而Skip-Gram正好相反,是从目标字词推测出原始语句。CBOW对小型数据库比较合适,而Skip-Gram在大型语料中表现更好。

其实这两个模型非常相似,核心部分代码甚至是可以共用的。CBOW模型能够根据输入周围n-1个词来预测出这个词本身,而skip-gram模型能够根据词本身来预测周围有哪些词。也就是说,CBOW模型的输入是某个词A周围的n个单词的词向量之和,输出是词A本身的词向量;而skip-gram模型的输入是词A本身,输出是词A周围的n个单词的词向量(对的,要循环n遍)。



word2vec安装


pip install word2vec

image.png




word2vec使用方法


(1) 分词 / 词干提取和词形还原。

(2) 构造词典,统计词频。

(3) 构造树形结构。

(4)生成节点所在的二进制码。

(5) 初始化各非叶节点的中间向量和叶节点中的词向量。

(6) 训练中间向量和词向量。



1、examples


import word2vec

model = word2vec.load('/Users/drodriguez/Downloads/vectors.bin')

model.vectors.shape

model['_*1']

indexes, metrics = model.cosine('_*1')

model.generate_response(indexes, metrics).tolist()



 


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
使用自己的语料训练word2vec模型
一、 准备环境和语料: 新闻20w+篇(格式:标题。正文) 【新闻可以自己从各大新闻网站爬取,也可以下载开源的新闻数据集,如 互联网语料库(SogouT) 中文文本分类数据集THUCNews 李荣陆英文文本分类语料 谭松波中文文本分类语料 等 结巴分词 word2vec 二、分词 先对新闻文本进行分词,使用的是结巴分词工具,将分词后的文本保存在seg201708.txt,以备后期使用。
1543 0
【jacob word】使用jacob,合并多个word为一个word文件
将几个word文件合并到一个word文件,使用注意点: 1.后面附项目运用的jar包jacob-1.9, 2.并且jacob运用中,需要将附件内的jacob.dll放到windows/system32下   语法介绍: 将一个关于JACOB的代码分成下面几个步骤:     1) Acti...
1245 0
使用WordPress搭建一个专属自己的博客
本教程指导您如何在自己的主机上搭建一个属于自己的、独一无二的博客。
145 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4478 0
【POI word】使用POI实现对Word的读取以及生成
项目结构如下:   那第一部分:先是读取Word文档 1 package com.it.WordTest; 2 3 import java.io.FileInputStream; 4 import java.
1964 0
docker 安装及使用 hello word
安装 yum -y install docker-io 启动docker service docker start 关闭docker service docker stop 查看版本 docker version 查看信息 docker info 注意,docker默认只能在root用户下运行命令,但可以把用户加入到docker组,是用户拥有docker命令权限,命令如
11410 0
使用 WordPress 插件模板开发高质量插件
  WordPress 插件样板是标准化的,有组织的,面向对象的基础,用于构建高品质的 WordPress 插件。样板遵循编码标准和文件标准,所以你不必自己学习这些,根据注释编写代码即可。     官方网站      源码下载   您可能感兴趣的相关文章 网站开发中很有用的 j...
568 0
wordpress 使用固定链接
官方文档 无插件移除url中category 目录前缀 设置 >> 固定链接,设置固定链接为自定义为: /%category%/%postname%/或者/%category%/%post_id%/ 在可选 >> 分类目录前缀 设置为 :.
559 0
+关注
一个处女座的程序猿
国内互联网圈知名博主、人工智能领域优秀创作者,全球最大中文IT社区博客专家、CSDN开发者联盟生态成员、中国开源社区专家、华为云社区专家、51CTO社区专家、Python社区专家等,曾受邀采访和评审十多次。仅在国内的CSDN平台,博客文章浏览量超过2500万,拥有超过57万的粉丝。
1701
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载