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在这方面节省了很多资源。

相关推荐
青椒大仙KI112 小时前
24/9/19 算法笔记 kaggle BankChurn数据分类
笔记·算法·分类
勤劳兔码农14 小时前
文本分类实战项目:如何使用NLP构建情感分析模型
自然语言处理·分类·数据挖掘
xuehaisj17 小时前
论文内容分类与检测系统源码分享
人工智能·分类·数据挖掘
xuehaisj20 小时前
食品检测与分类系统源码分享
人工智能·分类·数据挖掘
YoLo-81 天前
《机器学习》周志华-CH7(贝叶斯分类)
人工智能·机器学习·分类
Kenneth風车1 天前
【机器学习(七)】分类和回归任务-K-近邻 (KNN)算法-Sentosa_DSML社区版
人工智能·算法·低代码·机器学习·分类·数据分析·回归
勤劳兔码农2 天前
基于LSTM的文本摘要生成实战教程
人工智能·rnn·lstm
惟长堤一痕2 天前
医学数据分析实训 项目五 分类分析--乳腺癌数据分析与诊断
分类·数据挖掘·数据分析
Sun_Sherry2 天前
NLP:微调BERT进行文本分类
自然语言处理·分类·bert
scdifsn2 天前
动手学深度学习8.5. 循环神经网络的从零开始实现-笔记&练习(PyTorch)
pytorch·笔记·rnn·深度学习·梯度剪裁