word2vec

word2vec原理分析

泄露秘密 提交于 2020-02-25 08:10:13
  本文摘录整编了一些理论介绍,推导了word2vec中的数学原理,理论部分大量参考《word2vec中的数学原理详解》。 背景 语言模型   在统计自然语言处理中,语言模型指的是计算一个句子的概率模型。   传统的语言模型中词的表示是原始的、面向字符串的。两个语义相似的词的字符串可能完全不同,比如“番茄”和“西红柿”。这给所有NLP任务都带来了挑战——字符串本身无法储存语义信息。该挑战突出表现在模型的平滑问题上:标注语料是有限的,而语言整体是无限的,传统模型无法借力未标注的海量语料,只能靠人工设计平滑算法,而这些算法往往效果甚微。   神经概率语言模型(Neural Probabilistic Language Model)中词的表示是向量形式、面向语义的。两个语义相似的词对应的向量也是相似的,具体反映在夹角或距离上。甚至一些语义相似的二元词组中的词语对应的向量做线性减法之后得到的向量依然是相似的。词的向量表示可以显著提高传统NLP任务的性能,例如《 基于神经网络的高性能依存句法分析器 》中介绍的词、词性、依存关系的向量化对正确率的提升等。   从向量的角度来看,字符串形式的词语其实是更高维、更稀疏的向量。若词汇表大小为N,每个字符串形式的词语字典序为i,则其被表示为一个N维向量,该向量的第i维为1,其他维都为0。汉语的词汇量大约在十万这个量级

Word2vec

╄→гoц情女王★ 提交于 2020-02-23 18:38:08
在之前的学习中提到过one-hot向量表示方式,虽然它们构造起来很容易,但通常并不是一个好选择。一个主要的原因是,one-hot 词向量无法准确表达不同词之间的相似度,如我们常常使用的余弦相似度。 例如 beautiful和lovely是两个表示含义相近的词,他们应该在向量空间上有一定的相似度,而相对的,ugly这样的词距离他们就应该很远,Word2Vec 词嵌入工具的提出正是为了解决上面这个问题,它将每个词表示成一个定长的向量,并通过在语料库上的预训练使得这些向量能较好地表达不同词之间的相似和类比关系,以引入一定的语义信息。基于两种概率模型的假设,我们可以定义两种 Word2Vec 模型 Skip-Gram 跳字模型 假设背景词由中心词生成,即建模 P(wo∣wc),其中 wc 为中心词,wo 为任一背景词; CBOW (continuous bag-of-words) 连续词袋模型 假设中心词由背景词生成,即建模 P(wc∣Wo),其中 Wo 为背景词的集合。 在这里我们主要介绍 Skip-Gram 模型的实现,CBOW 实现与其类似,读者可之后自己尝试实现。后续的内容将大致从以下四个部分展开: PTB 数据集 Skip-Gram 跳字模型 负采样近似 训练模型 PTB数据集 为了训练 Word2Vec 模型,我们就需要一个自然语言语料库,模型将从中学习各个单词间的关系

维基百科语料中的词语相似度探索

有些话、适合烂在心里 提交于 2020-02-22 08:47:30
之前写过《 中英文维基百科语料上的Word2Vec实验 》,近期有不少同学在这篇文章下留言提问,加上最近一些工作也与 Word2Vec 相关,于是又做了一些功课,包括重新过了一遍Word2Vec的相关资料,试了一下gensim的相关更新接口,google了一下" wikipedia word2vec " or " 维基百科 word2vec " 相关的英中文资料,发现多数还是走得这篇文章的老路,既通过gensim提供的维基百科预处理脚本"gensim.corpora.WikiCorpus"提取维基语料,每篇文章一行文本存放,然后基于 gensim 的Word2Vec模块训练词向量模型。这里再提供另一个方法来处理维基百科的语料,训练词向量模型,计算词语相似度( Word Similarity )。关于Word2Vec, 如果英文不错,推荐从这篇文章入手读相关的资料: Getting started with Word2Vec 。 这次我们仅以英文维基百科语料为例,首先依然是下载维基百科的最新XML打包压缩数据,在这个英文最新更新的数据列表下: https://dumps.wikimedia.org/enwiki/latest/ ,找到 " enwiki-latest-pages-articles.xml.bz2 " 下载,这份英文维基百科全量压缩数据的打包时间大概是2017年4月4号

