对于这种人格分类的任务,一般都是从用户在网络上的发帖(post)去估计其人格特征(多标签分类任务)。本文通过心理语言知识的三部图网络TrigNet揭示一个人的语言使用和心理特征之间的联系,并使用图神经网络去建模这种联系。为了减少GAT的计算复杂度,提出了一种新的流图注意网络,该网络只在三部图中相邻节点之间传递消息。之后,将平均后节点表示作为人格分类的最终用户表示。
三部图的构建如图所示:
一共有三种类型的节点,Post是用户发表的帖子,Word表示帖子中的单词,Category表示把单词分为心理学相关的类别,论文中使用了一个叫做Linguistic Inquiry and Word Count (LIWC)的工具完成单词Category的划分。构图的过程也很简单,如果单词属于某一个Post或是属于某一个Category,则添加边。
对于一个用户,他可能会发布一些列帖子: P = { p 1 , p 2 , . . . p r } P=\{p_1,p_2,...p_r\} P={ p1,p2,...pr},假定一个帖子 p i p_i pi由一系列单词序列组成: p i = { w i , 1 , . . . w i , n } p_i=\{w_{i,1},...w_{i,n}\} pi={ wi,1,...wi,n},任务目标是根据 P P P预测对应的 T T T个人格 Y = { y t } t = 1 T Y=\{y^t\}_{t=1}^T Y={ yt}t=1T,其中 y t y^t yt是一个 0 , 1 0,1 0,1的binary向量,表示多标签分类的结果。
模型总体框架如下:
首先,需要对不同的节点进行初始化。对于单词,可以使用Bert获取表示。在本文中,如果单词没有超出词汇表,我们可以直接查找BERT嵌入层获得其嵌入;如果单词是词汇表之外的,我们使用它pieces的平均嵌入作为它的初始节点嵌入。对于Post,本文利用最后三层的表示来初始化Post节点嵌入,也就是:
然后使用attention进行三者的加权聚合:
而对于一共15个主要的category,用每一个category的单词代替Bert中的UNUSED标记,这样就可以用token look up table对category进行表示了:
图的聚合时基于GAT的改进,为了本文的三部图定制了一个flow GAT for the tripartite graph模块。考虑到post之间的交互路径有两种:p-w-p以及p-w-c-w-p,所以设计了一种消息传递机制,只通过三部图中的这两个flow来传递消息。更新过程定义为:
其中, H p ( l ) H_p^{(l)} Hp(l)的两种不同更新方式如下:
这正好对应两个不同的flow。再之后,三种不同的节点更新为:
这里所有的 M P ( ) MP() MP()都是message passing的意思,以 M P ( H w ( l ) , H p ( l ) ) MP(H_w^{(l)}, H_p^{(l)}) MP(Hw(l),Hp(l))为例, M P ( ) MP() MP()可以视为一种多头注意力聚合:
这里面 i i i是 V w V_w Vw中的节点, j j j是在 i i i的邻域内且类型为 V p V_p Vp的节点, k k k表示head,这样就能计算节点之间的注意力系数 β i j k \beta_{ij}^k βijk。然后,通过注意力权重就可以实现如下的多头注意力更新:
而结点 i i i的最新表示是原来表示与注意力聚合之后的加和:
最终,用户的表示是他所发布的所有post的平均池:
然后,采用 T T T softmax-normalized线性变换去估计最终的人格:
目标函数的损失函数对应多标签分类的损失:
其中 I / E I/E I/E这种表示不同的人格类型,一共分为:Introversion vs. Extroversion
(I/E), Sensing vs. iNtuition (S/N), Think vs. Feeling (T/F), and Perception vs. Judging (P/J)。
其中第二栏表示删除不同的LIWC标记后性能的下降。
当然,本文提出的特殊GAT由于其稀疏性,在参数与复杂度、性能上都有提升。
这个是说明不同的Bert Layer对最终结果的贡献程度,从热力图来看,最后的三层贡献程度最大。因此,本文前文也提到了使用后三层的加权和作为输入的embedding。
基本思想 定义一对数字<a,b>,若a<=b称<a,b>为正序对;若a>b称<a,b>为反序对; 单趟冒泡排序:设数组元素为,从1到n依次比较,如果是反序对则交换两元素。经过单趟冒泡后,最大元素会被排到数组的最后。 每趟冒泡会将未排序元素中的最大值排到其本该在的位置,因此最大n-1趟就能完成排序。 如果本趟没有进行交换反序对的操作,说明...
西华大学实验报告西华大学实验报告(理工类)开课学院及实验室: 电气气与电子信息学院 6A-205实验时间 :年月 日学 生 姓 名学号成 绩 学生所在学院 电气气与电子信息学院年级/专业/班 课 程 名 称 数字信号处理 课 程 代 码 实验项目名称Matlab 与数字信号处理基础项 目 代 码 指 导 教 师项 目 学 分一、实验目的1、熟悉Matlab 的操作环境;2、学习用Matlab 建立..._matlab在信号处理中的应用基础实验原理
MT8827 AndroidM项目为了优化系统启动速度,将bootchart在init中优化成默认不打开,一般情况下bootchart只是一个工具,用来测试系统启动速度用的,正常情况下没用使用,所以默认优化掉,需要打开,请按照以下方法进行打开,如下:1、修改device\atc\ac83xx_evb\BoardConfig.mk ###add by zhaojr Bootchartifeq..._autochips ac83xx_evb
There arennheroes fighting in the arena. Initially, theii-th hero hasa_iaihealth points.The fight in the arena takes place in several rounds. At the beginning of each round, each alive hero deals11damage to all other heroes. Hits of all heroes oc...
【ubuntu】ubuntu 如何解压zip文件。_ubuntu 解压zip
论百万人同时在线棋牌类网络游戏服务器设计http://www.cppblog.com/beifangying/archive/2008/09/11/61600.html本文主要探讨如何设计一款百万人同时在线的棋牌类网络游戏服务器系统,如果您发现本文的设计上存在漏洞或不对的地方欢迎提出共同探讨。1.总体架构图 注: CMS(control and manage s_棋牌百万服务器框架设计
目录前言持久化登录介绍cookiecookie介绍cookie携带账号密码?cookie存储登录标志?sessionsession简介session的生存周期session存储登录标志?cookie+session存储用户信息以区分用户注销代码实现实现思路登录验证后台程序 loginRecv.php登录成功页面 loginSuccessPage.php跳转页面subPage1.php注销服务程序 logoutRecv.php演示前言上次实现了一个最简单的登录功能,用到了mysql和php。【最简单的网页_cookie session 登录
JDK7中新增了ForkJoinPool,年前的项目中恰好用到了,今天终于有时间可以自己写个demo并记录下来了。ps:最近反思自己的工作经历,有些是忙并快乐着的,天天都会有进步,和同事一起讨论问题而不是争论,通过遇到的bug去思考怎么优化产品而不是甩锅。然而这样的工作不常有,遇到了就好好珍惜吧,反正我现在是后悔的要死,但毕竟生活就是生活,没用经济基础空谈理想是会饿死的。在大厂就多想想怎么做人和拼关系,老老实实做好一颗钉;到了小厂就是锻炼人和拼技术了。尽管有时候会被压榨,被PUA,但是无论在哪里都给自己_jdk中没有forkjoinpool类
随机数的生成在一些代码中很常用,更是涉及到了很多行业,比如游戏,彩票等等很多金融相关的行业。Java生成随机数在java开发中也是一个合格的程序员必备的功能实现。就目前来说,java生成随机数的方法主要有下面几种:一、new Random()需要借助java.util.Random类来产生一个随机数发生器,java.util.Random 这个类提供了生成Bytes、Int、Long、Float、..._java生成long的随机整数
2019独角兽企业重金招聘Python工程师标准>>> ...
怎样为CAD定制带特殊生僻字的shx文件。_shx字体
1. OAuth2简易实战(四)-Github社交联合登录1.1. 用到的第三方插件https://github.com/spring-projects/spring-social-github1.2. 测试步骤1.2.1. 先在github上注册一个OAuth Apps我的配置内容如下需要注意的,这里的最后一个回调地址的配置,格式严格规定,/connect/xxx,最后的git..._github联合登录