embedding词向量的使用

embedding词向量的使用

什么是PyTorch?

PyTorch是一个基于Python的科学计算库,它有以下特点:

  • 类似于NumPy,但是它可以使用GPU
  • 可以用它定义深度学习模型,可以灵活地进行深度学习模型的训练和使用

Tensors(高维的矩阵就是Tensor)

Tensor类似与NumPy的ndarray,唯一的区别是Tensor可以在GPU上加速运算。

在这里插入图片描述这个是两层的神经网络,分别是1000维,100维,10维。h是中间神经元的个数。

pytorch基本上做的事情:

  • 定义输入输出
  • 定义模型
  • 拿到模型,定义一个loss function
  • 把model交给optimizer做优化
  • 进入训练,不停地拿训练数据x预测y,并计算loss,计算backward pass
  • 优化

学习词向量的概念

1,词典表示: 词典包含10个单词,每个单词有唯一索引

缺点: 在词典中的顺序和在句子中的顺序没有关联

2,one-hot表示: 和词典表示没有任何区别,只是把数字表示变成用向量表示而已。所以如果有个五万词语的词典,就会有五万维的向量。

缺点: 和词典也是一样的问题。

3 ,Bag of Words 词袋

可以将每个单词出现了多少次加入向量。文档的向量表示可以直接将各词的词向量表示加和甚至可以加入词权重 TF-IDF&Binat weighting

在这里插入图片描述缺点: 但是单词的顺序和语义信息也没有被考虑。

4,Bi-gram & N-gram 将多个单词拼成多个单词再加入单词表

缺点: 数据稀疏问题,很难捕捉文本的含义

词表维度随着语料库增长迅速膨胀

而且还是没有解决最根本的问题:无法衡量词向量之间的关系

词编码需要保证词的相似性!最终词向量表示需要作为深度学习的输入和表示空间!

5 ,分布式表示:用一个词附近的词语来表示这个单词

  • Word2Vec: Skip-Gram模型 用中心词表示周围词
    在这里插入图片描述Skip-gram模型应用这个假想:用一个词附近的词语来表示这个单词。

目标函数:

在这里插入图片描述概率密度:
分数越高同时出现的概率越大

在这里插入图片描述Skip-gram的损失函数: 但是非常慢

在这里插入图片描述

Embedding

词嵌入在 pytorch 中非常简单,只需要调用 torch.nn.Embedding(m, n) 就可以了,m 表示单词的总数目,n 表示词嵌入的维度,其实词嵌入就相当于是一个大矩阵,矩阵的每一行表示一个单词。

emdedding初始化

默认是随机初始化的

import torch
from torch import nn
from torch.autograd import Variable
# 定义词嵌入
embeds = nn.Embedding(2, 5) # 2 个单词,维度 5
# 得到词嵌入矩阵,开始是随机初始化的
torch.manual_seed(1)
embeds.weight
# 输出结果:
Parameter containing:
-0.8923 -0.0583 -0.1955 -0.9656  0.4224
 0.2673 -0.4212 -0.5107 -1.5727 -0.1232
[torch.FloatTensor of size 2x5]

如果从使用已经训练好的词向量,则采用

pretrained_weight = np.array(args.pretrained_weight)  
# 已有词向量的numpy
self.embed.weight.data.copy_(torch.from_numpy(pretrained_weight))

embed的读取

读取一个向量。
注意参数只能是LongTensor型的

# 访问第 50 个词的词向量
embeds = nn.Embedding(100, 10)
embeds(Variable(torch.LongTensor([50])))
# 输出:
Variable containing:
0.6353  1.0526  1.2452 -1.8745 -0.1069  0.1979  0.4298 -0.3652 -0.7078  0.2642
[torch.FloatTensor of size 1x10]

