Huggingface对mixin的使用一直在取笑我,说这应该是可能的,但我找不到任何明确的文档来说明需求是什么,或者依赖性是否太多而不值得。The central module实际上有成千上万行,我昨天学习了它,感觉我学到了更多关于如何编写beam搜索的知识,而不是GenerationMixin。:-)
从阅读源代码中,我认为依赖关系是self.config
,然后是prepare_inputs_for_generation()
和_update_model_kwargs_for_generation()
;也隐含地为forward()
。但我不确定这就是全部。也不知道每个人应该是什么样子。而且我认为它可能期望forward()
以特定格式返回数据。
为了使讨论更具体,更有用,Huggingface的beam搜索如何与minGPT一起使用,它有一个返回logits,loss
的forward()
函数。(它实际上有自己的generate()
功能,相当于Huggingface的sample()
和greedy_search()
,但不支持波束搜索。)或者nanoGPT,如果你喜欢的话-它们在这方面是相同的。
在评论中我说 * 似乎每个人的generate/beam搜索实现都与他们的Transformer实现紧密联系在一起. * 我仍然不能真正理解为什么每个人都重新发明这个轮子,为什么没有独立的开源beam搜索实现,有一个明确定义的接口。我打算在这个问题上悬赏,看看是否有帮助。
1条答案
按热度按时间ulmd4ohb1#
如果你想使用huggingface代码,你需要从
GenerationMixin
类中查找generate
,请参见这里。因此,您的选择是调整代码以继承GenerationMixin,或者复制代码。无论哪种方式,它都取决于你的模型是否对huggingface友好,所以随便插入一个而不调整代码是行不通的。
如果你不一定要使用hface代码,github上有很多非常方便的实现,更容易适应,例如here