如何将Huggingface GenerationMixin(或其beam search)用于自定义模型?
使用Huggingface Generation Mixin的困惑与实践问题
我一直觉得用Huggingface的Mixin方式实现生成逻辑是可行的,但找不到明确文档说明具体要求,也不确定依赖会不会太繁杂,以至于得不偿失。Huggingface生成模块的核心代码足足有数千行,昨天研究下来,我反倒学了不少beam search的编写方法,对GenerationMixin本身的了解却没多少。:-)
通过阅读源码,我总结出可能需要的依赖项包括:
self.config:模型配置对象prepare_inputs_for_generation():生成阶段准备输入的方法_update_model_kwargs_for_generation():更新生成时模型参数的方法
另外还隐含依赖forward()方法,不过我不确定这是不是全部要求,也不清楚每个部分的具体实现形式,而且我猜测它可能要求forward()返回特定格式的数据。
为了让讨论更具体且有普遍实用性,我想知道如何把Huggingface的beam search功能用到minGPT(或nanoGPT,二者在生成逻辑上完全一致)上?这个模型的forward()函数返回(logits, loss),它自己也有一个generate()函数,功能相当于Huggingface的sample()和greedy_search(),但不支持beam search。
我之前提到过似乎每个人的生成/beam search实现都与其Transformer实现紧密绑定,至今我还是搞不懂为什么大家都在重复造轮子,也纳闷为什么没有一个接口定义清晰的独立开源beam search实现。我为此悬赏,希望能得到解答。
内容的提问来源于stack exchange,提问作者Darren Cook
相关产品推荐
相关产品推荐

