Mindspore框架循环神经网络RNN模型实现情感分类|(二)词向量

Mindspore框架循环神经网络RNN模型实现情感分类

Mindspore框架循环神经网络RNN模型实现情感分类|(一)IMDB影评数据集准备
Mindspore框架循环神经网络RNN模型实现情感分类|(二)预训练词向量
Mindspore框架循环神经网络RNN模型实现情感分类|(三)RNN模型构建
Mindspore框架循环神经网络RNN模型实现情感分类|(四)损失函数与优化器
Mindspore框架循环神经网络RNN模型实现情感分类|(五)模型训练
Mindspore框架循环神经网络RNN模型实现情感分类|(六)模型加载和推理(情感分类模型资源下载)

Mindspore框架循环神经网络RNN模型实现情感分类|(七)模型导出ONNX与应用部署

一、关于预训练词向量

在IMDB影评数据集的准备中提到词向量的预训练加载。

词向量(Word embedding),即把词语表示成实数向量。能体现词语直接的相近关系。词向量已经被证明可以提高NLP任务的性能,例如语法分析和情感分析。

词向量利用分布式假设,即相似的单词在上下文中出现的方式相似,因此可以使用向量空间模型将它们映射到低维向量表示。常见的词向量算法包括Word2Vec、GloVe等。本项目用nn.embedding方法,计算词与词之间的语义距离,并结合词袋模型获取句子的语义表示。

在前面提到"I like the movie!" = 词向量[9 37 10 16 28],这是每个单词在词字典中的索引,这是映射。并没有词的含义,只有位置。即,第一步:将每个单词或标记符号映射到一个唯一的整数ID。
第二步:初始化一个随机的词向量矩阵,其中每行表示一个单词或标记的向量。
第三步:通过最小化损失函数来训练词向量矩阵,以便使相似含义的单词具有相似的向量表示。常见的损失函数包括Skip-gram、CBOW和GloVe等。
第四步:在训练完成后,使用训练出的词向量矩阵来表示新的文本数据,例如,可以将每个句子中的单词向量平均值作为句子的向量表示。
第五步:可以使用这些词向量在各种自然语言处理任务中进行特征提取,例如文本分类、命名实体识别、情感分析等。

预训练的词向量,指提前训练好这种词向量,它是在极大样本上训练的结果,有很好的通用性,无论什么任务都可以直接拿来用。

当一个人读书时,如果遇到了生僻的词,一般能根据上下文大概猜出生僻词的意思,词向量训练结果表示,正好像是捕捉了这种思想,抽象了这种行为。这也是word2vec的思想。

以上步骤的目标就是将文本转化为数值特征。再用RNN网络进行语义情感分类,就有现实意义了。

二、glove词向量

Glove模型的目的:求出能表示出词与词之间的关系 的词向量

Glove的整体思想:词 k 在词 i 和词 j 中的的出现概率有着特殊规律

模型出自论文: Glove: Global Vectors for Word Representation

2.1glove模型原理

模型实现:

1)共现矩阵(对称矩阵)

以窗口的大小,出现在同一个窗口中的词计数

例:

I love you.

you love me.

you like me?

对于第一句:I love you.

假设窗口为一,[I love],I为中心词,则I为行,love为列处+1;然后移动窗口为[I love you],love为中心词,love为行,I列和you列+1;再移动窗口[I love you.],you为中心词,you做行,I 、love、句号列+1;

第一个句子处理后,再处理第二个句子,第三个句子,就得到上述共现矩阵。

共现矩阵的每一列(或行)都可以当做一个词向量。

2)SVD处理成三角矩阵

将共现矩阵转换成三角矩阵 Σ,目的为了降维和减少计算量。

生成共现矩阵,再SVD降维。

python 复制代码
from glove import Glove
from glove import Corpus  # 语料库

# 生成共现矩阵,再SVD降维
corpus_model = Corpus()
corpus_model.fit(sentense, 
                 window=10)  # 窗口大小 (用于统计同一窗口的词,生成共现矩阵)
glove = Glove(no_components=10,   # 词向量维度
              learning_rate=0.05) # 学习率
