Word2vec

分词与词向量

今天/天气/不错/!(结巴分词)

1.启发式:Heuristic

2.机器学习/统计方法:HMM, CRF

基本假设:“相似”词的邻居词分布类似

倒推:两个词邻居词分布类似 → 两个词语义相近

宠物 主人 喂食 蹭 喵

宠物 主人 喂食 咬 汪

v(“猫”)≈v(“狗”)

v(“喵”)≈v(“汪”)

词向量:

1.传统one-hot编码 ( “天气”: (1,0,0…,0), “气候”: (0,1,0,…0) )

维度高(几千–几万维稀疏向量),数据稀疏

难以计算词之间相似度

难以做模糊匹配

2.词嵌入

维度低( 100 – 500维)

无监督学习,不需去掉停用词(stopwords)

天然有聚类后的效果

连续向量,方便机器学习模型处理

罕见词: “风姿绰约” ≈ “漂亮”

上图中通过man和woman的向量,可以求cos相似度得出与king最接近的向量是queen.

Word2vec

Huffman树(最优二叉树):

Huffman树是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。

构建huffman树:

输入

符号集合 S = { s 1 , s 2 , ⋯ , s n },其S集合的大小为 n。

权重集合 W = { w 1 , w 2 , ⋯ , w n } ,其W集合不为负数且 wi = weight(si), 1 ≤ i ≤ n。

输出

一组编码 C(S,W)={c1,c2, ⋯ ,cn} ,其C集合是一组二进制编码且ci为si相对应的编码, 1 ≤ i ≤ n。

目标

为C的加权的路径长,对所有编码 T(S,W),则L(C) ≤ L(T)

例如:

 

Huffman编码:

Huffman编码使用变长编码表对源符号(如文件中的一个字母)进行编码,其中变长编码表是通过一种评估来源符号出现概率的方法得到的,出现概率高的字母使用较短的编码,反之出现概率低的则使用较长的编码,这便使编码之后的字符串的平均长度、期望值降低,从而达到无损压缩数据的目的。

构建Huffman编码是一个通过哈夫曼树进行的一种编码,一般情况下,以字符:‘0’与‘1’表示。编码的实现过程很简单,只要实现哈夫曼树,通过遍历哈夫曼树,规定向左子树遍历一个节点编码为“0”,向右遍历一个节点编码为“1”,结束条件就是遍历到叶子节点!

例如:

n-gram模型:

n-gram模型是基于(n-1)阶马尔可夫链的一种概率语言模型该模型基于这样一种假设,第n个词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。这些概率可以通过直接从语料中统计N个词同时出现的次数得到。当n分别为1、2、3时,又分别称为一元语法(unigram)、二元语法(bigram)与三元语法(trigram)

推导:

假设T是由词序列W1,W2,W3,…Wn组成的,那么P(T)=P(W1W2W3...Wn)=P(W1)P(W2|W1)P(W3|W1W2)…P(Wn|W1W2…Wn-1)

但是这种方法存在两个致命的缺陷:一个缺陷是参数空间过大,不可能实用化;另外一个缺陷是数据稀疏严重。

为了解决这个问题,我们引入了马尔科夫假设:一个词的出现仅仅依赖于它前面出现的有限的一个或者几个词。

如果一个词的出现仅依赖于它前面出现的一个词,那么我们就称之为bigram。即

P(T) = P(W1W2W3…Wn)=P(W1)P(W2|W1)P(W3|W1W2)…P(Wn|W1W2…Wn-1)

   ≈P(W1)P(W2|W1)P(W3|W2)…P(Wn|Wn-1)

如果一个词的出现仅依赖于它前面出现的两个词,那么我们就称之为trigram。

依赖词的个数“n”的选择:

理论上,只要有足够大的语料, n越大越好

实际情况往往是训练语料很有限,很容易产生数据稀疏,不满足大数定律,算出来的概率失真。

另一方面,如果n很大, 参数空间过大,产生维数灾难,也无法实用。

trigram用的最多。尽管如此,原则上,能用bigram解决,绝不使用trigram。 n取≥4的情况较少

当n更大时:对下一个词出现的约束信息更多,具有更大的辨别力;

当n更小时:在训练语料库中出现的次数更多,具有更可靠的统计信息,具有更高的可靠性、实用性。

