brightmart / albert_zh

A LITE BERT FOR SELF-SUPERVISED LEARNING OF LANGUAGE REPRESENTATIONS, 海量中文预训练ALBERT模型
https://arxiv.org/pdf/1909.11942.pdf
3.93k stars 753 forks source link

关于Factorized Embedding Parameterization的问题 #133

Closed hntee closed 4 years ago

hntee commented 4 years ago

Hi brightmart 你好,

我看到在你的modeling.py中有一个embedding_lookup_factorized,里面在V->E之间生成了一个中间矩阵,但是在google的原版中是没有的

https://github.com/brightmart/albert_zh/blob/c6509e8edfa9b385bba69b37560501cdef7a7868/modeling.py#L448-L504

我比较奇怪的是,google的版本中为何看起来没有实现这个功能呢?

或许是我的理解有偏差,烦请指教一下

lonePatient commented 4 years ago

@hntee hi, 其实两者的project layer位置不一样的,bright是放在word embedding之后,google的好像是在word_embedding+pos_embedding_seg_embedding之后,另外对于中文的,最好两个版本都试下,哪个好用哪个预训练权重。

hntee commented 4 years ago

@lonePatient 感谢回复,不过我又看了下 google 那边的代码

https://github.com/google-research/albert/blob/c21d8a3616a4b156d21e795698ad52743ccd8b73/modeling.py#L626

这里把output加上pos_embedding之后,直接就layer norm了,还是没发现在哪里出现了有这个projection...

另外albert_zh这边,我看代码里面虽然产生了project_variable,但是后面也没有使用,有点奇怪

lonePatient commented 4 years ago

@hntee 仔细看代码,google部分在transformer模块里面,没用是啥意思?

hntee commented 4 years ago

哦没事,我是说看到 (self.embedding_output, self.embedding_table,self.embedding_table_2)里面后两个变量在后面没用到,但embedding_output已经是经过Factorized的了。