首页 > 编程知识 正文

pycharm设置编译环境,pycharm怎么导入pytorch

时间:2023-05-06 16:27:46 阅读:10051 作者:2409

1、编码词法语义词的嵌入是密向量。 怎么用计算机表示单词? 存储那个ascii字符表示,但这只是表示词是什么,而不是表示它的意思(可以从后缀或大写字母中得到词类,但不太多)。 这些显示形式在什么意义上组合通常需要神经网络的紧密显示。 如何从高维空间变成低维空间?

1.1、单独热导线单独热导线的标识形式如下:

文中词的位置为1,非文中词的位置为0;

这种书写方法有两个缺点。

1 )维度大

2 )单词之间的独立

1.2、密集词的嵌入我们怎么解决这个问题? 也就是说,如何对单词中的语义相似性进行实际编码? 你可能考虑了几个语义属性。 例如,你可能看到数学家和物理学家都能执行,并对这些单词的“可行”语义属性给予了很高的评价。 请考虑其他几个属性,并想象对这些属性评分一般单词。

如果每个属性都是维,则可以为每个单词提供向量,如下所示:

接下来,通过进行以下操作,可以得到这些单词之间的相似度。

按长度标准化很常见,但如下所示

是两个向量之间的角度,极端相似的单词(嵌入了指向同一方向的单词)具有相似性1。 不极端相似的单词应具有相似性-1。 2、pytorch语言嵌入,在工作案例和开始练习之前,先简单介绍一下如何在pytorch和深度学习编程中使用嵌入。 与创建单加热向量时为每个单词定义唯一索引一样,在使用嵌入时必须为每个单词定义索引。 这些将成为查找表的关键字。 也就是说,它被嵌入存储为|V|D矩阵。 其中,d是嵌入维数,因此单词分配索引I并嵌入存储在I矩阵的第th行中。 在我所有的代码中,单词到索引的映射是一个叫做word_to_ix的词典。

可以使用嵌入模块的是torch.nn.Embedding,它有两个参数:词汇和嵌入维。

要在此表中建立索引,必须使用torch.LongTensor (因为索引是整数而不是浮点数)。

3、N-Gram语言建模回想一下。 在n元语法模型中,给出了一系列单词w。 我会计算

wi是序列的第I个词

此示例在一些训练示例中计算损耗函数,并使用反向传递更新参数。

#ngram语言模型context_size=2 #上下文大小embedding_dim=10 #词向量维test _ sentence=' ' whenfortywintersshallbesiegethyce anddigdeeptrenchesinthybeauty ' sfield,thy youth ' sproudliverysogazedonnow,willbeatotter ' dweedofsmallwortheld 3360 then beathed To say,within thine own deep sunken eyes,Were an all-eating shame, andthriftlesspraise.howmuchmorepraisedeserv ' dthybeauty ' ifthoucouldstanswer ' thisfairchildofmineshallsummycount,and makked thisweretobenewmadewhenthouartold,andseethybloodwarmwhenthoufeel ' stitc old.'.split (#构建三元组trigrams=[ [ test (] ) test _ sentence [ I2 ] (foriinrange (len (test _ sentence )-2 ) )构建词典VoCaB=set(test_ ) vocab_size,embedding_dim,vocab_size,embedding_dim self(_init_ ) ) self.embeddings=nn.embedding )

) #获取vocab_size个词向量 def forward(self,inputs): embeds=self.embeddings(inputs).view(1,-1) #定义词向量 1*(context_size*embedding_dim) #print("embeds:",embeds.size()) out=F.relu(self.lin1(embeds)) #vocab_size*embedding_dim out=self.lin2(out) #embedding_dim*128 prob=F.log_softmax(out,dim=1) #每个词的概率 return problosses=[]loss_function=nn.NLLLoss()model=Ngram(len(vocab),embedding_dim,context_size)opt=optim.SGD(model.parameters(),lr=0.001)for epoch in range(10): total_loss=0 for ctx,target in trigrams: #1、准备输入模型的三元组 #print("ctx:",ctx) ctx_ids=[] for w in ctx: ctx_ids.append(word_to_ix[w]) ctx_ids = torch.tensor(ctx_ids, dtype=torch.long) #2、梯度置0 model.zero_grad() #3、获取log_probs log_probs=model(ctx_ids) #4、计算损失函数 loss=loss_function(log_probs,torch.tensor([word_to_ix[target]], dtype=torch.long)) #5、反向传播更新梯度 loss.backward() opt.step() total_loss+=loss.item() losses.append(total_loss)print(losses) 4、词嵌入CBOW

NLP深度学习中经常使用连续词袋模型(CBOW)。在给定目标词之前和之后的几个词的上下文中,它是一种试图预测词的模型。这与语言建模不同,因为CBOW不是顺序的,并且不一定是概率性的。通常,CBOW用于快速训练单词嵌入,而这些嵌入用于初始化一些更复杂模型的嵌入。通常,这称为预训练嵌入。它几乎总是可以将性能提高百分之几。

CBOW模型如下。给定目标词wi和 N 两侧的上下文窗口 wi−1,…,wi−N和 wi+1,…,wi+N,将所有上下文词统称为 C,CBOW试图最小化


qw是单词的嵌入 w

 

#CBOW语言模型#构建上下文窗口cbows=[]context_size=2print(ctxs)for i in range(context_size,len(ctxs)-context_size): ctx=ctxs[i-context_size:i+context_size+1] ctx.pop(context_size) target=ctxs[i] cbows.append((ctx,target))print(cbows[:2]) class CBOW(nn.Module): def __init__(self,vocab_size,embedding_dim): super(CBOW,self).__init__() self.embeddings=nn.Embedding(vocab_size,embedding_dim) #定义embedding self.lin1=nn.Linear(embedding_dim,128) #定义隐含层 self.lin2=nn.Linear(128,vocab_size) #获取vocab_size个词向量 def forward(self,inputs): embeds=self.embeddings(inputs) #定义词向量 1*(context_size*embedding_dim) #print("embeds:",embeds.size()) embeds=torch.sum(embeds,0).view(1,-1) #0:按照列求和;1:按照行求和 #print("embeds:",embeds.size()) out=F.relu(self.lin1(embeds)) #vocab_size*embedding_dim out=self.lin2(out) #embedding_dim*128 prob=F.log_softmax(out,dim=1) #每个词的概率 return prob losses=[]loss_function=nn.NLLLoss()model=CBOW(len(vocab),embedding_dim)opt=optim.SGD(model.parameters(),lr=0.001)for epoch in range(10): total_loss=0 for ctx,target in cbows: #1、准备输入模型的三元组 #print("ctx:",ctx) ctx_ids=[] for w in ctx: ctx_ids.append(word_to_ix[w]) ctx_ids = torch.tensor(ctx_ids, dtype=torch.long) #2、梯度置0 model.zero_grad() #3、获取log_probs log_probs=model(ctx_ids) #4、计算损失函数 loss=loss_function(log_probs,torch.tensor([word_to_ix[target]], dtype=torch.long)) #5、反向传播更新梯度 loss.backward() opt.step() total_loss+=loss.item() losses.append(total_loss)print(losses)  

参考:

https://pytorch.org/tutorials/beginner/nlp/word_embeddings_tutorial.html#sphx-glr-beginner-nlp-word-embeddings-tutorial-py

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。