|
--- |
|
datasets: |
|
- code_search_net |
|
widget: |
|
- text: "def <mask> ( a, b ) : if a > b : return a else return b</s>return the maximum value" |
|
- text: "def <mask> ( a, b ) : if a > b : return a else return b" |
|
--- |
|
|
|
# Model Architecture |
|
|
|
This model follows the distilroberta-base architecture. Futhermore, this model was initialized with the checkpoint of distilroberta-base. |
|
|
|
# Pre-training phase |
|
|
|
This model was pre-trained with the MLM objective (`mlm_probability=0.15`). |
|
|
|
During this phase, the inputs had the following format: |
|
$$\left[[CLS], t_1, \dots, t_n, [SEP], w_1, \dots, w_m\right[EOS]]$$ |
|
where $t_1, \dots, t_n$ are the code tokens and $w_1, \dots, w_m$ are the natural language description tokens. More concretely, this is the snippet that tokenizes the input: |
|
```python |
|
def tokenize_function_bimodal(examples, tokenizer, max_len): |
|
codes = [' '.join(example) for example in examples['func_code_tokens']] |
|
nls = [' '.join(example) for example in examples['func_documentation_tokens']] |
|
pairs = [[c, nl] for c, nl in zip(codes, nls)] |
|
return tokenizer(pairs, max_length=max_len, padding="max_length", truncation=True) |
|
``` |
|
|
|
# Training details |
|
|
|
- Max length: 512 |
|
- Effective batch size: 64 |
|
- Total steps: 60000 |
|
- Learning rate: 5e-4 |
|
|
|
# Usage |
|
|
|
```python |
|
model = AutoModelForMaskedLM.from_pretrained('antolin/distilroberta-base-csn-python-bimodal') |
|
tokenizer = AutoTokenizer.from_pretrained('antolin/distilroberta-base-csn-python-bimodal') |
|
mask_filler = pipeline("fill-mask", model=model, tokenizer=tokenizer) |
|
code_tokens = ["def", "<mask>", "(", "a", ",", "b", ")", ":", "if", "a", ">", "b", ":", "return", "a", "else", "return", "b"] |
|
nl_tokens = ["return", "the", "maximum", "value"] |
|
input_text = ' '.join(code_tokens) + tokenizer.sep_token + ' '.join(nl_tokens) |
|
pprint(mask_filler(input_text, top_k=5)) |
|
``` |
|
```shell |
|
[{'score': 0.4645618796348572, |
|
'sequence': 'def max ( a, b ) : if a > b : return a else return b return ' |
|
'the maximum value', |
|
'token': 19220, |
|
'token_str': ' max'}, |
|
{'score': 0.40963634848594666, |
|
'sequence': 'def maximum ( a, b ) : if a > b : return a else return b ' |
|
'return the maximum value', |
|
'token': 4532, |
|
'token_str': ' maximum'}, |
|
{'score': 0.02103462442755699, |
|
'sequence': 'def min ( a, b ) : if a > b : return a else return b return ' |
|
'the maximum value', |
|
'token': 5251, |
|
'token_str': ' min'}, |
|
{'score': 0.014217409305274487, |
|
'sequence': 'def value ( a, b ) : if a > b : return a else return b return ' |
|
'the maximum value', |
|
'token': 923, |
|
'token_str': ' value'}, |
|
{'score': 0.010762304067611694, |
|
'sequence': 'def minimum ( a, b ) : if a > b : return a else return b ' |
|
'return the maximum value', |
|
'token': 3527, |
|
'token_str': ' minimum'}] |
|
``` |
|
|
|
|
|
|
|
|