Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Word2Vec

Word2Vec

作者头像
用户1171305
发布于 2017-12-28 03:39:31
发布于 2017-12-28 03:39:31
1.1K0
举报
文章被收录于专栏:成长道路成长道路

       以前对于文本类型的数据,都是通过tf-idf进行处理的,这个可以参见以前写的博客,这里就不在详细介绍了。最近项目组老大跟我说了word2vec这种文本型特征提取的方式。特地给我讲解了一下俩者之间的区别:

      一个词经过tf-idf处理之后,是一个数字,如果是相近的词语,它是无法区分的。Word2Vec就不一样了,比如研究和科研这俩个词,经过Word2Vec处理之后,是向量的形式。科研:[1,0,0,1,0],研究[1,0,0,0.8,0]。是可以判断是否相近的。

      对于概念,我在spark官网翻译了一段话:计算一系列词的分布式向量。分布式的主要优点是相近的词在向量空间中是相近的,使泛化的新模式更容易和模型的评估更强大。分布式向量显示在许多自然语言处理应用中是有用的。命名实体类别,消歧。解析,标注和机器翻译

代码如图:

package com.iflytek.features import org.apache.spark.ml.feature.Word2Vec import org.apache.spark.ml.linalg.Vector import org.apache.spark.sql.Row import org.apache.spark.sql.SparkSession object wordtovec {   def main(args: Array[String]): Unit = {       val spark=SparkSession.builder().appName("pca").master("local").getOrCreate()       // Input data: Each row is a bag of words from a sentence or document.       val documentDF = spark.createDataFrame(Seq(         "Hi I heard about Spark".split(" "),         "I wish Java could use case classes".split(" "),         "Logistic regression models are neat".split(" ")          ).map(Tuple1.apply)).toDF("text")

      // Learn a mapping from words to Vectors.       val word2Vec = new Word2Vec()         .setInputCol("text")         .setOutputCol("result")         .setVectorSize(3)         .setMinCount(0)

      val model = word2Vec.fit(documentDF)

      val result = model.transform(documentDF)       result.select("result").take(3).foreach(println)       val vecs=model.getVectors       vecs.foreach { x => println(x.apply(0)+":"+x.apply(1))}       val synonyms =model.findSynonyms("are", 3)         synonyms.select("word", "similarity").foreach { x => println(x.apply(0)+":"+x.apply(1)) }   } }

result的输出结果:

[[-0.028139343485236168,0.04554025698453188,-0.013317196490243079]] [[0.06872416580361979,-0.02604914902310286,0.02165239889706884]] [[0.023467857390642166,0.027799883112311366,0.0331136979162693]]

vecs的输出结果:

heard:[-0.053989291191101074,0.14687322080135345,-0.0022512583527714014] are:[-0.16293057799339294,-0.14514029026031494,0.1139335036277771] neat:[-0.0406828410923481,0.028049567714333534,-0.16289857029914856] classes:[-0.1490514725446701,-0.04974571615457535,0.03320947289466858] I:[-0.019095497205853462,-0.131216898560524,0.14303986728191376] regression:[0.16541987657546997,0.06469681113958359,0.09233078360557556] Logistic:[0.036407098174095154,0.05800342187285423,-0.021965932101011276] Spark:[-0.1267719864845276,0.09859133511781693,-0.10378564894199371] could:[0.15352481603622437,0.06008218228816986,0.07726015895605087] use:[0.08318991959095001,0.002120430115610361,-0.07926633954048157] Hi:[-0.05663909390568733,0.009638422168791294,-0.033786069601774216] models:[0.11912573128938675,0.1333899050951004,0.1441687047481537] case:[0.14080166816711426,0.08094961196184158,0.1596144139766693] about:[0.11579915136098862,0.10381520539522171,-0.06980287283658981] Java:[0.12235434353351593,-0.03189820423722267,-0.1423865109682083] wish:[0.14934538304805756,-0.11263544857501984,-0.03990427032113075]

synonyms的输出:

classes:0.8926231541787831 I:0.8009102388269147 Hi:0.24258211195587995

getVectors:得到语料中所有词及其词向量

transform:将训练语料中,一行,也就是一个句子,表示成一个向量。它的处理方式是,对句子中所有的词向量取平均作为句子的向量表示,最native的表示方法。

findSynonyms("are",3):得到的是与词are相近的3个词。

经过我的实际测试,发现使用Word2Vector可以提高各项评价指标,大家也不妨试试啊。

