Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

我想问下全词mask的一个小细节 #4

Closed
fudanchenjiahao opened this issue Jun 20, 2019 · 9 comments
Closed

我想问下全词mask的一个小细节 #4

fudanchenjiahao opened this issue Jun 20, 2019 · 9 comments

Comments

@fudanchenjiahao
Copy link

在你们的工作中,比如mask词的时候,一个词为哈利波特,那么在你们的方法中,是不是只要这个词被mask,那一定是[mask][mask][mask][mask]的形式,还是偶尔会出现[mask]利[mask][mask]的形式,不知道你们是如何设置的(不考虑那个mask80%10%10%的那个随机概率),如果是前者,那么这种完全避免局部共现的设置会不会对结果有影响。

@ymcui
Copy link
Owner

ymcui commented Jun 20, 2019

可以参考谷歌BERT官方的create_pretraining_data.py
https://github.com/google-research/bert/blob/master/create_pretraining_data.py#L359
与之前不同的地方是原来的index取代为index_set,index_set中的每个元素是一个列表,该列表装入了当前词的所有WordPiece碎片。

下面可以举个例子,
假设原句为:there is an apple tree nearby.
假设切词后的list为
tok_list = ["there", "is", "an", "ap", "##p", "##le", "tr", "##ee", "nearby", "."]

运行十次无wwm的结果(单词后的感叹号表明“保留原词”的情况,[RANDOM]为“随机替换”的情况):

there [MASK] an ap [MASK] ##le tr [RANDOM] nearby .
[MASK] [MASK] an ap ##p [MASK] tr ##ee nearby .
there is [MASK] ap ##p ##le [MASK] ##ee [MASK] .
there is [MASK] ap [MASK] ##le tr ##ee nearby [MASK] .
there is an! ap ##p ##le tr [MASK] nearby [MASK] .
there is an [MASK] ##p [MASK] tr ##ee nearby [MASK] .
there [MASK] [MASK] ap ##p ##le tr ##ee nearby [MASK] .
there is an ap ##p ##le [RANDOM] [MASK] [MASK] .
there is an [MASK] ##p ##le tr ##ee [MASK] [MASK] .
there [MASK] an ap ##p ##le tr [MASK] nearby [MASK] .

运行十次有wwm的结果:

there is an [MASK] [MASK] [RANDOM] tr ##ee nearby .
there is! [MASK] ap ##p ##le tr ##ee nearby [MASK] .
there is [MASK] ap ##p ##le [MASK] [MASK] nearby .
there [MASK] [MASK] ap ##p ##le tr ##ee [RANDOM] .
there is an ap ##p ##le [MASK] [MASK] nearby [MASK] .
[MASK] is an ap ##p ##le [MASK] [MASK] nearby .
there is an ap ##p ##le [MASK] [MASK] nearby [MASK] .
[MASK] is an ap ##p ##le [MASK] ##ee! nearby .
there is an ap! [MASK] [MASK] tr ##ee nearby .
there is [MASK] ap ##p ##le [RANDOM] [MASK] nearby .

可见全词mask指的是同属一个词的所有子词均会被处理(mask,保留,替换),是广义的mask,而并非只局限于替换成[mask]标签的情况。

谷歌BERT官方并未对此进行详细描述,需要看代码才能知道。
我们会把上述内容更新至README,感谢!

@ymcui
Copy link
Owner

ymcui commented Jun 21, 2019

如有问题,欢迎随时re-open

@ymcui ymcui closed this as completed Jun 21, 2019
@MrRace
Copy link

MrRace commented Nov 10, 2020

有个疑问请教下,
image
在运行10次有 WWM的示例中, there is an [MASK] [MASK] [RANDOM] tr ##ee nearby . 中的 "ap", "##p", "##le" 这3个token作为一个完整word,不是要被mask掉吗?为何还有一个 [RANDOM], 直观理解应该是there is an [MASK] [MASK] [MASK] tr ##ee nearby .。 RANDOM操作的单位不是整词,而是 token ? 同理,保留操作的单位也是token,不是整词? 另外,为啥会出现there is an ap ##p ##le [MASK] [MASK] nearby [MASK] .,即在 nearby后面的[MASK]是表示原始句子的句号被遮掉?因为直观上看,在这里的[MASK]之后还有一个句号

@failable
Copy link

@MrRace @ymcui 同问…和说明对不上…

@failable
Copy link

@MrRace 请问你搞明白了没?可否指点一下?

@ailinbest
Copy link

个人理解:如果一个整词被选中,则这个整词的所有字词(token)都有可能被mask、替换、保留。不过这三总操作也是有概率发生的,导致有的会被保留。

@failable
Copy link

failable commented Mar 15, 2021

@ailinbest 那跟原来的本质区别是?

@sandove
Copy link

sandove commented May 19, 2021

@liebkne @MrRace 我的理解
无wwm:从一个句子所有字组成的集合中,按【字】的粒度随机选部分作为子集,在子集中对每个字进行“mask/保留/替换”操作(这里“保留”也视为一种操作,只不过恰好和不操作等效),其余字无操作。
有wwm:从一个句子所有字组成的集合中,按【词】的粒度随机选部分作为子集,选的时候按词选,到子集中之后还是以字为单位,再对子集中的每个字进行【独立的】“mask/保留/替换”操作。非子集中的字无操作。
两种方式的本质区别在于有wwm后,同一个词中的字,要么进入子集被操作,要么不进入子集,不操作。

@failable
Copy link

@sandove 你说的我都同意,除了只后一句。我觉得这不是本质区别,只是操作方式上的区别。本质区别应该是这样的操作为什么会有好处,产生的数据分布会有什么特别之处之类…

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants