首页 > 编程知识 正文

transETranslating Embedding详解 简单python实现,python实现简单计算器

时间:2023-05-06 06:02:47 阅读:186891 作者:1607

3358www.Sina.com/以学习一系列低维稠密向量来表达语义信息为目的,表示学习是知识库中与实体关系的表达学习。 当今大规模知识库(或知识库)的建立为许多NLP任务提供了基础性的支持,但由于其规模庞大且不完善,如何有效地存储和补充知识库成为一项非常重要的任务,这依赖于知识表达学习。

transE算法是一种非常经典的知识表示学习,用方差表示(distributed representation )来描述知识库中的三元组。 想象一下,这种表示法在避开巨大树结构的同时,通过简单的数学计算就可以得到语义信息,因此成为了现在表示学习的基础。

1我们知道1 transE算法的原理知识图的事实用三元组(h,l,t ) (h,l,t ) ) h,l,t )来表示,如何用低维稠密向量来表示它们才能得到这种依赖关系transE算法的思想非常简单,受word2vec平移不变性的启发,希望将其作为归纳偏序? 请参阅。

光有这个制约是不够的。 我想设定HLThlThlt,但关键是如何设定损失函数。 发现学习中没有明显的监视信号,也就是说,不能明确地告诉模型学习的表现不正确,所以要想早点收敛,需要“相对”概念知识表示学习,方法学名“相对负例来说,正例的打分要更高” 损失函数的设计如下。

其中(h )、l、t ) ) h#x27;l、t#x27; (h ),l,t ) )被称为corrupted triplet,是随机置换头部或尾部的实体得到的(同时,实际上也可以置换relation )。 (为margin。 仔细看,由于这是SVM的软容限损失函数,transE对给定的三元组进行二分类任务,其中反例通过置换自身结构,可以说是以最大化最近的正反例的样本距离为目标。

论文给出了详细的算法流程:

其中距离测量方式有L1范数和L2范数两种。 测试时,以一个三元组为例,术语材料中所有实体替换当前三元组的头实体计算距离d(h(l,t ) d ) d(h#x27 ); L,t,D(H ) L,t )按升序对结果进行排序,在正确的三元组排序情况下评价学习效果(同样对尾实体也是如此)。 度量选择hits@10和mean rank。 前者表示命中前10名的次数/查询总数,后者表示正确的结果排行榜的合计/查询总数。

还有一个价值。 文中给出了两种测试结果raw和filter。 其动机是我们在测试时置换得到的

的三元组并不一定就是负例,可能恰巧替换对了(比如(奥巴马,总统,美国)被替换成了(知性的战斗机,总统,美国)),那么它排名高也是正确的,把当前三元组挤下去也正常。(存疑:这样的话训练时是否也应当过滤corrupted triplet呢) 所以测试时在替换后要检查一下新三元组是否出现在训练集中,是的话就删掉,这就是filter训练方法(不检查的是raw)。

2 transE算法的简单python实现

为了更好地理解(其实是因为看不懂别人的),用python简单实现了transE算法,使用数据集FB15k。这里记录一些细节和几个小坑。完整代码见github。

1. 训练transE Tbatch更新:在update_embeddings函数中有一个deepcopy操作,目的就是为了批量更新。这是ML中mini-batch SGD的一个通用的训练知识,在实际编码时很容易忽略。两次更新:update_embeddings函数中,要对correct triplet和corrupted triplet都进行更新。虽然写作 ( h , l , t ) (h,l,t) (h,l,t)和 ( h ′ , l , t ′ ) (h',l,t') (h′,l,t′),但两个三元组只有一个entity不同(前面说了,不同时替换头尾实体),所以在每步更新时重叠的实体要更新两次(和更新relation一样),否则就会导致后一次更新覆盖前一次。关于L1范数的求导方法:先对L2范数求导,逐元素判断正负,为正赋值为1,负则为-1。超参选择:对FB15k数据集,epoch选了1000(其实不需要这么大,后面就没什么提高了),nbatches选了400(训练最快),embedding_dim=50, learning_rate=0.01, margin=1。 2. 测试 isFit参数:区分raw和filter。filter会非常慢。 3 transE算法的局限性

transE效果很好且非常简单,后续大量的工作都是在此基础上的改进(简称trans大礼包),传统方法已经基本不用了(有些思想还是值得借鉴的,比如矩阵分解、双线性模型)。改进大体针对以下几个问题:

复杂关系建模效果差。对1-N,N-1,N-N关系,会出现冲突映射,一个实体在不同三元组内的表示融合,导致不明确甚至错误的语义信息。多源信息融合。 如何充分利用知识库中的额外信息(如实体类型、实体描述)。关系路径建模。 对relation之间的依赖进行建模。

理解或实现有错误欢迎指出!

参考文献:

[1] Bordes A, Usunier N, Garcia-Duran A, et al. Translating embeddings for modeling multi-relational data[C]//Advances in neural information processing systems. 2013: 2787-2795.

[2] 刘知远, frdwl, wqdcjl, et al. 知识表示学习研究进展[J]. 计算机研究与发展, 2016, 53(2):247-261.

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