Skip to content

Commit 22c6e6d

Browse files
WillQvQgitee-org
authored andcommitted
!5 修复了一些错误
Merge pull request !5 from WillQvQ/dev
2 parents d476678 + 350772f commit 22c6e6d

File tree

197 files changed

+186
-152
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

197 files changed

+186
-152
lines changed

.Jenkinsfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ pipeline {
2929
steps {
3030
sh 'python -m spacy download en'
3131
sh 'pip install fitlog'
32-
sh 'pytest ./test --html=test_results.html --self-contained-html'
32+
sh 'pytest ./tests --html=test_results.html --self-contained-html'
3333
}
3434
}
3535
}

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ install:
1414
# command to run tests
1515
script:
1616
- python -m spacy download en
17-
- pytest --cov=fastNLP test/
17+
- pytest --cov=fastNLP tests/
1818

1919
after_success:
2020
- bash <(curl -s https://codecov.io/bash)

MANIFEST.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
include requirements.txt
22
include LICENSE
33
include README.md
4-
prune test/
4+
prune tests/
55
prune reproduction/
66
prune fastNLP/api
77
prune fastNLP/automl

fastNLP/embeddings/bert_embedding.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ def __init__(self, vocab: Vocabulary, model_dir_or_name: str = 'en-base-uncased'
9393
"""
9494
super(BertEmbedding, self).__init__(vocab, word_dropout=word_dropout, dropout=dropout)
9595

96-
if word_dropout>0:
96+
if word_dropout > 0:
9797
assert vocab.unknown != None, "When word_drop>0, Vocabulary must contain the unknown token."
9898

9999
if model_dir_or_name.lower() in PRETRAINED_BERT_MODEL_DIR:
@@ -370,17 +370,29 @@ def __init__(self, model_dir_or_name: str, vocab: Vocabulary, layers: str = '-1'
370370
include_cls_sep: bool = False, pooled_cls: bool = False, auto_truncate: bool = False, min_freq=2):
371371
super().__init__()
372372

373-
self.tokenzier = BertTokenizer.from_pretrained(model_dir_or_name)
374-
self.encoder = BertModel.from_pretrained(model_dir_or_name)
375-
self._max_position_embeddings = self.encoder.config.max_position_embeddings
376-
# 检查encoder_layer_number是否合理
377-
encoder_layer_number = len(self.encoder.encoder.layer)
378373
if isinstance(layers, list):
379374
self.layers = [int(l) for l in layers]
380375
elif isinstance(layers, str):
381376
self.layers = list(map(int, layers.split(',')))
382377
else:
383378
raise TypeError("`layers` only supports str or list[int]")
379+
assert len(self.layers) > 0, "There is no layer selected!"
380+
381+
neg_num_output_layer = -16384
382+
pos_num_output_layer = 0
383+
for layer in self.layers:
384+
if layer < 0:
385+
neg_num_output_layer = max(layer, neg_num_output_layer)
386+
else:
387+
pos_num_output_layer = max(layer, pos_num_output_layer)
388+
389+
self.tokenzier = BertTokenizer.from_pretrained(model_dir_or_name)
390+
self.encoder = BertModel.from_pretrained(model_dir_or_name,
391+
neg_num_output_layer=neg_num_output_layer,
392+
pos_num_output_layer=pos_num_output_layer)
393+
self._max_position_embeddings = self.encoder.config.max_position_embeddings
394+
# 检查encoder_layer_number是否合理
395+
encoder_layer_number = len(self.encoder.encoder.layer)
384396
for layer in self.layers:
385397
if layer < 0:
386398
assert -layer <= encoder_layer_number, f"The layer index:{layer} is out of scope for " \

fastNLP/embeddings/roberta_embedding.py

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -196,20 +196,30 @@ def __init__(self, model_dir_or_name: str, vocab: Vocabulary, layers: str = '-1'
196196
include_cls_sep: bool = False, pooled_cls: bool = False, auto_truncate: bool = False, min_freq=2):
197197
super().__init__()
198198

199-
self.tokenizer = RobertaTokenizer.from_pretrained(model_dir_or_name)
200-
self.encoder = RobertaModel.from_pretrained(model_dir_or_name)
201-
# 由于RobertaEmbedding中设置了padding_idx为1, 且使用了非常神奇的position计算方式,所以-2
202-
self._max_position_embeddings = self.encoder.config.max_position_embeddings - 2
203-
# 检查encoder_layer_number是否合理
204-
encoder_layer_number = len(self.encoder.encoder.layer)
205-
206199
if isinstance(layers, list):
207200
self.layers = [int(l) for l in layers]
208201
elif isinstance(layers, str):
209202
self.layers = list(map(int, layers.split(',')))
210203
else:
211204
raise TypeError("`layers` only supports str or list[int]")
205+
assert len(self.layers) > 0, "There is no layer selected!"
206+
207+
neg_num_output_layer = -16384
208+
pos_num_output_layer = 0
209+
for layer in self.layers:
210+
if layer < 0:
211+
neg_num_output_layer = max(layer, neg_num_output_layer)
212+
else:
213+
pos_num_output_layer = max(layer, pos_num_output_layer)
212214

215+
self.tokenizer = RobertaTokenizer.from_pretrained(model_dir_or_name)
216+
self.encoder = RobertaModel.from_pretrained(model_dir_or_name,
217+
neg_num_output_layer=neg_num_output_layer,
218+
pos_num_output_layer=pos_num_output_layer)
219+
# 由于RobertaEmbedding中设置了padding_idx为1, 且使用了非常神奇的position计算方式,所以-2
220+
self._max_position_embeddings = self.encoder.config.max_position_embeddings - 2
221+
# 检查encoder_layer_number是否合理
222+
encoder_layer_number = len(self.encoder.encoder.layer)
213223
for layer in self.layers:
214224
if layer < 0:
215225
assert -layer <= encoder_layer_number, f"The layer index:{layer} is out of scope for " \

fastNLP/modules/encoder/bert.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -366,19 +366,28 @@ def forward(self, hidden_states, attention_mask):
366366

367367

368368
class BertEncoder(nn.Module):
369-
def __init__(self, config):
369+
def __init__(self, config, num_output_layer=-1):
370370
super(BertEncoder, self).__init__()
371371
layer = BertLayer(config)
372372
self.layer = nn.ModuleList([copy.deepcopy(layer) for _ in range(config.num_hidden_layers)])
373+
num_output_layer = num_output_layer if num_output_layer >= 0 else (len(self.layer) + num_output_layer)
374+
self.num_output_layer = max(min(num_output_layer, len(self.layer)), 0)
375+
if self.num_output_layer + 1 < len(self.layer):
376+
logger.info(f'The transformer encoder will early exit after layer-{self.num_output_layer} '
377+
f'(start from 0)!')
373378

374379
def forward(self, hidden_states, attention_mask, output_all_encoded_layers=True):
375380
all_encoder_layers = []
376-
for layer_module in self.layer:
381+
for idx, layer_module in enumerate(self.layer):
382+
if idx > self.num_output_layer:
383+
break
377384
hidden_states = layer_module(hidden_states, attention_mask)
378385
if output_all_encoded_layers:
379386
all_encoder_layers.append(hidden_states)
380387
if not output_all_encoded_layers:
381388
all_encoder_layers.append(hidden_states)
389+
if len(all_encoder_layers) == 0:
390+
all_encoder_layers.append(hidden_states)
382391
return all_encoder_layers
383392

384393

@@ -435,6 +444,9 @@ def __init__(self, config, *inputs, **kwargs):
435444
self.config = config
436445
self.hidden_size = self.config.hidden_size
437446
self.model_type = 'bert'
447+
neg_num_output_layer = kwargs.get('neg_num_output_layer', -1)
448+
pos_num_output_layer = kwargs.get('pos_num_output_layer', self.config.num_hidden_layers - 1)
449+
self.num_output_layer = max(neg_num_output_layer + self.config.num_hidden_layers, pos_num_output_layer)
438450
if hasattr(config, 'sinusoidal_pos_embds'):
439451
self.model_type = 'distilbert'
440452
elif 'model_type' in kwargs:
@@ -445,7 +457,7 @@ def __init__(self, config, *inputs, **kwargs):
445457
else:
446458
self.embeddings = BertEmbeddings(config)
447459

448-
self.encoder = BertEncoder(config)
460+
self.encoder = BertEncoder(config, num_output_layer=self.num_output_layer)
449461
if self.model_type != 'distilbert':
450462
self.pooler = BertPooler(config)
451463
else:

fastNLP/modules/encoder/roberta.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ class RobertaModel(BertModel):
6464
undocumented
6565
"""
6666

67-
def __init__(self, config):
68-
super().__init__(config)
67+
def __init__(self, config, *inputs, **kwargs):
68+
super().__init__(config, *inputs, **kwargs)
6969

7070
self.embeddings = RobertaEmbeddings(config)
7171
self.apply(self.init_bert_weights)

fastNLP/modules/encoder/seq2seq_encoder.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ def forward(self, tokens, seq_len):
132132
x = self.input_fc(x)
133133
x = F.dropout(x, p=self.dropout, training=self.training)
134134

135-
encoder_mask = seq_len_to_mask(seq_len)
135+
encoder_mask = seq_len_to_mask(seq_len, max_len=max_src_len)
136136
encoder_mask = encoder_mask.to(device)
137137

138138
for layer in self.layer_stacks:
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)