This repository is not a complete one, and we will complete it soon.
Usage
To train a new model
python3 run.py ATIS|HS-B
To predict the code (ATIS)
python3 predict.py ATIS 5
where 5 is the beam size.
To predict the code (HS)
python3 predict_HS-B.py HS-B 5
To check the results
python3 eval.py ATIS|HS-B
Dependenices
NLTK 3.2.1
Tensorflow 1.12.1
Python 3.7
Ubuntu 16.04
Attention Visualization
An example of the attention mechanism following the long-distance dependencies in the partial AST reader self-attention in layer 3. The node Name -> id (the parent node of player) in the line elif type(player.hero.power) is hearthbreaker.powers.MindSpike: denotes the information of the value of function type. As shown, this node relies on complex information, which contains the variables ( player and game, in the defination of function), the body of if statement, and the structure of elif. Different colored columns represent different heads.
An example of the attention mechanism in the partial AST reader self-attention in layer 1. The node Expr -> value in the line minion.damage(player.effective_spell_damage(3), self) decides the type of this statement, which mostly relies on the previous statements of the function use and the variable targets and minion as shown.
TreeGen
A Tree-Based Transformer Architecture for Code Generation.
Our paper is available at https://arxiv.org/abs/1911.09983. (Accepted by AAAI’20)
This repository is not a complete one, and we will complete it soon.
Usage
To train a new model
To predict the code (ATIS)
where
5
is the beam size.To predict the code (HS)
To check the results
Dependenices
Attention Visualization
Name -> id
(the parent node ofplayer
) in the lineelif type(player.hero.power) is hearthbreaker.powers.MindSpike:
denotes the information of the value of functiontype
. As shown, this node relies on complex information, which contains the variables (player
andgame
, in the defination of function), the body of if statement, and the structure ofelif
. Different colored columns represent different heads.Expr -> value
in the lineminion.damage(player.effective_spell_damage(3), self)
decides the type of this statement, which mostly relies on the previous statements of the functionuse
and the variabletargets
andminion
as shown.