Word2Vec模型的引入介绍与相关概念

一 、Word2Vec模型的背景引入

1.1 One-hot模型

One-hot模型是是用N位的状态寄存器对N个状态进行编码
在这里插入图片描述
如下所示,是有4个样本,每个样本都有三个特征,特征1表示当前样本的性别。

我们喂给算法怎么样的数据,算法就会给我们一个怎么样的结果。

假设如果用1表示女性,2表示男性。那么将相当于还没有进行算法的计算的时候,已经有数据的倾向性,间接认为男性比女性重要。如果我们用这种带着偏见的数据,喂给模型,那么模型也会认为男性比女性重要。所以这样的数据会很大因素影响最后的预测结果。这是我们不希望看到的。

所以我们就需要对这样的数据进行改进,让每个一个数据的重要性都一致。就可以进行One-Hot的编码。

N个寄存器,表示当前数据的N个状态,不同的位置表示不同的状态, 这样就表示数据之间的重要性是一致的,如下所示。
在这里插入图片描述
优缺点分析:
在这里插入图片描述
通过One-Hot 模型确实会,解决数据过于离散的问题,并且会扩充特征,但是同时也会带来维度灾难的问题。
在这里插入图片描述

1.2 One-Hot编码的手动实现

import numpy as np

samples = ['我 毕业 于 北京理工大学','我 就职 于 中国 研究院']
#构建字典索引
token_index = {}
for sample in samples:
    for word in sample.split():
        if word not in token_index:
            token_index[word] = len(token_index) + 1
print(token_index)
#对每个词进行编号


results = np.zeros(shape = (len(samples),len(token)+1,max(token_index.values()) +1 )

for i, sample in enumerate(samples):
    for j, word in list(enumerate(sample.split())):
        index = token_index.get(word)
        print(j,index,word)
        results[i,j,index] = 1

print(result)

fi_results = np.zeros(shape=(len(samples), max(token_index.values())+1))
for i, sample in enumerate(samples):
    for _,word in list(enumerate(sample.split())):
        index = token_index.get(word)
        fi_results[i,index] = 1

print(fi_results)

array([[[0., 1., 0., 0., 0., 0., 0.],
[0., 0., 1., 0., 0., 0., 0.],
[0., 0., 0., 1., 0., 0., 0.],
[0., 0., 0., 0., 1., 0., 0.],
[0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0.]],
[[0., 1., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 1., 0.],
[0., 0., 0., 1., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 1.],
[0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0.]]])
array([[0., 1., 1., 1., 1., 0., 0.],
[0., 1., 0., 1., 0., 1., 1.]])

1.3 Keras中one-hot编码的实现

from keras.preprocessing.text import Tokenizer

samples = ['我 毕业 于 北京理工大学','我 就职 于 中科院']

#构建单词索引
tokenizer = Tokenizer()
tokenizer.fit_on_texts(samples)
word_index = tokenizer.word_index
print(word_index)
print(len(word_index))

sequences = tokenizer.texts_to_sequences(samples)
print(sequences)

#直接构建one-hot
one_hot_results = tokenizer.texts_to_matrix(samples)
print(one_hot_results)

[[ 0. 1. 1. 1. 1. 0. 0.]
[ 0. 1. 1. 0. 0. 1. 1.]]

2. Word2vec的相关概念与知识

2.1 Word2vec介绍

Word2Vec的作者的相关文章

在这里插入图片描述

我们希望引入一个模型,能后减小表示每个词的维度,并且可以将每个词的相互的关系也能表达出来。

就引入了词向量,把所以的词放在一个向量空间当中。
在这里插入图片描述
将每个词从一个非常稀疏的向量空间,嵌入到一个向量空间,这个过程就是词嵌入的过程。
在这里插入图片描述
Word2Vec的注意点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 Sigmoid函数与Softmax函数

Sigmoid函数

将取值范围映射到0,1区间的一个功能函数
在这里插入图片描述
定义域和值域
在这里插入图片描述

Softmax函数

实现将向量中所以的元素归一化为一个概率分布,向量中所有的元素取值范围在0,1,之间,且或有元素的和为1,相当与一个归一化。
在这里插入图片描述

2.3 二叉树相关概念

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
树1,按层次编号5结点没有左子树,有右子树,10结点缺失。树2由于3结点没有字数,是的6,7位置空挡了。树3中结点5没有子树。

在这里插入图片描述
在这里插入图片描述

2.4 哈夫曼树Huffman

路径长度就是,从根结点往下走的路径长值

结点的权,是指的是给结点赋予一个权重

带权路径长度是指的是从路径长度与节点的权的乘积之和。

哈夫曼树就是帯权路径长度最小的二叉树
在这里插入图片描述
哈夫曼树的构建过程,即为要选中权重最小的两个节点,将这两个节点进行合并,逐步重下向上何必,最终只剩下一棵树。
构建出来的哈夫曼二叉树,权重值越大的离根节点,越近,权重值越小,就离根节点越远。

2.5 哈夫曼编码

在信息通信领域哈夫曼编码的使用

等长编码,对于哪些不经常使用的字符,就会造成浪费,所以需要一个不等长的编码,进行优化整个流程。
在这里插入图片描述
将每个字符的出现频率作权重,将编码问题转为哈夫曼树问题。
在这里插入图片描述

文本领域的哈夫曼编码

在这里插入图片描述

通过映射可以发现,词之间 相互关系,词之间可以进行相互的计算。
在这里插入图片描述
在这里插入图片描述

3. 生成词向量的两种方式

Word2Vec的模型架构包括3个部分,one-hot输入层,中间的隐藏层,softmax输出层。

中间的隐藏层,没有激活函数,只是全连接的结构。

通过正向传播和反向传播,最终需要保留前面的输入的向量和隐藏层的参数。
在这里插入图片描述
通过原有的one—hot形式,通过隐藏层的计算,最后得到的是当前词向量。
在这里插入图片描述

模型的输入和输出

在这里插入图片描述
在这里插入图片描述
两者的比较,CBOW在小的数据库中比较合适,Skip—Gram在大型的语料中比较合适。

CBOW,相当于四个学生被一个老师带,学习的效果比不过 Skip—gram(一个学生四个老师带)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驭风少年君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值