训练词向量实战

一曲冷凌霜 提交于 2020-02-21 19:18:08
基于gensim训练中文词向量 数据集 下载中文维基百科数据 [维基百科数据链接](https://dumps.wikimedia.org/zhwiki/) ,在该目录下选择最新的数据,我下载的是zhwiki-latest-pages-articles.xml.bz2,数据比较难下,附上百度云盘链接 创建环境 conda install -n python35 python=3.5 #创建python35环境 conda install -n python35 jieba #安装jieba分词工具 conda install -n python35 gensim #安装gensim conda install -n python35 hanziconv #安装hanziconv繁体->简体 实验步骤 获取语料 #文档根目录 ROOT_DIR = os.getcwd() DATA_PATH = os.path.join(ROOT_DIR, "data") MODEL_PATH = os.path.join(ROOT_DIR, "model") #创建路径 wiki_articles_xml_file=os.path.join(DATA_PATH,"zhwiki-latest-pages-articles.xml.bz2") wiki_txt_file=os.path.join

Word Word2Vec

别来无恙 提交于 2020-02-18 01:30:06
词嵌入(Word Embedding)或者分布式向量(Distributional Vectors)是将自然语言表示的单词转换为计算机能够理解的向量或矩阵形式的技术。由于要考虑多种因素比如词的语义(同义词近义词)、语料中词之间的关系(上下文)和向量的维度(处理复杂度)等等,希望近义词或者表示同类事物的单词之间的距离可以理想地近,只有拿到很理想的单词表示形式,才更容易地去做翻译、问答、信息抽取等进一步的工作。 现在最流行的是Word2Vec。 2013年,Google团队发表了word2vec工具。word2vec工具主要包含两个模型:跳字模型(skip-gram)和连续词袋模型(continuous bag of words,简称CBOW),以及两种高效训练的方法:负采样(negative sampling)和层序softmax(hierarchical softmax)。值得一提的是,word2vec词向量可以较好地表达不同词之间的相似和类比关系。 Word2Vec的分类: Skip-grams(SG): 定义一个概率分布:给定一个中心词汇,生成某个单词在它上下文出现的概率。 用向量表示单词,让概率分布最大化(最大似然概率)。 对于一个词汇,有且只有一个概率分布,是上下文中出现的概率,不是单指左边或者右边出现。 每个单词用两个向量表示!! 关键一点

word2vec

依然范特西╮ 提交于 2020-02-14 04:46:06
一.概述 word2vec用于处理文本字符串,类似的功能如sklearn的CountVectorizer,TfidfVectorizer,HashingVectorizer CountVectorizer用每个词出现的次数做为向量的值,如特征空间内宫n个词,特征向量i中如果第j个word出现了n次则 S = [s00,……snn] sij=n TfidfVectorizer用每个word的对tf-idf值表示第ij向量值 HashingVectorizer是使用word的hash值 以上方法虽然计算速度快,但是不能表示出词的意义如'man','woman'对于以上三个模型来说是完全不同的两个word,正确的向量空间子结构 Vking - Vqueen = Vman - Vwoman Vpairs - Vfrance = Vgernab - Vberlin 二.NNLM 对于向量空间V,存在n个words 随机初始化稠密向量(layers*10W)V0,每个词用one-hot表示乘以V0得到一个NNLM的输入, 在投影层将相邻的三个向量拼接起来,每个向量没3*layers*1,激活函数为tanh 输出层使用softmax 输出层的最终目的为计算每三个相邻的word的下一个word的概率最高。 1.CBOW(连续词袋) 无隐层 使用双向上下文窗口 上下文词序无关 投影层简化为求和

Word2vec模型及负采样精讲

旧巷老猫 提交于 2020-02-12 21:55:03
Word2vec模型本质 :是一个用来生成词向量的、简单的神经网络模型。   通过计算相似度来降低原来输入词的维度,举个例子:              图.甲 网络结构如下:                图.乙   如乙图所示,我们一开始输入的是one-hot编码后的向量,1位于第7位,其对应的输入层到隐藏层的权重矩阵w一定是第7行,如下图示意            图.丙   丙图示意的是第三行,我们将one-hot编码后的输入再tokenize转化回去,查找w索引值为3的行,拿出来即可,拿出来的就是 词向量 原来需要计算那么多次乘法,现在只需查表即可。   图甲那张图的全过程称之为 池化向量。                图.丁   图丁有一处错误,全连接层激活函数为softmax,output到预测值时的激活函数为sigmoid,此图为原始的池化向量过程。 负采样:     在训练神经网络时,每当接受一个训练样本,然后调整所有神经单元权重参数,来使神经网络预测更加准确。换句话说,每个训练样本都将会调整所有神经网络中的参数。   我们词汇表的大小决定了我们skip-gram 神经网络将会有一个非常大的权重参数,并且所有的权重参数会随着数十亿训练样本不断调整。   negative sampling (负例样本,即one-hot编码后的为0的那些位置的样本

第二讲 cs224n系列之word2vec & 词向量

*爱你&永不变心* 提交于 2020-02-07 09:48:47
本系列是一个基于深度学习的NLP教程,2016年之前叫做CS224d: Deep Learning for Natural Language Processing,之后改名为CS224n: Natural Language Processing with Deep Learning。新版主讲人是泰斗Chris Manning和Richard Socher(这是旧版的讲师),两人分别负责不同的章节。博主在学习的同时,对重点内容做成系列教程,与大家分享! 系列目录(系列更新中) 第二讲 cs224n系列之word2vec & 词向量 1.语言模型 神经概率语言模型(Neural Probabilistic Language Model)中词的表示是向量形式、面向语义的。两个语义相似的词对应的向量也是相似的,具体反映在夹角或距离上。甚至一些语义相似的二元词组中的词语对应的向量做线性减法之后得到的向量依然是相似的。词的向量表示可以显著提高传统NLP任务的性能,例如《基于神经网络的高性能依存句法分析器》中介绍的词、词性、依存关系的向量化对正确率的提升等。 2.word2vec word2vec是一个计算word vector的开源工具。当我们在说word2vec算法或模型的时候,其实指的是其背后用于计算word vector的CBoW模型和Skip-gram模型

神经网络与推荐系统初步简介

本秂侑毒 提交于 2020-02-07 07:44:06
作者:一人 1.深度神经网络对于任何领域都是适用的 深度神经网络(Deep Neural Networks, DNN)在过去的数年已经在图像分类、语音识别、自然语言处理中取得了突破性的进展。在实践中的应用已经证明了它可以作为对于一种十分有效的技术手段应用在大数据相关领域中。深度神经网络通过众多的简单线性变换层次性的进行非线性变换对于数据中的复杂关系能够很好的进行拟合,即对数据特征进行的深层次的挖掘。 因此作为一种技术手段,深度神经网络对于任何领域都是适用的。 2.推荐系统简介 推荐系统的功能是帮助用户主动的找到满足偏好的个性化物品并推荐给用户。在本质上可以当做一个个性化的搜索引擎,输入的数据为用户行为信息、偏好信息等,返回的结果为最符合查询条件的物品列表。数学化的表示: 物 品 列 表 = f ( 用 户 偏 好 ) − − − − − − − − − − − 公 式 ( 1 ) 我们的推荐引擎就扮演者这里的函数的角色,它主要需要完成两部分的工作: A > 针对查询条件对物品的相关性进行估计。 B > 晒选出topN个最相关的物品。 因此,推荐系统的关键就是对上面 函数的一种求解 。 实际应用中的物品数量很大,因此在满足业务需要的前提下,对于所有物品使用评估函数进行评估是不实际的。因此为了实现性能与效果的平衡,大多的推荐系统将以上的计算过程分为两个部分: 推荐召回 推荐排序

OSError: Not a gzipped file (b've') python

冷暖自知 提交于 2020-02-06 07:56:23
问题 I have the following code and I made sure its extension and name are correct. However, I still get the error outputted as seen below. I did see another person asked a similar question here on Stack Overflow, and read the answer but it did not help me. Failed to load a .bin.gz pre trained words2vecx Any suggestions how to fix this? Input: import gensim word2vec_path = "GoogleNews-vectors-negative300.bin.gz" word2vec = gensim.models.KeyedVectors.load_word2vec_format(word2vec_path, binary=True)