词嵌入向量生成

词嵌入向量生成

  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
    
LangChain通常是指一种基于Transformer架构的语言模型,例如Hugging Face的transformers库中的`T5ForConditionalGeneration`或`GPT-Neo`这样的大模型系列。这些模型能够通过条件自回归的方式生成文本,其中包括词嵌入向量。 首先,生成词嵌入向量的过程大致分为以下几个步骤: 1. **加载预训练模型**: 从Hugging Face Model Hub下载并加载预先训练好的LangChain模型,如`t5-small`、`gpt2-xl`等,它会包含预训练的词嵌入矩阵,这个矩阵是模型参数的一部分,用于将单词映射到连续的向量空间: ```python from transformers import T5Tokenizer, T5ForConditionalGeneration model_name = "t5-small" tokenizer = T5Tokenizer.from_pretrained(model_name) model = T5ForConditionalGeneration.from_pretrained(model_name) ``` 2. **词嵌入**: 当输入一个词语时,使用tokenizer将词语转化为词索引,然后模型会自动计算出相应的词嵌入向量: ```python input_text = "生成一个词向量" inputs = tokenizer(input_text, return_tensors="pt") # Convert to model's tensor format word_embeddings = model.model.shared(inputs["input_ids"]) # 获取词嵌入 ``` 3. **生成向量序列**: 如果你想生成整个句子的词嵌入序列,可以使用model的`generate`方法结合循环,每次取前几个词作为条件,生成下一个词的词嵌入: ```python generated_sequence = [] sequence_so_far = tokenizer.encode(input_text, add_special_tokens=False) while len(sequence_so_far) < max_length: output = model.generate( sequence_so_far, num_return_sequences=1, no_repeat_ngram_size=2, min_length=1, max_length=max_length ) next_word = tokenizer.decode(output[0], skip_special_tokens=True) generated_sequence.append(next_word) sequence_so_far += tokenizer.encode(next_word, add_special_tokens=False) generated_sequence = ' '.join(generated_sequence) ``` 注意,这里的`max_length`是你想要生成的词数上限,而`no_repeat_ngram_size`用于避免生成重复的n-gram。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

路过的风666

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

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

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

打赏作者

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

抵扣说明:

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

余额充值