`

Google开源基于Deep Learning的word2vec工具

 
阅读更多

转自:http://www.csdn.net/article/2013-08-20/2816643-word2vec

word2vec(word to vector)顾名思义,这是一个将单词转换成向量形式的工具。通过转换,可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度。

word2vec为计算向量词提供了一种有效的连续词袋(bag-of-words)和skip-gram架构实现,word2vec遵循Apache License 2.0开源协议。

 

如何转换?

word2vec主要是将文本语料库转换成词向量。它会先从训练文本数据中构建一个词汇,然后获取向量表示词,由此产生的词向量可以作为某项功能用在许多自然语言处理和机器学习应用中。

在举例子之前,引入余弦距离(Cosine distance)这个概念(摘自维基百科):

通过测量两个向量内积空间的夹角的余弦值来度量它们之间的相似性。0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1。从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向。两个向量有相同的指向时,余弦相似度的值为1;两个向量夹角为90°时,余弦相似度的值为0;两个向量指向完全相反的方向时,余弦相似度的值为-1。在比较过程中,向量的规模大小不予考虑,仅仅考虑到向量的指向方向。余弦相似度通常用于两个向量的夹角小于90°之内,因此余弦相似度的值为0到1之间。

然后可以通过distance工具根据转换后的向量计算出余弦距离,来表示向量(词语)的相似度。例如,你输入“france”,distance工具会计算并显示与“france”距离最相近的词,如下:

 

 

              Word             Cosine distance
      -------------------------------------------
                spain              0.678515
              belgium              0.665923
          netherlands              0.652428
                italy              0.633130
          switzerland              0.622323
           luxembourg              0.610033
             portugal              0.577154
               russia              0.571507
              germany              0.563291
            catalonia              0.534176

在word2vec中主要有两种学习算法:连续词袋和连续skip-gram,switch-cbow允许用户选择学习算法。这两种算法有助于预测其它句子的词汇。

 

从词转换到句子或更长的文本

在一些特定的应用程序中,它还可以用于多个词汇,例如,“san francisco”,这样它就会通过预先处理数据集,让其形成句子,找到与“san francisco”余弦距离最近的内容:

 

              Word          Cosine distance
-------------------------------------------
          los_angeles              0.666175
          golden_gate              0.571522
              oakland              0.557521
           california              0.554623
            san_diego              0.534939
             pasadena              0.519115
              seattle              0.512098
                taiko              0.507570
              houston              0.499762
     chicago_illinois              0.491598

如何衡量词向量质量

 

可能影响到词向量质量的几个因素:

 

  • 训练数据的数量和质量
  • 向量的大小
  • 训练算法

 

向量的质量对任何一个应用程序都非常重要,然而,根据复杂的任务来探索不同的超参数设置可能会过于苛刻。因此,我们设计了简单的测试集,来快速评估矢量词的质量。

词聚类(Word clustering)

词向量也可以从巨大的数据集中导出词类,通过执行词向量顶部的K-means聚类即可实现,脚本演示地址:./demo-classes.sh,最后输出的是一个词汇表文件和与之对应的类ID标识,例如:

 

carnivores 234
carnivorous 234
cetaceans 234
cormorant 234
coyotes 234
crocodile 234
crocodiles 234
crustaceans 234
cultivated 234
danios 234
.
.
.
acceptance 412
argue 412
argues 412
arguing 412
argument 412
arguments 412
belief 412
believe 412
challenge 412
claim 412

性能

 

在多核CPU上(使用开关‘-threads N’),通过使用并行训练可以显著提高训练速度,超参数选择对性能也至关重要(包括速度和准确率),主要选择有:

 

  • 架构:skip-gram(慢、对罕见字有利)vs CBOW(快)
  • 训练算法:分层softmax(对罕见字有利)vs 负采样(对常见词和低纬向量有利)
  • 欠采样频繁词:可以提高结果的准确性和速度(适用范围1e-3到1e-5)
  • 维度词向量:通常情况下表现都很好
  • 文本(window)大小:skip-gram通常在10附近,CBOW通常在5附近

 

去哪里收集训练数据

随着训练数据的增加,词向量质量也显著提升,如果以研究为目的的,可以考虑线上数据集:

 

 

快速入门

 

  1. 代码下载:http://word2vec.googlecode.com/svn/trunk/
  2. 运行“make”编译word2vec工具
  3. 运行demo脚本:./demo-word.sh and ./demo-phrases.sh

 

关于word2vec更多介绍,大家可以阅读:https://code.google.com/p/word2vec/

分享到:
评论

相关推荐

    deep learning:word2vec

    标题“deep learning:word2vec”提到了深度学习领域的一个关键概念——Word2vec。Word2vec是一种广泛应用于自然语言处理(NLP)的算法,它通过训练神经网络来生成词向量,即用数值向量表示单词,以便计算机可以理解...

    Deep Learning 实战之 word2vec.pdf

    Deep Learning与word2vec的关系 - 虽然word2vec常被视为深度学习模型,但其本身是一个层次较浅的神经网络模型。 - 深层模型通常需要在word2vec上额外添加输出层,例如Softmax层。 #### 3. word2vec的高效性 - word...

    Deep Learning 实战之 Word2Vec

    但后来听说Google开源的word2vec还挺有意思,能够把词映射到K维向量空间,甚至词与词之间 的向量操作还能和语义相对应。如果换个思路,把词当做feature,那么word2vec就可以把feature映射到K维向量空间,应该可以为...

    java版本的word2vec

    Java版本的Word2Vec是一种基于Java编程语言实现的文本向量化工具,它是自然语言处理(NLP)领域中广泛使用的模型,主要用于捕获文本中的语义关系和上下文信息。Word2Vec通过两种主要的训练算法来实现这个目标:连续...

    Deep Learning实战之word2vec

    但后来听说Google开源的word2vec还挺有意思,能够把词映射到K维向量空间,甚至词与词之间 的向量操作还能和语义相对应。如果换个思路,把词当做feature,那么word2vec就可以把feature映射到K维向量空间,应该可以为...

    Word2Vec java版实现

    Deeplearning4j是一个开源的深度学习库,它提供了Word2Vec的训练和应用API。 - `Word2VEC_java-master`可能包含一个完整的项目结构,包括源代码、示例数据和测试用例。通常,项目会包含训练模型的类,如`Word2...

    Deep Learning 实战之 word2vec

    word2vec是一种由Google开发并开源的工具,其目的是将词语映射为K维向量空间中的实数值向量。word2vec工具采用的模型主要包含CBOW(连续词袋模型)和Skip-Gram两种。word2vec将词语转换为数值型向量的表示,这种表示...

    Deep learning实战之word2vec

    在本文中,将详细介绍Deep Learning实战中word2vec的知识点,内容涵盖了word2vec的基础概念、快速入门、背景知识、模型架构、技巧优化以及分布式实现等多个方面,非常适合对自然语言处理(NLP)和深度学习感兴趣的...

    Deep Learning实战之word2vec.pdf

    word2vec是一种开源工具,由Google在2013年中旬发布,它能够高效地将词语转换为实数向量。该工具采用的模型主要有两种,即CBOW(Continuous Bag-Of-Words)和Skip-Gram。word2vec遵循Apache License 2.0开源协议,...

    Word2Vec-master_java_word2vec_meanssn7_

    在Java实现的Word2Vec中,开发者通常会使用开源库如Mikolov的"FastText"或"Deeplearning4j"的Word2Vec API。这些库提供了训练模型、保存和加载模型、进行相似度查询等功能。Java作为面向对象的编程语言,使得代码...

    Deep Learning 实战之 Word2vec

    Word2vec是Google在2013年开源的一款高效工具,旨在将词语表示为实数值向量。它的出现推动了自然语言处理(NLP)技术的发展,特别是在将词语映射到向量空间后,这些向量能够用于捕捉语义上的相似度,为后续的NLP任务...

    基于deeplearning4j深度学习框架实现的价格预测,语义分析,文本分类等场景的代码.zip

    《基于DeepLearning4J的深度学习实践:价格预测、语义分析与文本分类》 深度学习作为人工智能领域的重要分支,已经在多个应用场景中展现出强大的能力,包括图像识别、语音处理、自然语言理解和预测模型等。本项目以...

    Java Deep Learning Essentials

    在 Java 中,可以通过 Deeplearning4j 来构建相应的模型,并使用预训练的词嵌入(如 Word2Vec)来表示文本。 - **序列预测**:对于时间序列预测任务,可以采用 RNN 或 LSTM 结构来捕捉序列中的长期依赖关系。在 Java...

    pujangga:Pujangga-具有REST API,InaNLP和Deeplearning4j的Word2Vec的接口的印尼自然语言处理工具

    "Pujangga" 是一个专门为印尼语(Bahasa Indonesia)设计的自然语言处理工具,它结合了REST API、InaNLP库以及Deeplearning4j库中的Word2Vec模型,为开发者和研究人员提供了高效且方便的NLP服务。这个工具的创建旨在...

    谷歌师兄的leetcode刷题笔记-scout-word2vec-demo:带有EclipseScout和Deeplearning4j的Wor

    Deeplearning4j 的 Word2vec 演示 先决条件 该演示预计GoogleNews-vectors-negative300.bin.gz文件可在C:\eclipse\data 中使用。 这个 word2vec 模型可在线获得。 两个位置见以下链接 示例建议 词簇 巧克力 寿司 ...

    deeplearning-with-pytorch

    例如,我们可以使用torchtext构建词嵌入模型,如Word2Vec或GloVe,然后用这些嵌入作为输入训练LSTM进行文本分类或情感分析。同时,PyTorch还支持Transformer模型,这对于现代的NLP任务如机器翻译和生成式对话系统至...

    word2vec词向量训练及中文文本相似度计算

    Word2vec是Google公司在2013年开源的一款用于训练词向量的软件工具,是最新技术理论的合集。Word2vec可以计算某一个上下文的下一个词为wi的概率,词向量是其训练的副产物。Word2vec的出现,将DeepLearning算法引入了...

    使用带有Deeplearning4j的长短期记忆(LSTM)神经网络进行垃圾邮件检测

    Deeplearning4j是开源的Java和Scala库,用于构建深度学习模型。它提供了一个易于使用的接口,使得开发人员能够方便地在Java或Scala环境中搭建和训练深度学习网络,包括LSTM。 Deeplearning4j支持多种硬件平台,包括...

Global site tag (gtag.js) - Google Analytics