Word2vec为一群用来产生word embeding(词嵌入)的模型。这些模型为浅层和双层神经网络,训练完成之后,word2vec 模型可用来映射每个词到一个向量,可用来表示词对词之间的关系。该向量为神经网络之隐藏层.Word2vec 依赖skip-grams 或continuous-bag-of-words(CBOW)来建立神经词嵌入。

基本思想:

通过训练将每个词映射成 K 维实数向量(K 一般为模型中的超参数),通过词之间的距离(比如 cosine 相似度、欧氏距离等)来判断它们之间的语义相似度.其采用一个 三层的神经网络 ,输入层-隐层-输出层。有个核心的技术是 根据词频用Huffman编码 ,使得所有词频相似的词隐藏层**的内容基本一致,出现频率越高的词语,他们**的隐藏层数目越少,这样有效的降低了计算的复杂度,结果是将相似的词距离越拉越近, 非相似的词越拉越远。

两套模型:

Skip-gramCBOW

两套减少训练时间框架:

Hierarchical Softmax和Negative Sampling

 

Skip-gram(已知当前词$w_t$,预测上下文$w_{t-m},...,w_{t-1},w_{t+1},...,w_{t+m}$):

1.输入层, one hot表示,当前词是1,其他是0  

2.输入层到隐层的连接矩阵,即前面说的W

3.隐层的**函数很特殊,是f(x) =x. 所以隐层的输出值其实就是当前词的表示Wi

4.隐层到输出层的链接矩阵,即前面说的C

5.输出层是个softmax

 

上图是用于训练示例的Skip-gram网络的扩展描述,向前馈给表示上下文窗口c = 2的输出上下文向量。输入字是词汇大小的单热编码向量。这连接到由我们的节点大小参数定义为大小len(n)的投影层。通过线性变换通过输入权重矩阵p(v x n维)投影输入层。在上下文大小为2的情况下,每个训练样例将向前馈4次4个输出向量:w(t-2),w(t-1),w(t + 1)和w(t + 2)。投影层通过具有n×v维度的输出权重矩阵p'连接到输出层。

从左到右,每个后续层都是通过数学方法构造一个层的点积及其权重矩阵。

权重矩阵p和p'可以以许多方式初始化,最终将使用反向传播进行调整。


CBOW(已知上下文$w_{t-m},...,w_{t-1},w_{t+1},...,w_{t+m}$,预测当前词$w_t$):

输入层:2m×||个节点,上下文共 2m个词的one-hot 编码

  输入层到投影层到连接边:输入词矩阵 Vn×||;

投影层::n个节点,上下文共 2m个词的词向量的平均值;

  投影层到输出层的连接边:输出词矩阵 U||×n;

输出层:||个节点。第 i 个节点代表中心词是词 wi的概率。

  将one-hot到word embedding那一步描述了出来。这里的投影层并没有做任何的非线性**操作,直接就是Softmax层。

 

 

 

 

 

  Word2vec 和矩阵分解的等价性

1.Word2vec 理论上等价于分解 Pointwise Mutual Information (PMI) 矩阵

 

word2vec

 

来源:http://www.cnblogs.com/xmeo/p/6474833.html


智能推荐

word2vec

例子 word2vec就是对word做了一个embedding操作,简单来说就是将原有用one-hot编码的预料库(一般来说百万级别)转为embedding形式(几百维)。 比如:维基百科预料库包含的词有100W,将其使用one-hot编码。 “The dog barked at the mailman” 基于这个句子,可以构建一个大小为5的词汇表(忽略大小写和标点符号):...

word2vec

Google 于 2013 年开源推出的一个用于获取 word vector 的工具包(word2vec), 其中的两个训练模型(Skip-gram,CBOW) 两种加速的方法(Hierarchical Softmax,Negative Sampling) 作用: 将所有词语投影到K维的向量空间,每个词语都可以用一个K维向量表示。 由于它简洁,高效的特点,引起了人们的广泛关注,并应用在很多NLP任...

Word2vec

算法介绍 2013年,Google开源了一款用于词向量计算的工具–Word2vec,引起了工业界和学术界的关注。Word2vec可以在百万数量级的词典和上亿数量级的数据集上进行高效的训练,得到的训练结果–词向量(Word Embedding)–可以很好的度量词与词之间的相似性。 语言模型 语言模型也就是自然语言处理(NLP),语言模型的范围非常广,比如分词、信息...

