NLP︱R语言实现word2vec(词向量)经验总结(消除歧义、词向量的可加性)

R语言由于效率问题,实现自然语言处理的分析会受到一定的影响,如何提高效率以及提升词向量的精度是在当前软件环境下,比较需要解决的问题。

笔者认为还存在的问题有:

1、如何在R语言环境下,大规模语料提高运行效率?

2、如何提高词向量的精度,或者说如何衡量词向量优劣程度?

3、词向量的功能性作用还有哪些值得开发?

4、关于语义中的歧义问题如何消除?

5、词向量从”词“往”短语“的跨越?

转载请注明出处以及作者(Matt),欢迎喜欢自然语言处理一起讨论~

——————————————————————————————————————————————————————

R语言中Word2vec的包有哪些?

R语言中的词向量的包还是比较少的,而且大多数的应用都还不够完善,笔者之前发现有李舰老师写的tm.word2vec包

重磅︱文本挖掘深度学习之word2vec的R语言实现

tm.word2vec包里面的内容太少了,只有一个调用函数比较有效,于是李舰老师又在github上自己写了一个word2vec的函数,但是这个函数调用起来还不是特别方便。

于是国外有一神人,在李舰老师基础上,借鉴李舰老师word2vec函数,开发了自己的包,wordVectors包(1000W单词,4线程,20min左右),这个包相当优秀,不仅全部集成了李舰老师函数的优势(可以多线程操作、自定义维度、自定义模型),还解决了如何读取输出文件、消除歧义、词云图、词相似性等问题

近日发现了其他两个:一个是text2vec,一个是rword2vec。其中text2vec是现在主要的研究方向:

重磅︱R+NLP:text2vec包简介(GloVe词向量、LDA主题模型、各类距离计算等)

——————————————————————————————————————————————————————

一、如何在R语言环境下,大规模语料提高运行效率?

从训练参数、优化训练速度入手。

1、训练参数

训练参数的选择是提高效率的关键之处,一些经验参数训练的经验(一部分来源小桥流水博客):

  1. window在5~8,我用的8,感觉还不错,CBOW一般在5,SKIP在10左右比较适合;
  2. 其他的可以参考:

· 架构:skip-gram(慢、对罕见字有利)vs CBOW(快)

· 训练算法:分层softmax(对罕见字有利)vs 负采样(对常见词和低纬向量有利)

· 欠采样频繁词:可以提高结果的准确性和速度(适用范围1e-3到1e-5)

· 文本(window)大小:skip-gram通常在10附近,CBOW通常在5附近

2、优化训练速度

