Jimmy Wang
Jimmy Wang
我没有预训练这个模型,你可以用训练TransE的代码,训练在FB13数据集上的模型,保存为这个文件名
你好,可能是你运行的时候未打开hyperboard。 hyperboard的启动方法为:打开终端,输入hyperboard-run --port 端口号。 更多关于hyperboard的安装与使用,请参考https://github.com/WarBean/hyperboard
normloss的作用是,限制向量的模长在1以内,当向量模长大于1的时候,给予惩罚。这样可以避免学习向量的时候,简单地通过增减向量的模长就能在训练集上取得好的效果。
> 请问,这种实现方法是如何保证论文原文所说的entity norm=1?根据我的理解,代码中的normloss是在训练时对向量进行惩罚,但是Embedding layer中的weight只在初始化的时候进行了normalize,并没有保证embedding的norm始终为1。之所以提出这个问题,是由于在各种对TransE的实现版本中,一般都说norm的效果影响不大,但是似乎没有人完全使用论文中的参数,复现出和论文数据相似的结果,之前用Keras实现过一个超级慢的TransE,最近有时间想重新整理一下所有的Trans系列模型,准备采用Pytorch(所以也是才开始理解Pytorch,有理解错误的地方还望指正),希望能够在您的代码上进行重构,期待能有更多的交流! 同学你好,normloss是一种软惩罚方法(类似软间隔支持向量机),和其他损失函数一同优化,对模长大于1的向量会施加惩罚,从而使得模型倾向于将模长限制在1以内。 在TransE的论文,模长确实总是固定为1,但TransR的论文【Learning Entity and Relation Embeddings for Knowledge Graph Completion,第三页左栏Cluster-based TransR (CTransR)小标题之上】也提到,只要将模长限制在1以内都可以(相当于将向量限制在一个半径为1的球形空间中)。这样可以避免模型简单地通过增加长度,即可提高在训练集上的效果。