Word2Vec

Lecture 1: Introduction and Word Vectors One-hot 主要思想:means one 1, the rest 0s. 缺点:①如果想表示合理大小词汇,向量维度太大; ②两个不同词对应的向量是正交的,数学上无法描述他们的相似性。 Word2Vec Idea ①有一个很大的文本语料库; ②每个词在固定词典中由一个向量表示,我们随机初始化向量; ③遍历文本中的每...

word2vec

常用、流行的词嵌入方法,就是Word2Vec。这是Tomas Mikolov在谷歌工作时发明的一类方法,也是由谷歌开源的一个工具包的名称。具体来说,Word2Vec中涉及到了两种算法,一个是CBOW一个是Skip-Gram。这也是因为深度学习流行起来之后,基于神经网络来完成的Word Embedding方法。 当前Deep Learning在NLP领域的三个阶段为 还有BERT的变形ALBERT和...

猜你喜欢

word2vec

转自:http://www.cnblogs.com/iloveai/p/word2vec.html 系列参考文献:http://www.cnblogs.com/Determined22/p/5804455.html http://blog.csdn.net/itplus/article/details/37969817 http://techblog.youdao.com/?p=915 http:...

word2vec

1.英文语料库的处理 大写变小写,去除表情符号,或则参考表情符号库,进行情感分析 词向量:word2vec,fasttext 为什么不用one-hot向量表示词向量? 如’a b c’ ==》 a:[1,0,0] , b:[0 1 0],c:[0 0 1],容易维度过高,特征过于稀疏。 word2vec的认识:是一个工具。主要包括两个模型:跳字模型(skip-gram)和连...

Word2Vec

Word2Vec 背景知识 语言模型 词表示 对比模型 NNLM RNNLM 模型结构 skip-gram模型 CBOW模型 关键技术 Hierarchical Softmax (层次Softmax) 负采样(Negative Sampling) 模型复杂度分析 代码实现 背景知识 Word2Vec是一种词向量的表示方式,是在论文《Efficient Estimation of Word Repr...

Word2vec

文章目录 研究背景 前期知识储备 学习目标 论文储备知识 论文导读 论文背景知识 研究成果 研究意义 论文总览 介绍 对比模型 前馈神经网络语言模型(NNLM) 语言模型困惑度和Loss得关系 回顾网络模型 循环神经网络语言模型(RNNLM) 对比模型 Log-linear model word2ver 原理 Skip-gram CBOW 关键技术 模型复杂度的概念 基于前馈网络的语言模型的时间复...

word2vec

NLP -词向量模型-Word2Vec NLP中词向量维度一般在50-300维,建议300(google官方) 数据从哪来? 不同模型对比 CBOW: 思想是取目标词的上下文 input: 上下文 output: 预测中间词即缺失部分内容 Skipgram:思想是根据上下文确定目标词 input:传入中间词 output:预测上下文 如何进行训练 前向传播计算loss 根据loss反向传播更新参数...

问答精选

SQL, update command not ending properly

It keeps saying : ORA-00933: SQL command not properly ended Pls help me or give me a link to a solution You can use a correlated subquery instead:...

How can I escape $.each loop with my data?

I'm doing an Json call to retrieve an a list of locations with information details for each location. longitude and latitude are included in this info. I am using Google's distance matrix api to get t...

How to display all the columns (and their type) in all tables of all schemas in a database?

Suppose you have a database which has an 'n' number of schemas with an 'n' number of tables each. Each of these contain an 'n' number of columns. How would I print all this data along with the data ty...

How to set the java.library.path in intelliJ Idea

Could anyone please help how do I solve this error: I am using IDEA IDE as a first time, and have been using Resin_4.0.37 as a server to test my work. As soon as I start my lcoal server in debug mode ...

How to calculate mouse coordinate based on resolution c#

i am trying to develop a remote desktop apps with c#. so i have couple of question regarding mouse coordinate calculation based on picture box suppose i have picture box and i want to capture mouse co...

相关问题

相关文章

热门文章

推荐文章

相关标签

推荐问答