使用OpenKE预训练的freebase关系向量

最近做实验要用到使用TransE等知识表示工具训练出的freebase向量,本来以为需要自己训练,恰好发现清华大学的团队已提供了训练好的freebase、wikidata等开放知识图谱向量。下载地址为http://139.129.163.161/index/toolkits#pretrained-embeddings

但是下载之后发现保存关系向量的文件relation2vec.bin是2进制的,需要自己把它解析出来

参考了一篇python 二进制文件解析的博客 https://blog.csdn.net/lovelyaiq/article/details/81988185,了解到需要用struct.unpack函数来解析

unpack()函数是这样的:

unpack(fmt, string),其中string是你每次想解析的二进制流字符串,fmt是对解析内容的描述,具体规则参见上面的博客!

然后统计了一下,relation2vec.bin整个文件的长度是2964800,freebase中一共有14824种关系,所以每个关系的向量占用2964800/14824=200字节;而OpenKE团队已告知向量维度是50维,所以说明每个数字占用4字节,也就是float格式

所以如果想把整个向量文件一次性解析,数字总数是14824*50,格式为‘float',fmt就应该是‘741200f’

这样把整个文件解析成一个(741200,)的tuple,就可以进一步转化为(14824,50)格式的numpy.array来用了

具体函数为:

import codecs as cs
from struct import unpack
def Load_RelationEmbedding(path):
    with cs.open(path,"rb+") as fp:
        buf = fp.read()
        numbers = unpack('741200f', buf)
    table = []
    for i in range(0,741200,50):
        rvec = [numbers[j] for j in range(i,i+50)]
        table.append(rvec)
    return table
relation_embedding = Load_RelationEmbedding('../freebase/relation2vec.bin')

 

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值