Word2vec:skip-gram模型+Negative Sampling(负采样)代码实现

算法原理:算法原理可以参考该链接超参数# Training Parameterslearning_rate = 0.1 batch_size = 128 num_steps = 3000000display_step = 10000eval_step = 200000# Evaluation Parametersvalid_size = 20 valid_window =...
摘要由CSDN通过智能技术生成

算法原理:

算法原理可以参考该链接

超参数

# Training Parameters
learning_rate = 0.1  
batch_size = 128	
num_steps = 3000000
display_step = 10000
eval_step = 200000
# Evaluation Parameters
valid_size = 20  
valid_window = 100 
#从词典的前100个词中随机选取20个词来验证模型
eval_words = np.random.choice(valid_window, valid_size, replace=False)
# Word2Vec Parameters
embedding_size = 200  
max_vocabulary_size = 50000  
min_occurrence = 10  # 词典中词出现的最低次数
skip_window = 3  # 窗口大小
num_skips = 2  # 每个输入中心词在其上下文区间中选取num_skips个词来生成样本
num_sampled = 64  # Number of negative examples

解释:

  • 我们模型的验证是:计算于eval_words数组中的词最近似的几个词

词典生成模块

def make_vocabulary(data):
	"""
	data:是一个一维的list,每个元素可以是单个字也可以是切词后的词
	data是我们将句子切词后再拼接生成的(如果以字为单位不用切词直接拼接)
	"""
    word2count = [('UNK', -1)]
    #统计语言库词的次数
    word2count.extend(collections.Counter("".join(data)).most_common(max_vocabulary_size - 1))
	#去掉出现次数比较少的词
    for i in range(len(word2count) - 1, -1, -1):
        if word2count[i][1] < min_occurrence:
            word2count.pop(i)
        else:
            break

    vocabulary_size = len(word2count)
	
    word2id = dict()
    for i, (word, _) in enumerate(word2count):
        word2id[word] = i
	#将data中的词转化为其对应索引ID
    data_id = list()
    unk_count = 0
    for word in data:
        index = word2id.get(word, 0)
        if index == 0:
            unk_count += 1
        data_id.append(index)
    word2count[0] = ('UNK', unk_count)
  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值