spark2.0的分类、回归、聚类算法我都测试了一遍,只有分类的朴素贝叶斯是行不通的(特征值不接受负的),其他的都是行的通的。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-06-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【NLP】Word2Vec详解(含数学推导)
word2vec可以在百万数量级的词典和上亿的数据集上进行高效地训练;并且,该工具得到的训练结果——词向量(word embedding),可以很好地度量词与词之间的相似性。随着深度学习(Deep Learning)在自然语言处理中应用的普及,很多人误以为word2vec是一种深度学习算法。其实word2vec算法的背后是一个浅层神经网络。
黄博的机器学习圈子
2020/09/04
2.6K0
【NLP】Word2Vec详解(含数学推导)
【Spark Mllib】TF-IDF&Word2Vec——文本相似度
我们将使用一个非常有名的数据集,叫作20 Newsgroups;这个数据集一般用来做文本分类。这是一个由20个不同主题的新闻组消息组成的集合,有很多种不同的数据格式。对于我们的任务来说,可以使用按日期组织的数据集。
小爷毛毛_卓寿杰
2019/02/13
2.7K0
NLP之——Word2Vec详解
2013年,Google开源了一款用于词向量计算的工具——word2vec,引起了工业界和学术界的关注。首先,word2vec可以在百万数量级的词典和上亿的数据集上进行高效地训练;其次,该工具得到的训练结果——词向量(word embedding),可以很好地度量词与词之间的相似性。随着深度学习(Deep Learning)在自然语言处理中应用的普及,很多人误以为word2vec是一种深度学习算法。其实word2vec算法的背后是一个浅层神经网络。另外需要强调的一点是,word2vec是一个计算word vector的开源工具。当我们在说word2vec算法或模型的时候,其实指的是其背后用于计算word vector的CBoW模型和Skip-gram模型。很多人以为word2vec指的是一个算法或模型,这也是一种谬误。接下来,本文将从统计语言模型出发,尽可能详细地介绍word2vec工具背后的算法模型的来龙去脉。
10JQKA
2018/07/25
1.2K0
NLP之——Word2Vec详解
人工智能,应该如何测试?(六)推荐系统拆解
根据之前学习到的内容,我们已经基本了解到了要如何构建一个二分类模型。我们都知道模型大体可以分成,回归,二分类和多分类。但推荐系统是属于哪一种场景呢,比如我们常见的广告推荐或者内容推荐,这些场景都是由系统来判断用户的喜好来推送广告或者视频内容,以追求更高的点击率和转化率。这种场景怎么看都不像跟这三种类型的算法有关系。
霍格沃兹测试开发Muller老师
2024/04/07
1930
关于 word2vec 我有话要说
本文介绍了如何使用Spark MLlib库进行Word2Vec训练,将词嵌入转换为Google Word2Vec格式。首先介绍了Word2Vec的原理和算法,然后讨论了Spark MLlib库在词嵌入训练中的应用。最后,通过实验评估了训练效果,包括词聚类、词相关性、类比推理和分类任务。
old zhang
2017/08/25
8.5K3
关于 word2vec 我有话要说
数据量大了跑不动?PySpark特征工程总结
我们定义了一些测试数据,方便验证函数的有效性;同时对于大多数初学者来说,明白函数的输入是什么,输出是什么,才能更好的理解特征函数和使用特征:
炼丹笔记
2022/04/06
3.3K0
文本型数据的向量化:TF-IDF
本文介绍了如何使用TF-IDF将文本型数据向量化,并使用PCA降维,最后使用Spark MLlib的IDFV方法进行分类。首先,使用TF-IDF将文本转换为数值向量,然后使用PCA降维,最后将向量输入到IDFV算法中进行分类。
用户1171305
2017/12/28
1.9K0
文本型数据的向量化:TF-IDF
Word2vec原理及其Python实现「建议收藏」
在NLP(自然语言处理)里面,最细粒度的是词语,词语组成句子,句子再组成段落、篇章、文档。所以要处理 NLP 的问题,首先就要拿词语开刀。
全栈程序员站长
2022/08/30
3.7K0
Word2vec原理及其Python实现「建议收藏」
NLP: Word Embedding 词嵌入(Part1: 基础和 Word2Vec)
例如:[1, 0, 0, 0, 0, 0, 0, 0, 0, 0] 这个 one-dimension vector 就代表这是整个句子里的第一个词
JiahuiZhu1998
2022/11/27
1.2K0
词向量技术 | 从word2vec到ELMo
"词和句子的嵌入已成为所有基于深度学习的自然语言处理(NLP)系统的重要组成部分,它们在固定长度的稠密向量中编码单词和句子,以大幅度提高神经网络处理文本数据的能力。"
用户1332428
2018/08/17
2.5K0
词向量技术 | 从word2vec到ELMo
用gensim学习word2vec
    在word2vec原理篇中,我们对word2vec的两种模型CBOW和Skip-Gram,以及两种解法Hierarchical Softmax和Negative Sampling做了总结。这里我们就从实践的角度,使用gensim来学习word2vec。
