Tensorflow实现Word2Vec

一、Word2Vec

Word2Vec是一个可以将语言中字词转化为向量形式表达的模型。也称Word Embeddings,中文称为“词向量”。

Word2Vec也是一种计算非常高效的,可以从原始语料中学习字词空间向量的预测模型。主要有CBOW和Skip—Gram两种模式。

CBOW是从原始语句(eg:中国的首都是____)来推测目标字词(eg:北京),主要对小型数据比较合适,

Skip—Gram与CBOW想法,它是从目标字词推测出原始语句,它在大型语料中表现的更好。

二、一些相关概念

One—Hot 向量:只有一个值为1,其余都为0的向量。

假设语料库中有3000个单词,为每个词编个序号,一个词对应一个One—Hot向量(比如,中国是排号为2562,则“中国”这个词的One—Hot向量第2562个为1,其余为0),则语料库的One—Hot向量为3000维。这样构成的一个句子就变成了一个稀疏矩阵。

使用One—Hot有一个问题,就是对特征(即语料库中的词)编码是随机的,任何两个词之间是没有关联信息的。

向量表达(Vector Repressentations)可以解决这个问题。向量空间模型可以将字词转为连续值(相当于One—Hot编码的离散值)的向量表达,并且将其中意思相近的词映射到向量空间中相近的位置。

向量空间模型主要依赖的假设是相同语境中出现的词其语义也相近。

向量空间模型分为两类,一个是计数模型(统计在语料库中,相邻出现的词的频率,在把这些计数统计结果转为小而稠密的矩阵),另一个是预测模型(根据一个词周围相邻的词推测出这个词,以及它的空间向量)

三、实现(CPU)

我们这次实现的是Skip—Gram模式的Word2Vec。(代码来自Tensorflow的开源实现)

训练样本的构造,以“the quick brown fox jumped over the lazy dog“这句话为例。先构造一个语境与目标词汇的映射关系,其中语境包括一个单词左边和右边的词汇,设滑窗尺寸为1,则制造的映射关系包括[the ,  brown]指向quick、[brown, jumped] 指向fox等。数据集变成了(quick,  the)、(quick,  brown)、 (brown,quick)、(brown, fox)等。

目标:在训练时,希望模型能从目标词汇quick预测出语境the,同时也需要制造随机的词汇作为负样本(类似于噪声),我们希望预测的概率分布在正样本the熵尽可能大,而在随机产生的负样本上尽可能小。

import collections
import math
import os
import random
import zipfile
import numpy as np
import urllib
import tensorflow as tf

#定义下载文本数据的函数,这里使用urllib.request.urlretrieve下载数据的压缩文件并核对文件尺寸。
url = 'http://mattmahoney.net/dc/'

def maybe_download(filename, expected_bytes):
    if not os.path.exists(filename):
        filename, _ = urllib.request.urlretrieve(url + filename, filename)
    statinfo = os.stat(filename)
    if statinfo.st_size == expected_bytes:
        print('Found and verified', filename)
    else:
        print(statinfo.st_size)
        raise Exception
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值