fastnlp / fastNLP

fastNLP: A Modularized and Extensible NLP Framework. Currently still in incubation.
https://gitee.com/fastnlp/fastNLP
Apache License 2.0
3.06k stars 450 forks source link

自定义模型时如何处理多输入的情况 #284

Closed onebula closed 4 years ago

onebula commented 4 years ago

fastNLP.core.const 中提到dataset的field命名方式,具有多列words时,依次使用words1, words2, 具有多列chars时,依次使用chars1, chars2 ,……,我理解是fastNLP可以通过这些预设的字段名找到相应的特征。但是doc里没讲怎么组织模型的多输入,例如既有多个words,又有多个seq_len,那么forward函数就会包含多个输入变量,这些输入变量是怎么对应到dataset的field的?是相同的变量名么?还是有某种固定的顺序呢?同样的,自定义多输出的情况该如何处理呢?

yhcc commented 4 years ago

fastNLP是通过变量名匹配field的,假设Model的forward参数为forward(self, chars1, chars2), 则fastNLP会尝试将DataSet中的chars1列传递给chars1,chars2列传递给chars2。顺序没有关系,即也可以是forward(self, chars2, chars1)这样。但是fastNLP只会将设置为input的field去和forward的参数进行匹配。建议使用chars1, chars2也不是强制的,也可以叫比如forward(self, cn_chars, en_chars), 只要对应的DataSet中有这两列(cn_chars, en_chars列)且被设置为了input即可。

onebula commented 4 years ago

明白了,谢谢