pytorch 如何在我自己的模型中使用Huggingface GenerationMixin(或其beam搜索)?

x759pob2  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(149)

Huggingface对mixin的使用一直在取笑我,说这应该是可能的,但我找不到任何明确的文档来说明需求是什么,或者依赖性是否太多而不值得。The central module实际上有成千上万行,我昨天学习了它,感觉我学到了更多关于如何编写beam搜索的知识,而不是GenerationMixin。:-)
从阅读源代码中,我认为依赖关系是self.config,然后是prepare_inputs_for_generation()_update_model_kwargs_for_generation();也隐含地为forward()。但我不确定这就是全部。也不知道每个人应该是什么样子。而且我认为它可能期望forward()以特定格式返回数据。
为了使讨论更具体,更有用,Huggingface的beam搜索如何与minGPT一起使用,它有一个返回logits,lossforward()函数。(它实际上有自己的generate()功能,相当于Huggingface的sample()greedy_search(),但不支持波束搜索。)或者nanoGPT,如果你喜欢的话-它们在这方面是相同的。
在评论中我说 * 似乎每个人的generate/beam搜索实现都与他们的Transformer实现紧密联系在一起. * 我仍然不能真正理解为什么每个人都重新发明这个轮子,为什么没有独立的开源beam搜索实现,有一个明确定义的接口。我打算在这个问题上悬赏,看看是否有帮助。

ulmd4ohb

ulmd4ohb1#

如果你想使用huggingface代码,你需要从GenerationMixin类中查找generate,请参见这里。
因此,您的选择是调整代码以继承GenerationMixin,或者复制代码。无论哪种方式,它都取决于你的模型是否对huggingface友好,所以随便插入一个而不调整代码是行不通的。
如果你不一定要使用hface代码,github上有很多非常方便的实现,更容易适应,例如here

相关问题