《Word2vec》1 模型的引入介绍与相关概念

本文介绍了Word2Vec模型的背景,包括One-hot编码及其手动与Keras实现,探讨了词嵌入的重要性和Sigmoid与Softmax函数。此外,还讲解了二叉树和哈夫曼编码的概念,并简述了语言模型的经典方法与神经网络语言模型在处理文本序列中的应用。
摘要由CSDN通过智能技术生成

一 、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.1 经典语言模型

什么是语言模型,简单是说语言模型就用来计算一个句子的概率模型,也就是用来判断是否是人话的概率。
在这里插入图片描述
句子S的概率,展开为其中词的出现条件概率的乘积
在这里插入图片描述

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

3.2 神经网络语言模型

在这里插入图片描述
由于文本库的有限性,N-gram不能解决文本中,词之间的相似性。
在这里插入图片描述

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

驭风少年君

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

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

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

打赏作者

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

抵扣说明:

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

余额充值