zoukankan      html  css  js  c++  java
  • word2vec 入门(二)使用教程篇

    word2vec

    要解决问题: 在神经网络中学习将word映射成连续(高维)向量,这样通过训练,就可以把对文本内容的处理简化为K维向量空间中向量运算,而向量空间上的相似度可以用来表示文本语义上的相似度。

    一般来说, word2vec输出的词向量可以被用来做很多 NLP 相关的工作,比如聚类、找同义词、词性分析等等。另外还有其向量的加法组合算法。官网上的例子是 :

    vector('Paris') - vector('France') +
    vector('Italy') ≈vector('Rome'), vector('king') - vector('man') + vector('woman') ≈
    vector('queen')

    但其实word2vec也只是少量的例子完美符合这种加减法操作,并不是所有的 case 都满足。

    快速入门

    1、从http://word2vec.googlecode.com/svn/trunk/ 下载所有相关代码:
    一种方式是使用svn Checkout,可加代理进行check。
    另一种就是export to github,然后再github上下载,我选择第二种方式下载。

    2、运行make编译word2vec工具:(如果其中makefile文件后有.txt后缀,将其去掉)在当前目录下执行make进行编译,生成可执行文件(编译过程中报出很出Warning,暂且不管);

    3、运行示例脚本:./demo-word.sh 看一下./demo-word.sh的内容,大致执行了3步操作

    • 从http://mattmahoney.net/dc/text8.zip 下载了一个文件text8 ( 一个解压后不到100M的txt文件,可自己下载并解压放到同级目录下);
    • 使用文件text8进行训练,训练过程比较长;
    • 执行word2vec生成词向量到 vectors.bin文件中,(速度比较快,几分钟的事情)

    在demo-word.sh中有如下命令

    运行结果如图:

    time ./word2vec -train text8 -output vectors.bin -cbow 1 -size 200 -window 8 -negative 0 -hs 1 -sample 1e-4 -threads 20 -binary 1 -iter 15
    

    以上命令

    -train text8 表示的是输入文件是text8
    
    -output vectors.bin 输出文件是vectors.bin
    
    -cbow 1 表示使用cbow模型,默认为Skip-Gram模型
    
    -size 200 每个单词的向量维度是200
    
    -window 8 训练的窗口大小为5就是考虑一个词前八个和后八个词语(实际代码中还有一个随机选窗口的过程,窗口大小小于等于8)
    
    -negative 0 -hs 1不使用NEG方法,使用HS方法。-
    
    sampe指的是采样的阈值,如果一个词语在训练样本中出现的频率越大,那么就越会被采样。
    
    -binary为1指的是结果二进制存储,为0是普通存储(普通存储的时候是可以打开看到词语和对应的向量的)
    
    -iter 15 迭代次数
    

    demo-word.sh中最后一行命令是./distance vectors.bin

    该命令是计算距离的命令,可计算与每个词最接近的词了:

    word2vec还有几个参数对我们比较有用比如-alpha设置学习速率,默认的为0.025. –min-count设置最低频率,默认是5,如果一个词语在文档中出现的次数小于5,那么就会丢弃。-classes设置聚类个数,看了一下源码用的是k-means聚类的方法。要注意-threads 20 线程数也会对结果产生影响。

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

    4、运行命令 ./demo-phrases.sh:查看该脚本内容,主要执行以下步骤:

    最后一行命令./distance vectors-phrase.bin,一个计算word相似度的demo中去,结果如下:

    结果好坏跟训练词库有关。

    番外:
    如果需要中文语料库,推荐使用维基的或者搜狗(http://www.sogou.com/labs/dl/ca.html),中文分词可使用结巴分词,我觉得很好用。然后进行训练,因为英文不用分词,所以上述过程不涉及分词。

    本文主要偏应用,讲解一个例子,便于对word2vec有一个初步了解,后续再更原理。

  • 相关阅读:
    heartbeat 心跳技术
    国产数据库有哪些?
    Redis(1.9)Redis主从复制
    Redis(1.8)Redis与mysql的数据库同步(缓存穿透与缓存雪崩)
    分布式系统/NoSQL
    Redis(1.7)Redis高可用架构与数据库交互(理论篇)
    Redis(1.6)Redis发布订阅
    Redis(1.5)Redis配置文件(4.0.14)
    (5.3.4)数据库迁移——数据对比(结构、数据类型)
    【基本优化实践】【1.5】如何在线稳定的删除/更新大量数据?
  • 原文地址:https://www.cnblogs.com/tina-smile/p/5178549.html
Copyright © 2011-2022 走看看