word2vec中的generate_batch理解

先是各个参数。batch_size:训练数据一个输入多少个批次;skip_window:窗口大小,有点类似于滑动窗口;num_skips:一个词语产生多少个label,若为1,则取该词左边或右边当作1个label,若为2,则可取该词左右两边形成两个label。如下图,skip_window=1,num_skips=2的图如下所示,句首ID前补0,每一个单词具备左右两个词作为其label。

一、先是变量的定义

def generate_batch(batch_size, num_skips, skip_window):
  global data_index
  assert batch_size % num_skips == 0
  assert num_skips <= 2 * skip_window
  batch = np.ndarray(shape=(batch_size/num_skips), dtype=np.int32)
  labels = np.ndarray(shape=(batch_size), dtype=np.int32)
  span = 2 * skip_window + 1 # [ skip_window target skip_window ]
  buffer = collections.deque(maxlen=span)

二、向队列中写入初始化数据

  for _ in range(span):
    buffer.append(data[data_index])
    data_index = (data_index + 1) % len(data)

三、这里有两个循环,外层循环定义目标标签target在队列中心,目标标签不能取的值放进targets_to_avoid列表中。内层循环开始为skip_window(队列中心)找目标标签(一共有num_skips个),首先通过while循环窗口中找寻目标标签,排除skip_window和已经取过的值,找到后将该值添入targets_to_avoid列表中,最后将队列的值填入batch和labels中,并更新队列中的值。

 

tf.reduce_mean(tf.nn.sampled_softmax_loss())遇到Dimensions must be equal, but are 1 and 128 for 'sampled_softmax_loss/MatMul' (op: 'MatMul') with input shapes: [128,1], [64,128]问题时,参照https://stackoverflow.com/questions/46516168/word2vec-tutorial-tensorflow-typeerror-input-y-of-mul-op-has-type-float32解决方案,调换第三个、四个参数位置。

 

参考:

1.https://www.jianshu.com/p/f682066f0586

2.https://github.com/eecrazy/word2vec_chinese_annotation/blob/master/cbow.py

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值