zjunlp / KnowPrompt

[WWW 2022] KnowPrompt: Knowledge-aware Prompt-tuning with Synergistic Optimization for Relation Extraction
MIT License
194 stars 34 forks source link

关于 KE loss 即论文中 "Implicit Structured Constraints" 的一些疑问 #4

Closed xerrors closed 2 years ago

xerrors commented 2 years ago

大佬好!首先对你们的卓越工作以及开源精神表示敬意!

起因:我在尝试重新运行项目中的代码的时候,对 KE loss 的有效性有一些疑问,虽然论文中你们提到“In addition, there exists rich semantic knowledge among relation labels and structural knowledge implications among relational triples, which cannot be ignored.”,我在这里将 ke_loss 理解为文中所说的 structural knowledge,但是直接使用 $(s + r - o)$ 的方式,感觉是有点简单粗暴了哈~ 而且从实验的日志来看,ke_loss 从头到尾并没有得到优化。

https://github.com/zjunlp/KnowPrompt/blob/9159e4bf4f1ae4986fddcf5c803bf4f953ee3e9b/lit_models/transformer.py#L292-L293

(顺便一提,你们公开的代码里面这部分的 log 写错了,两个输出都是 loss)

https://github.com/zjunlp/KnowPrompt/blob/9159e4bf4f1ae4986fddcf5c803bf4f953ee3e9b/lit_models/transformer.py#L196-L197

如果调整到正常的输出之后就会发现 ke_loss 一直在 20 左右。这也印证了我前面的想法,毕竟 $s$、$r$、$o$ 都是直接从模型直接输出的,没有经过额外的全连接之类的重新映射,直接取距离的二范数可能不太好训练。

总而言之,我的疑问如下,如果能够抽空解答一二,十分感谢~ @njcx-ai (应该是作者吧~😘)

  1. 在设计 KE loss 的时候是怎样考虑的?当时在实验的时候,KE loss 的表现又是如何?
  2. 负样本的选取中,是在 max_token_length 长度上选取的,必定也会包含 prompt 部分和 句子后面 padding 部分的 token,这个当时有没有考虑呢?
  3. 负样本的计算为什么会选用 real_relation_embedding,而不是选择模型的输出呢?

https://github.com/zjunlp/KnowPrompt/blob/9159e4bf4f1ae4986fddcf5c803bf4f953ee3e9b/lit_models/transformer.py#L262-L297

xerrors commented 2 years ago

但是直接使用 $(s + r - o)$ 的方式,感觉是有点简单粗暴了哈~

这部分我后来做了些功课,这里计算使用的 $d(s, r, o) = (s+r-o)^2$ 兴许是参考了 TransE 中的做法?”在TransE中,关系类被表征为翻译嵌入式表征。如果实体对存在,则头实体与之对应的关系向量之和和尾实体尽可能相同。“

https://github.com/thunlp/KB2E/blob/master/TransE/Test_TransE.cpp#L98-L108

Translating Embeddings for Modeling Multi-relational Data

公式

zxlzr commented 2 years ago

感谢关注哈,前段时间忙发现这个issue,不知道是否已有同学回复了。我来简单解答一下问题: 1 在设计 KE loss 的时候是怎样考虑的?当时在实验的时候,KE loss 的表现又是如何? 答:设计KE主要为了隐式建立实体和关系间的一种关联,原理和之前一些知识增强提示学习的思想是类似的,我们的确参考了transe。KE loss是有超参数控制的起到一种类似正则的作用,对模型影响较大的是同时学习verbalizer和prompt的embedding这一过程。对于少样本实验,方差会较大,需要run多次进行调参。 2负样本的选取中,是在 max_token_length 长度上选取的,必定也会包含 prompt 部分和 句子后面 padding 部分的 token,这个当时有没有考虑呢? 答: 这部分未做特殊处理,不过个人经验padding部分影响不大。 3 负样本的计算为什么会选用 real_relation_embedding,而不是选择模型的输出呢? 答:模型设计是为了学习更好的prompt 和verbalizer,这里real_relation_embedding表示了可学习的verbalizer,而且这个emb是有初始化向量的(关系标签词),用模型输出开始学习的时候很难保证能采样到符合要求语义的样本。

yccckid commented 2 months ago

能请问各位大佬一个问题吗?就是文章中提到将虚拟答案词扩展到MLM Head中,请问这部分在代码中的实现在哪里?或者这个步骤是怎么做的?

njcx-ai commented 2 months ago

您好,感谢对我们工作的关注。您可以在下面这行代码对应的函数中看到将虚拟答案词扩展到MLM Head中的实现。

https://github.com/zjunlp/KnowPrompt/blob/9159e4bf4f1ae4986fddcf5c803bf4f953ee3e9b/lit_models/transformer.py#L134