【DKN】(六)KCNN.py

内容

在这里插入图片描述

在这里插入图片描述

import torch
import torch.nn as nn
import torch.nn.functional as F
from src.model.general.attention.additive import AdditiveAttentiondevice = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")class KCNN(torch.nn.Module):"""Knowledge-aware CNN (KCNN) based on Kim CNN.Input a news sentence (e.g. its title), produce its embedding vector."""def __init__(self, config, pretrained_word_embedding,pretrained_entity_embedding, pretrained_context_embedding):#前面是单纯的定义: 获取单词嵌入、实体嵌入和上下文嵌入的预训练参数(不只是历史点击新闻还有候选新闻的)super(KCNN, self).__init__()self.config = configif pretrained_word_embedding is None:  #如果预训练单词嵌入是空,那么就需要用集成在nn.Embedding()的函数了self.word_embedding = nn.Embedding(config.num_words,config.word_embedding_dim,padding_idx=0)else:self.word_embedding = nn.Embedding.from_pretrained(pretrained_word_embedding, freeze=False, padding_idx=0)if pretrained_entity_embedding is None:self.entity_embedding = nn.Embedding(config.num_entities,config.entity_embedding_dim,padding_idx=0)else:self.entity_embedding = nn.Embedding.from_pretrained(pretrained_entity_embedding, freeze=False, padding_idx=0)if config.use_context:if pretrained_context_embedding is None:self.context_embedding = nn.Embedding(config.num_entities,config.entity_embedding_dim,padding_idx=0)else:self.context_embedding = nn.Embedding.from_pretrained(pretrained_context_embedding, freeze=False, padding_idx=0)self.transform_matrix = nn.Parameter(torch.empty(self.config.entity_embedding_dim,self.config.word_embedding_dim).uniform_(-0.1, 0.1))self.transform_bias = nn.Parameter(torch.empty(self.config.word_embedding_dim).uniform_(-0.1, 0.1))self.conv_filters = nn.ModuleDict({str(x): nn.Conv2d(3 if self.config.use_context else 2,self.config.num_filters,(x, self.config.word_embedding_dim))for x in self.config.window_sizes})self.additive_attention = AdditiveAttention(self.config.query_vector_dim, self.config.num_filters)def forward(self, news):"""Args:news:{"title": batch_size * num_words_title,"title_entities": batch_size * num_words_title}Returns:final_vector: batch_size, len(window_sizes) * num_filters"""# batch_size, num_words_title, word_embedding_dimword_vector = self.word_embedding(news["title"].to(device))#获得单词向量  需要放到设备上的# batch_size, num_words_title, entity_embedding_dim   entity_vector = self.entity_embedding(    #获得实体向量news["title_entities"].to(device))if self.config.use_context:    #用上下文的话就得获得上下文的向量# batch_size, num_words_title, entity_embedding_dimcontext_vector = self.context_embedding(news["title_entities"].to(device))# batch_size, num_words_title, word_embedding_dimtransformed_entity_vector = torch.tanh(   #转换矩阵是将其中某些词替换掉!  torch.add(torch.matmul(entity_vector, self.transform_matrix),self.transform_bias))if self.config.use_context:        # batch_size, num_words_title, word_embedding_dimtransformed_context_vector = torch.tanh(torch.add(torch.matmul(context_vector, self.transform_matrix),self.transform_bias))# batch_size, 3, num_words_title, word_embedding_dimmulti_channel_vector = torch.stack([word_vector, transformed_entity_vector,transformed_context_vector], dim=1)   #获得最终的concat向量else:# batch_size, 2, num_words_title, word_embedding_dimmulti_channel_vector = torch.stack([word_vector, transformed_entity_vector], dim=1)pooled_vectors = []  #for x in self.config.window_sizes:    # window_size = 3 # batch_size, num_filters, num_words_title + 1 - xconvoluted = self.conv_filters[str(x)](   #后面就是卷积常规操作! 分别进行3种window_size的卷积multi_channel_vector).squeeze(dim=3)# batch_size, num_filters, num_words_title + 1 - xactivated = F.relu(convoluted)# batch_size, num_filters# Here we use a additive attention module# instead of pooling in the paperpooled = self.additive_attention(activated.transpose(1, 2))# pooled = activated.max(dim=-1)[0]# # or# # pooled = F.max_pool1d(activated, activated.size(2)).squeeze(dim=2)pooled_vectors.append(pooled)# batch_size, len(window_sizes) * num_filtersfinal_vector = torch.cat(pooled_vectors, dim=1)return final_vector

说明

最后的卷积有必要说一下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476169.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

北京精雕现状_6秒精密加工,日本走下神坛,北京精雕也做了一个!

各位社友还记得吗,机械社区之前分享过——日本6秒的精密加工火遍制造业圈子~▲点击上图 查看日本怎么用6s让世界惊奇在一阵惊呼赞叹中,一部分人也表示不服!比如,国内一位牛人也展示了他的产品。一起看看视频介绍吧——而近日&…

LeetCode 859. 亲密字符串

1. 题目 给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回 true ;否则返回 false 。 示例 1: 输入: A "ab", B "ba" 输出&#xff1a…

ASP.Net快速开发新闻系统 在线播放

http://www.so138.com/sov/d19a5913-88cf-4abf-a487-69293bb0c403.html转载于:https://www.cnblogs.com/freedom831215/archive/2009/10/03/1577631.html

【DKN】(五)attention.py

感觉还是挺简单,这里只是方便之后回来瞅瞅 import torch import torch.nn as nn import torch.nn.functional as Fclass Attention(torch.nn.Module):"""Attention Net.Input embedding vectors (produced by KCNN) of a candidate news and all of…