(一部分来源小桥流水博客

  1. 选择cbow模型,根据经验cbow模型比skip-gram模型快很多,并且效果并不比skip-gram差,感觉还好一点;
  2. 线程数设置成跟cpu核的个数一致;
  3. 迭代次数5次差不多就已经可以了;

——————————————————————————————————————————————————————

二、如何提高词向量的精度,或者说如何衡量词向量优劣程度?

1、维数,一般来说,维数越多越好(300维比较优秀),当然也有例外;

2、训练数据集大小与质量。训练数据集越大越好,覆盖面广,质量也要尽量好。

3、参数设置,一般如windows,iter、架构选择比较相关。

——————————————————————————————————————————————————————

三、词向量的功能性作用还有哪些值得开发?

1、词向量的可加性

词向量有一个潜力非常大的性质,就是向量之间的可加性,比如两个案例:

Vector(巴黎)-Vector(法国)+Vector(意大利)≈Vector(罗马)

Vector(king)-Vector(man)+Vector(woman)≈Vector(queen)

大致的流程就是king的woman约等于queen,当然为什么要减去man,这里man会干扰king词,所以减去。

2、消除歧义

上面king-man就是消除歧义的一种方式,这里要用到线性代数的方式,king-man之后就把man这层意思消除掉了。

不过,得先大规模识别歧义词,有待后续研究。

3、词聚类

通过聚类,可以去挖掘一些关于某词的派生词;或者寻找相同主题时,可以使用。

4、词向量的短语组合word2phrase

通过词向量构造一些短语组合,要分成两步来探索:

(1)词语如何链接起来?(参考论文

(2)链接起来,用什么方法来记录组合短语?——平均数

比如”中国河“要变成一个专用短语,那么可以用”中国“+”河“向量的平均数来表示,然后以此词向量来找一些近邻词。

5、近义词属性

词向量通过求近似,可以获得很好的一个性质,除了可加性,就是近似性。可以将附近的近义词进行聚合,当然词向量的质量取决于训练语料的好坏。同时,近义词之中,反义词是否能够识别出来,也还是一个值得研究的话题。

时间: 2024-10-11 19:42:52

NLP︱R语言实现word2vec(词向量)经验总结(消除歧义、词向量的可加性)的相关文章

R+tmcn笔记︱tmcn包的基本内容以及李舰老师R语言大会展示内容摘录

tmcn包目前托管在在R-forge 上开发和发布.下载方式以及Rforge相关链接: install.packages("tmcn", repos = "http://R-Forge.R-project.org") tmcn 包是一个进行中文文本挖掘的R包.包含了中文编码处理.文字操作. 文本挖掘模型和算法的一些函数.主要针对目前可用的 R 资源的不足而开发的. 目前最常用的文本挖掘包是 tm 包,该包已经成了事实上的分析标准, 几乎所有的其他 R 包都是基于这个

重磅︱文本挖掘深度学习之word2vec的R语言实现

笔者寄语:2013年末,Google发布的 word2vec工具引起了一帮人的热捧,大家几乎都认为它是深度学习在自然语言领域的一项了不起的应用,各种欢呼"深度学习在自然语言领域开始发力 了". 基于word2vec现在还出现了doc2vec,word2vec相比传统,考虑单词上下文的语义:但是doc2vec不仅考虑了单词上下文的语义,还考虑了单词在段落中的顺序. 如果想要了解word2vec的实现原理,应该读一读官网后面的三篇参考文献.显然,最主要的应该是这篇: Distributed

R语言︱情感分析—词典型代码实践(最基础)(一)

笔者寄语:词典型情感分析对词典要求极高,词典中的词语需要人工去选择,但是这样的选择会很有目标以及针对性.本文代码大多来源于<数据挖掘之道>的情感分析章节.本书中还提到了监督算法式的情感分析,可见博客: R语言︱情感分析-基于监督算法R语言实现笔记. 可以与博客 R语言︱词典型情感分析文本操作技巧汇总(打标签.词典与数据匹配等)对着看. 词典型情感分析大致有以下几个步骤: 训练数据集.neg/pos情感词典.分词+数据清洗清洗(一.二.三级清洗步骤).计算情感得分.模型评价 ----------

R语言之词云:wordcloud&amp;wordcloud2安装及参数说明

一.wordcloud安装说明 install.packages("wordcloud"); 二.wordcloud2安装说明 install.packages("devtools"); devtools::install_github("lchiffon/wordcloud2",type="source") 错误提示: 解决办法: install.packages("htmltools"); 三.word

R语言编程艺术# 数据类型向量(vector)

R语言最基本的数据类型-向量(vector) 1.插入向量元素,同一向量中的所有的元素必须是相同的模式(数据类型),如整型.数值型(浮点数).字符型(字符串).逻辑型.复数型等.查看变量的类型可以用typeof(x)函数查询. > #插入向量元素 > x <- c(88,5,12,13) > x [1] 88 5 12 13 > x <- c(x[1:3],168,x[4]) #插入168数字在13之前 > x [1] 88 5 12 168 13 > 2.

R语言中最简单的向量赋值方法

R语言中最简单的向量赋值方法简介: 1. 生成等差数列的向量x x <- 1:10 #将x向量赋值为1 2 3 4 5 6 7 8 9 10 结果为 > x [1] 1 2 3 4 5 6 7 8 9 10 2. 将x的值全部修改成0 x[] <- 0 #非常简洁的赋值方法,建议使用 x[1:length(x)] <- 0 #不建议使用的赋值方法 结果为: > x[] <- 0 > x [1] 0 0 0 0 0 0 0 0 0 0 3.使用seq函数 x <

R语言入门心得(3) -- 向量相关

向量定义 R在实际应用中比较常用的一个对象就是向量(Vector).向量的创建格式为 向量名 = c(x1,x2,x3,…..)  或  向量名 <- c(x1,x2,x3,…..) 或  c(x1,x2,x3,…..) -> 向量名 或  Assign("向量名", c(x1,x2,x3,…..)),c()为向量赋值函数,c()可以有任意多个参数,而起返回值则是一个把这些参数首尾相连形成的向量.你可以在命令行中输入?c或者help(c)来查看函数的详细信息.例如我们要创建

R语言中两个数组(或向量)的外积怎样计算

所谓数组(或向量)a和b的外积,指的是a的每个元素和b的每个元素搭配在一起相乘得到的新元素.当然运算规则也可自己定义.外积运算符为 %o%(注意:百分号中间的字母是小写的字母o).比如: > a <- 1:2 > b <- 3:5 > d <- a %o% b > d [,1] [,2] [,3] [1,] 3 4 5 [2,] 6 8 10 注意维数公式为: dim(d) = c( dim(a) , dim(b) ) 实际上R语言提供了一个更为一般化得外积函数o

R语言中两个数组(或向量)的外积如何计算

所谓数组(或向量)a和b的外积,指的是a的每一个元素和b的每一个元素搭配在一起相乘得到的新元素.当然运算规则也可自定义.外积运算符为 %o%(注意:百分号中间的字母是小写的字母o).例如: > a <- 1:2 > b <- 3:5 > d <- a %o% b > d [,1] [,2] [,3] [1,] 3 4 5 [2,] 6 8 10 注意维数公式为: dim(d) = c( dim(a) , dim(b) ) 实际上R语言提供了一个更为一般化得外积函数