glove.fit(corpus_model.matrix,
          epochs=10,              # 迭代次数
          no_threads=1,           # 计算线程数
          verbose=False)           # 打印epochs进度

输出及应用

python 复制代码
# most_similar函数需要使用dictionary
glove.add_dictionary(corpus_model.dictionary)

print(glove.dictionary)
print(glove.word_vectors)
print(glove.most_similar('love', number=4))

词向量有 7 种词,每个词的维度为 10:

此处参考博客:xiao___qiao的Glove 词向量

3)拟合计算词向量

通过设计的函数,将词向量和共现概率比值进行计算,使loss函数越小。设计的函数如下,是通过共现词频率比值的规律来设计的:

f(x):权重,为了不让相关度太高,保持相对高就行

2.2 预训练词向量下载

Glove 模型主要是利用了共现频率比值,这个特殊的规律,以这个规律来设计 loss 函数进行训练,得到词向量的方法。以下是下载预训练的词向量。

python 复制代码
glove_path = download('glove.6B.zip', 'https://mindspore-website.obs.myhuaweicloud.com/notebook/datasets/glove.6B.zip')
vocab, embeddings = load_glove(glove_path)
print(len(vocab.vocab()))

解压后:

glove模型-6B词数量-100d词向量维数。

2.3 预训练词向量应用

有了预训练的词向量后,前面提到"I like the movie!" = 词映射[9 37 10 16 28],就变成"I like the movie!" = 词向量(每个词都是100d向量)

Word Vector
I -0.046539 , 0.61966 , 0.56647 , -0.46584 , -1.189 ,0.44599 , 0.066035 , 0.3191 , 0.14679 , -0.22119 ,0.79239 , 0.29905 , 0.16073 , 0.025324 , 0.18678 ,...
like -0.2687 , 0.81708 , 0.69896 , -0.72341 , 0.091566, 0.19557 , -0.52112 , -0.24313 , -0.44701 , -0.27039 , -0.34126 , -0.46898 ,...
the -0.038194, -0.24487 , 0.72812 , -0.39961 , 0.083172, 0.043953, -0.39141 , 0.3344 , -0.57545 , 0.087459, 0.28787 , ...
movie 0.38251 , 0.14821 , 0.60601 , -0.51533 , 0.43992 ,0.061053 , -0.62716 , -0.025385 , 0.1643 , -0.22101 ,...
0.38472 , 0.49351 , 0.49096 , -1.5434 , -0.33614 ,0.6222 , 0.32265 , 0.075331 , 0.65591 , -0.23517 , ...

三、小结

Glove 和 word2vec 相比,word2vec 是周围范围内的词训练,glove 是以统计的词,更全面。两者最直观的区别在于,word2vec是"predictive"的模型,而GloVe是"count-based"的模型。

由于GloVe算法本身使用了全局信息,自然内存费的也就多一些,相比之下,word2vec在这方面节省了很多资源。

相关推荐
四口鲸鱼爱吃盐1 小时前
Pytorch | 从零构建MobileNet对CIFAR10进行分类
人工智能·pytorch·分类
weixin_515202494 小时前
第R3周:RNN-心脏病预测
人工智能·rnn·深度学习
call me by ur name5 小时前
VLM--CLIP作分类任务的损失函数
人工智能·机器学习·分类
Python机器学习AI5 小时前
分类模型的预测概率解读:3D概率分布可视化的直观呈现
算法·机器学习·分类
机器学习之心9 小时前
BiTCN-BiGRU基于双向时间卷积网络结合双向门控循环单元的数据多特征分类预测(多输入单输出)
深度学习·分类·gru
机器学习之心11 小时前
Bayes-GRU-Attention的数据多特征分类预测Matlab实现
matlab·分类·gru
程序员非鱼14 小时前
深度学习任务简介:分类、回归和生成
人工智能·深度学习·分类·回归·生成
落魄君子14 小时前
SVM分类-支持向量机(Support Vector Machine)
神经网络·算法·支持向量机·分类
学习BigData1 天前
【使用PyQt5和YOLOv11开发电脑屏幕区域的实时分类GUI】——选择检测区域
qt·yolo·分类
【建模先锋】1 天前
故障诊断 | 一个小创新:特征提取+KAN分类
人工智能·分类·数据挖掘