读取多个向量
输入为两个维度(batch的大小,每个batch的单词个数),输出则在两个维度上加上词向量的大小。

  • Input: LongTensor (N, W), N = mini-batch, W = number of indices to
    extract per mini-batch

  • Output: (N, W, embedding_dim)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 词向量(Word Embedding)是一种将文本中的单词转化为数字向量的方法。通常情况下,每个单词都会被表示为一个固定维度的向量,这些向量可以用来表示单词的语义(semantic meaning)。 例如,假设我们有一个简单的文本数据集,包含以下几个句子: - "The cat sat on the mat." - "The dog chased the cat." 我们可以使用一个已经预训练好的词向量模型,来为这个文本数据集中的每个单词生成一个向量。比如,我们可以将 "cat" 这个单词表示为一个 50 维的向量,"dog" 这个单词表示为另外一个 50 维的向量。 下面是一个使用 Python 代码展示如何使用 Gensim 这个库来训练一个词向量模型的例子: ``` import gensim # 加载文本数据 sentences = [["cat", "sat", "on", "the", "mat"], ["dog", "chased", "cat"]] # 训练词向量模型 model = gensim.models.Word2Vec(sentences, size=50, min_count=1) # 获取 "cat" 这个单词的词向量 cat_vector = model["cat"] ``` 在这个例子中,我们使用 Gensim 这个库中的 Word2Vec 类来训练一个词向量模型。我们将文本数据作为输入,并指定每个单词的词向量维度为 50。然后,我们可以使用 model ### 回答2: 词向量是自然语言处理中的一种常用技术,用于将文本转化为数值化的向量表示。Python中有许多开源工具库可以用来生成和使用词向量,比如Gensim、spaCy和TensorFlow等。 以下是使用Gensim库生成词向量的示例代码: ```python from gensim.models import Word2Vec # 语料库,可以是一个列表,每个元素是一个句子或一个文档 corpus = [['我', '喜欢', '学习'], ['学习', '使我', '快乐'], ['我', '很喜欢', '编程']] # 训练词向量模型 model = Word2Vec(corpus, size=100, window=5, min_count=1) # 获取某个单词的词向量 vector = model.wv['学习'] print(vector) # 寻找与某个单词最相似的词语 similar_words = model.wv.most_similar('喜欢') print(similar_words) ``` 上述代码创建了一个简单的语料库,其中包含三个句子。然后使用Word2Vec模型训练这个语料库,设置词向量的维度为100,窗口大小为5,最小计数设为1。 接着,我们可以通过`model.wv`来访问模型中的词向量。通过`model.wv['学习']`可以获取单词"学习"的词向量。 还可以使用`model.wv.most_similar('喜欢')`来寻找与单词"喜欢"最相似的词语。 词向量模型的训练和使用可以根据具体任务的需求进行调整。通过学习并利用词向量,我们可以更好地处理文本数据,例如文本分类、信息检索和机器翻译等任务。 ### 回答3: 词向量是将词语表示为数值向量的一种方式,可以用于自然语言处理任务,如语义相似度计算、情感分析等。下面是使用Python代码举例说明词向量的过程: 假设我们有一个包含多个句子的文本数据,并已经对文本进行了分词处理。首先,我们需要使用第三方库(如gensim或spaCy)训练一个词向量模型。这里以gensim库为例,示例如下: ```python from gensim.models import Word2Vec # 定义训练数据 sentences = [['我', '是', '中国', '人'], ['我', '爱', '中国'], ['我', '喜欢', '中国', '文化']] # 训练词向量模型 model = Word2Vec(sentences, size=100, window=5, min_count=1) # 获取某个词的词向量 word_vector = model.wv['中国'] print(word_vector) ``` 上述代码中,我们使用Word2Vec模型对提供的句子进行训练,并指定词向量的维度为100维,窗口大小为5,最小词频为1。训练完成后,我们可以通过`model.wv`获取每个词语对应的词向量。例如,获取词语"中国"的词向量并打印结果。 词向量是一个长度为100的向量,表示了词语"中国"在100维空间中的位置。可以通过计算不同词语之间的相似度,来判断它们在语义上的相关性。 词向量的应用非常广泛,例如可以使用聚类算法对词向量进行聚类,将相似词语分到一组;还可以使用词向量计算两个句子之间的相似度,用于文本匹配或推荐系统等任务。这些应用都可以通过Python代码实现,并且使用词向量可以提高文本处理任务的效果和性能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值