使用R语言进行文本特征提取的四种方法(三) —— 基于word2vec的词嵌入

       word2vec是一组用于生成词向量的自然语言处理工具,主要是基于双层神经网络,经过训练后可以为单词生成一个向量空间,为每一 个单词都分配一个向量。在生成的向量空间中,意思越相近的单词向量之间的距离越小,反之则越大。

        word2vec有两种模式,分别是CBOWskip-gram。前者的全称是“Continuous Bag-Of-Words”,即连续词袋模型,它能够在一定长度的窗口中根据上下文的单词(不分顺序)来预测当前词。后者的全称是“continuous skip-gram”,与 CBOW相反,这个模型能够在一定窗口内根据当前词来预测上下文的单词。在实践中发现,CBOW的处理速度更快,但是在对非常用词的向量 化上,skip-gram做得更好。

       下面,将采用官方文档提供的案例对word2vec包进行简 要介绍,这个案例对udpipe软件包中的brussels_reviews数据集中的部分文本材料进行了向量化操作,具体步骤如下:

###### 3.词嵌入(基于word2vec)
library(udpipe)
library(word2vec)
#取出部分文本数据
data(brussels_reviews,package = "udpipe")
x <- subset(brussels_reviews,language == "nl")
x <- tolower(x$feedback) #转化为小写
#查看x的数据结构
str(x)
#x是一个长度为500的文本段落

       接下来进行建模,在模型上(主要利用word2vec函数实现),默认的参数基本可以完成自动化实现,但是用户可以根据自己的需要来进行调整。如type可以选择使用COBW模型还是skip-gram模 型;dim参数可以决定输出向量的维度数量;iter可以选择模型训练的迭代次数等。

#进行建模,设置维度为15,训练迭代次数为20
model <- word2vec(x = x, dim = 15, iter = 20)

       经过以上的操作,训练完成的模型现在就生成在model中了。如果需要获得词向量,可以使用as.matrix函数来进行转化,如下所示:

emb <- as.matrix(model)
head(emb)

使用R语言进行文本特征提取的四种方法(三) —— 基于word2vec的词嵌入_第1张图片

       至此,已经获得了各个词的向量。这些词的单个向量没有任何意义,但是它们在多维空间中的相对距离能够表征它们相互之间的差异性。如果想要探知和“bus”“toilet”两个词意思最接近的5个其他单词,那么可以操作如下:

nn <- predict(model,c("bus","toilet"),type = "nearest",top_n = 5)
nn

使用R语言进行文本特征提取的四种方法(三) —— 基于word2vec的词嵌入_第2张图片

 

你可能感兴趣的:(R语言文本数据分析,r语言,word2vec,自然语言处理)