词嵌入向量生成

词嵌入向量生成

  1. 写出每个单词的one-hot encoding

    import numpy as np
    X = np.eye(5)
    words = ['quick','fox','dog','lazy','brown']
    for i in range(5):
        print(words[i],"的one-hot编码:",X[i])
    
    quick 的one-hot编码: [1. 0. 0. 0. 0.]
    fox 的one-hot编码: [0. 1. 0. 0. 0.]
    dog 的one-hot编码: [0. 0. 1. 0. 0.]
    lazy 的one-hot编码: [0. 0. 0. 1. 0.]
    brown 的one-hot编码: [0. 0. 0. 0. 1.]
    
  2. 随机初始化需要训练的参数矩阵W,其中W的维度大小为5x2,分别计算quick、fox、dog在嵌入空间中的embedding向量。

    from gensim.test.utils import common_texts, get_tmpfile
    from gensim.models import Word2Vec
    
    sentences = [['quick','brown'],['quick','fox'],['lazy','dog']]
    epochs = 20
    word_dim = 2 
    negative = 1
    # word2vec对象创建并训练
    model = Word2Vec(vector_size=word_dim, window=5, min_count=1, workers=8, negative=negative)
    model.build_vocab(sentences)
    
    # 得到每个单词在嵌入空间中的embedding向量
    for i,vec in enumerate([model.wv.get_vector(i) for i in words]):
        print(words[i]+': '+str(vec))
    
    quick: [-0.02681136  0.01182151]
    fox: [0.32294357 0.4486494 ]
    dog: [0.25516748 0.45046365]
    lazy: [-0.4651475  -0.35584044]
    brown: [-0.2507714  -0.18816864]
    
  3. 使用python语言,画出quick、fox、dog这三个单词在二维坐标系中的点

    import matplotlib.pyplot as plt
    %matplotlib inline
    
    words = ['quick','fox','dog','lazy','brown']
    for i,vec in enumerate([model.wv.get_vector(i) for i in words]):
        plt.scatter(vec[0],vec[1])    
        plt.text(vec[0]+0.01,vec[1],words[i])
    

    LAxTtx.png

  4. 使用python语言,计算上述样本对的损失函数。

    假设目标单词是quick,正样本单词是fox,负样本是lazy (负样本的单词可以随机从单词库中选取),写出词嵌入的损失函数
    l o s s = log ⁡ σ ( v w O ′ ⊤ v w I ) + ∑ i = 1 k E w i ∼ P n ( w ) [ log ⁡ σ ( − v w i ′ ⊤ v w I ) ] loss = \log \sigma\left(v_{w_{O}}^{\prime}{ }^{\top} v_{w_{I}}\right)+\sum_{i=1}^{k} \mathbb{E}_{w_{i} \sim P_{n}(w)}\left[\log \sigma\left(-v_{w_{i}}^{\prime}{ }^{\top}v_{w_I}\right)\right] loss=logσ(vwOvwI)+i=1kEwiPn(w)[logσ(vwivwI)]

    from math import log
    def sigmoid(x):
        return 1.0/(1+np.exp(-x))
        
    words = ['quick','fox','dog','lazy','brown']
    loss = log(sigmoid(model.wv['fox'].T.dot(model.wv['quick']))) + \
           log(sigmoid(-model.wv[np.random.choice(words)].T.dot(model.wv['quick'])))  # random choice
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路过的风666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值