小米扫地机器人充电座指示灯不亮_小米扫地机器人常见问题处理 充电后无法取电怎么办?...

与其他科技领域一样,人工智能领域也得到蓬勃发展。如今人工智能已经无处不在。专家把人工智能比作电力,因为它是一种可能改变各行各业的资源。诚然,每个领域都有一些特别重要的技术,例如随着生活的水平的提高,扫地机器…

Enterprise Library 4.1 快速上手(图)

简介: 关于Enterprise Library 的概念,网上可以很容易的找到,在这里要做的是如何快速的打通Enterprise Library 4.1的使用, 让咱们可以用最短的时间使用起来,并且在需要的时候在此基础上再花时间延伸,这是学…

知识图谱源码详解【八】__init__.py

import torch from src.model.DKN.KCNN import KCNN from src.model.DKN.attention import Attention from src.model.general.click_predictor.DNN import DNNClickPredictor# 就是把整个模型框架梳理到一块了! class DKN(torch.nn.Module):"""Deep…

python complex函数def_【Python3】Python函数

1. 函数对象函数是第一类对象,即函数可以当做数据传递可以被引用可以当做参数传递返回值可以是函数可以当做容器类型的元素def foo():print(from foo)def index():print(from index)dic {foo:foo,index:index,}while True:choice input(">>>>>…

追MM与设计模式的有趣见解

Posted on 2007-01-18 12:53 东人EP 阅读(383) 评论(0) 编辑 收藏 引用 所属分类: Design Pattern 追MM与设计模式的有趣见解 创建型模式 1、FACTORY —追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,…

LeetCode 872. 叶子相似的树

1. 题目 请考虑一颗二叉树上所有的叶子,这些叶子的值按从左到右的顺序排列形成一个 叶值序列 。 举个例子,如上图所示,给定一颗叶值序列为 (6, 7, 4, 9, 8) 的树。 如果有两颗二叉树的叶值序列是相同,那么我们就认为它们是 叶…

【十】推荐系统遇到知识图谱RippleNet

RippleNet: Propagating User Preferences on the Knowledge Graph for Recommender Systems 代码: https://github.com/hwwang55/RippleNet 心得 (1)你需要知道Kg是如何起到作用的! KG的形式是什么! (2&…

桩筏有限元中的弹性板计算_采用PKPM系列JCCAD软件桩筏筏板有限元方法计算的模型参数 -...

*****采用PKPM系列JCCAD软件桩筏筏板有限元方法计算的模型参数******计算模型:弹性地基梁板模型 (桩和土按WINKLER模型)地基基础形式及参照规范:天然地基(地基规范)、常规桩基(桩基规范)上部结构影响(共同作用计算): 网格划分依据:所有底层网格线有限元网格控制边长(m): 2.0 采…

[VC]旋转位图图片的算法函数

网上有很多关于位图旋转的资料,但是讲得很清楚的不多(我没有仔细查找).于是我也写了一个,希望能给向我这样的初学者一点帮助. 第一步,你必须知道位图即BMP格式的文件的结构. 位图(bmp)文件由以下几个部分组成: 1.BITMAPFILEHEADER,它的定义如下: typedef struct tagBITMAPFILEH…

LeetCode 836. 矩形重叠

1. 题目 矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。 如果相交的面积为正,则称两矩形重叠。 需要明确的是,只在角或边接触的两个矩形不构成重叠。 给出两个矩形&#xff…

推荐系统和知识图谱论文推荐

KDD2020 Graph-based Recommendation(基于图,不是知识图谱) 1. A Framework for Recommending Accurate and Diverse Items Using Bayesian Graph Convolutional Neural Networks 【华为诺亚】 2. An Efficient Neighborhood-based Intera…

cmd执行python 环境变量应该怎么写_python怎么运行py文件?.py文件cmd命令方法及环境变量配置教程...

python是一款应用非常广泛的脚本程序语言,谷歌公司的网页就是用python编写。python在生物信息、统计、网页制作、计算等多个领域都体现出了强大的功能。python和其他脚本语言如java、R、Perl 一样,都可以直接在命令行里运行脚本程序。那么python怎么运行…

ASP.NET中的Eval()和DataBinder.Eval()方法

Eval( " ")和Bind( " ") 这两种一个单向绑定,一个双向绑定 bind是双向绑定,但需数据源可更改才能用 ASP.NET 2.0改善了模板中的数据绑定操作,把v1.x中的数据绑定语法DataBinder.Eval(Container.DataItem, fieldname)简化为Eval(fie…

知识图谱论文阅读(九)【转】推荐系统遇到知识图谱之MKR模型

文哥的学习笔记: https://www.jianshu.com/p/af5226c7fbbb 知识图谱特征学习在推荐系统中的应用步骤大致有以下三种方式: 依次训练的方法主要有:Deep knowledge-aware Network(DKN) 联合训练的方法有: Rip…

LeetCode 883. 三维形体投影面积

1. 题目 在 N * N 的网格中,我们放置了一些与 x,y,z 三轴对齐的 1 * 1 * 1 立方体。 每个值 v grid[i][j] 表示 v 个正方体叠放在单元格 (i, j) 上。 现在,我们查看这些立方体在 xy、yz 和 zx 平面上的投影。 投影就像影子&a…

asoc linux设备驱动_Linux驱动分析之I2C设备

内核:4.20芯片:HYM8563 RTC下面的代码分析主要都在注释中,会按照驱动中函数的执行顺序分析。(1) 加载和卸载函数static const struct i2c_device_id hym8563_id[] {{ "hym8563", 0 },{}, }; MODULE_DEVICE_TABLE(i2c, hym8563_id)…