英文词向量转换_词嵌入

  • Post author:
  • Post category:其他


当代码出现问题的时候参考的文章

  • 处理下载的数据集
  • Python3异常-AttributeError: module ‘sys’ has no attribute ‘setdefaultencoding’
  • 通过搜狗新闻语料用word2Vec训练中文模型
  • 代码存放仓库

1、在RNN中词使用one_hot表示的问题(使用词嵌入的意义)

c764a9f71570257e650761653bbaa152.png
  • 假设有10000个词

    • 每个词的向量长度都为10000,整体大小太大
  • 没能表示出词与词之间的关系

    • 例如Apple与Orange会更近一些,Man与Woman会近一些,取任意两个向量计算内积都为0

2、词嵌入

定义:指把一个维数为所有词的数量的高维空间

嵌入到一个维数低得多的连续向量空间中

,每个单词或词组被映射为实数域上的向量。

注:这个维数通常不定,不同实现算法指定维度都不一样,通常在30~500之间。

如下图所示:

5ea84f59f3ec1d988f6e982019590e80.png

增加维度的说明:

6cac20d9bb07d11c9022e9cd15a4fca4.png

2.1 特点

  • 能够体现出词与词之间的关系

    • 比如说我们用Man – Woman,或者Apple – Orange,都能得到一个向量
  • 能够得到相似词,例如Man – Woman = King – ?

    • ? = Queen
dbc34a8f6a4e6de63d339679da10af03.png

计算说明:

c2960a4c2a2f1b6021c179e824bc3b06.png

2.2 算法类别

Bengio等人在一系列论文中使用了神经概率语言模型使机器“习得词语的分布式表示。

2013年,谷歌托马斯·米科洛维(Tomas Mikolov)领导的团队发明了一套工具word2vec来进行词嵌入。

  • skip-gram

算法学习实现:https://www.tensorflow.org/tutorials/representation/word2vec

  • CBow

下载gensim库

pip install gensim

4.3 Word2Vec案例

4.3.1 训练语料

由于语料比较大,就提供了一个下载地址:http://www.sogou.com/labs/resource/cs.php

  • 搜狗新闻中文语料(2.7G)
  • 做中文分词处理之后的结果
  • 下载下来的语料需要进行一些处理请参考通过搜狗新闻语料用word2Vec训练中文模型

4.3.2 步骤

  • 1、训练模型
  • 2、测试模型结果

4.3.3 代码

  • 训练模型API

    • from gensim import Word2Vec
    • Word2Vec(LineSentence(inp), size=400, window=5, min_count=5)

      • LineSentence(inp):把word2vec训练模型的磁盘存储文件
      • 转换成所需要的格式,如:[[“sentence1”],[”sentence1”]]
      • size:是每个词的向量维度
      • window:是词向量训练时的上下文扫描窗口大小,窗口为5就是考虑前5个词和后5个词
      • min-count:设置最低频率,默认是5,如果一个词语在文档中出现的次数小于5,那么就会丢弃
      • 方法:

        • inp:分词后的文本
        • save(outp1):保存模型

trainword2vec.py训练的代码如下

if len(sys.argv) < 3:
        sys.exit(1)

    # inp表示语料库(分词),outp:模型
    inp, outp = sys.argv[1:3]

    model = Word2Vec(LineSentence(inp), size=400, window=5, min_count=5, workers=multiprocessing.cpu_count())

    model.save(outp)


import sys
import multiprocessing

from gensim.models import Word2Vec
from gensim.models.word2vec import LineSentence

if __name__ == '__main__':

    if len(sys.argv) < 3:
        sys.exit(1)

    # inp表示语料库(分词),outp:模型
    inp, outp = sys.argv[1:3]

    model = Word2Vec(LineSentence(inp), size=400, window=5, min_count=5, workers=multiprocessing.cpu_count())

    model.save(outp)

运行命令

python trainword2vec.py ./corpus_seg.txt ./model/*

指定好分词的文件以及,保存模型的文件

  • 加载模型测试代码

    • model = gensim.models.Word2Vec.load(“*.model”)

      • model.most_similar(‘警察’)
      • model.similarity(‘男人’,’女人’)
      • most_similar(positive=[‘女人’, ‘丈夫’], negative=[‘男人’], topn=1)
06fa6c846a9aa4070b2debc2c7eed89c.png



版权声明:本文为weixin_29817863原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。