刘建平Pinard
2018/08/07
1.6K0
word2vec原理与Gensim使用[通俗易懂]
与NNLM相比,word2vec的主要目的是生成词向量而不是语言模型,在CBOW中,投射层将词向量直接相加而不是拼接起来,并舍弃了隐层,这些牺牲都是为了减少计算量。不经过优化的CBOW和Skip-gram中 ,在每个样本中每个词的训练过程都要遍历整个词汇表,也就是都需要经过softmax归一化,计算误差向量和梯度以更新两个词向量矩阵(这两个词向量矩阵实际上就是最终的词向量,可认为初始化不一样),当语料库规模变大、词汇表增长时,训练变得不切实际。为了解决这个问题,word2vec支持两种优化方法:hierarchical softmax 和negative sampling。
全栈程序员站长
2022/08/29
1.6K0
word2vec原理与Gensim使用[通俗易懂]
NLP从词袋到Word2Vec的文本表示
在NLP(自然语言处理)领域,文本表示是第一步,也是很重要的一步,通俗来说就是把人类的语言符号转化为机器能够进行计算的数字,因为普通的文本语言机器是看不懂的,必须通过转化来表征对应文本。早期是基于规则的方法进行转化,而现代的方法是基于统计机器学习的方法。
mantch
2019/07/30
1.4K0
NLP从词袋到Word2Vec的文本表示
博客 | Word2Vec 学习心得
好嘛博主食言了。不过本文没什么干货,主要是前后看了大概一个星期,反复去读源码和解读文章,终于感觉这东西不那么云山雾罩了。同时也发现网上很多材料有点扯淡,99% 的博文不过是把别人的东西用自己的话说一下,人云亦云。好多人自己理解错了而不自知,实在是误人误己。
AI研习社
2018/08/16
5500
【算法】word2vec与doc2vec模型
小编邀请您,先思考: 1 word2vec算法原理是什么? 2 word2vec与doc2vec有什么差异? 3 如何做word2vec和doc2vec? 深度学习掀开了机器学习的新篇章,目前深度学习应用于图像和语音已经产生了突破性的研究进展。深度学习一直被人们推崇为一种类似于人脑结构的人工智能算法,那为什么深度学习在语义分析领域仍然没有实质性的进展呢?   引用三年前一位网友的话来讲:   “Steve Renals算了一下icassp录取文章题目中包含deep learning的数量,发现有44篇,而n
陆勤_数据人网
2018/03/20
2.2K0
【算法】word2vec与doc2vec模型
Kaggle word2vec NLP 教程 第三部分:词向量的更多乐趣
现在我们有了训练好的模型,对单词有一些语义理解,我们应该如何使用它? 如果你看它的背后,第 2 部分训练的 Word2Vec 模型由词汇表中每个单词的特征向量组成,存储在一个名为syn0的numpy数组中:
ApacheCN_飞龙
2022/12/02
5240
一文详解 Word2vec 之 Skip-Gram 模型(结构篇)
这次的分享主要是对Word2Vec模型的两篇英文文档的翻译、理解和整合,这两篇英文文档都是介绍Word2Vec中的Skip-Gram模型。下一篇专栏文章将会用TensorFlow实现基础版Word2Vec的skip-gram模型,所以本篇文章先做一个理论铺垫。 原文英文文档请参考链接: - Word2Vec Tutorial - The Skip-Gram Model http://t.cn/Rc5RfJ2 - Word2Vec (Part 1): NLP With Deep Learning with T
AI研习社
2018/03/19
3.2K0
一文详解 Word2vec 之 Skip-Gram 模型(结构篇)
Word2Vec原理简单解析
词的向量化就是将自然语言中的词语映射成是一个实数向量,用于对自然语言建模,比如进行情感分析、语义分析等自然语言处理任务。下面介绍比较主流的两种词语向量化的方式:
全栈程序员站长
2022/08/27
1.4K0
Word2Vec原理简单解析
白话词嵌入:从计数向量到Word2Vec
答案是——“文本处理”。上面三个场景通过处理海量文本,完成了三个不同的任务:聚类、分类和机器翻译。
SeanCheney
2019/09/18
1.1K0
白话词嵌入:从计数向量到Word2Vec
Python人工智能 | 二十一.CNN和Word2Vec中文文本分类详解及与机器学习分类对比
从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前一篇文章分享了Keras实现RNN和LSTM的文本分类算法,并与传统的机器学习分类算法进行对比实验。这篇文章我们将继续巩固文本分类知识,主要讲解CNN实现中文文本分类的过程,并与贝叶斯、决策树、逻辑回归、随机森林、KNN、SVM等分类算法进行对比。注意,本文以代码为主,文本分类叙述及算法原理推荐阅读前面的文章。基础性文章,希望对您喜欢~
Eastmount
2023/02/28
3.3K0
Python人工智能 | 二十一.CNN和Word2Vec中文文本分类详解及与机器学习分类对比
相关推荐
【NLP】Word2Vec详解(含数学推导)
更多 >
加入讨论
的问答专区 >
1技术专家擅长2个领域
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档