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()



 


相关文章
|
机器学习/深度学习 自然语言处理 程序员
NLP:Transformer的简介(优缺点)、架构详解、案例应用之详细攻略
NLP:Transformer的简介(优缺点)、架构详解、案例应用之详细攻略
NLP:Transformer的简介(优缺点)、架构详解、案例应用之详细攻略
|
3月前
|
自然语言处理 算法 API
在Python中进行自然语言处理,安装必要的库
在Python中进行自然语言处理,安装必要的库
21 1
|
3月前
|
自然语言处理 算法
自然语言处理第3天:Word2Vec模型
自然语言处理第3天:Word2Vec模型
50 1
|
11月前
|
机器学习/深度学习 自然语言处理 算法
文档关键信息提取形成知识图谱:基于NLP算法提取文本内容的关键信息生成信息图谱教程及码源(含pyltp安装使用教程)
文档关键信息提取形成知识图谱:基于NLP算法提取文本内容的关键信息生成信息图谱教程及码源(含pyltp安装使用教程)
文档关键信息提取形成知识图谱:基于NLP算法提取文本内容的关键信息生成信息图谱教程及码源(含pyltp安装使用教程)
|
机器学习/深度学习 自然语言处理 索引
自然语言处理:词嵌入简介
自然语言处理:词嵌入简介
201 0
|
自然语言处理 Python
自然语言处理hanlp------1安装
自然语言处理hanlp------1安装
自然语言处理hanlp------1安装
|
机器学习/深度学习 传感器 人工智能
自然语言处理简介|学习笔记
快速学习自然语言处理简介
200 0
自然语言处理简介|学习笔记
|
机器学习/深度学习 PyTorch TensorFlow
modelscope零基础安装NLP环境
win系统举例环境安装NLP
|
机器学习/深度学习 自然语言处理 数据挖掘
NLP自然语言处理-Pytorch情感分析简介
本质上是一个分类任务,其一般是指判断一段文本所表达的情绪状态。其中,一段文本可以是一个句子,一个段落或一个文档。情绪状态可以是两类,如(正面,负面),(高兴,悲伤);也可以是三类,如(积极,消极,中性);或是星级(1星~五星)等等。总的来说,可以理解成:是对带有情感色彩的主观性文本进行数据挖掘与情感倾向分析的过程。
236 0
|
自然语言处理 Python
自然语言处理=======python利用word2vec实现计算词语相似度【gensim实现】
自然语言处理=======python利用word2vec实现计算词语相似度【gensim实现】
303 0
自然语言处理=======python利用word2vec实现计算词语相似度【gensim实现】