salesforce / progen

Official release of the ProGen models
BSD 3-Clause "New" or "Revised" License
617 stars 114 forks source link

Many repeats in Progen2 model predictions #1

Closed amirshane closed 2 years ago

amirshane commented 2 years ago

I'm following the setup instructions and sampling from a few of the different models but the outputs are very repetitive.

For example:

python3 sample.py --model progen2-small --t 0.8 --p 0.9 --max-length 1024 --num-samples 1 --context "1" outputs 1SPPPPPPGP2

python3 sample.py --model progen2-oas --t 0.8 --p 0.9 --max-length 1024 --num-samples 1 --context "1" outputs 1MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM

python3 sample.py --model progen2-oas --t 0.8 --p 0.9 --max-length 1024 --num-samples 1 --context "1EVQ" outputs 1EVQMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM

python3 sample.py --model progen2-large --t 0.8 --p 0.9 --max-length 1024 --num-samples 1 --context "1" outputs 1SEEFSFEEEWFFWMFALMEFFWWAFFEFWFEFEMWEEFFFEWFWFFFWFWFWEMLMFFFWWFEEEWEEEFFFEFWFWFWEEFMSFMWFEWWFWWFSEWFAFFEFEWWWWSSAFFFFSFFFFFFFWWFWFWFWFFFAFEFFWFEFWFWFEMWFMWFFFFFFFEWFWFFFFWFFEFWFFFWWEWEFFFFFWFFEEAFFWFFEFWFFESFSWEFEFFFWMEMFEWFFEFFEFFWFFWWFAFWWFFMEWFFFFFWFFFFFMWFMWFEWFFFFFFEFFWFFFFFFWMWFFWWMFSFFWFFAFFFFEWEFEFFAWFFEWFAAEAFFEFFFFFEFEFFFMWFWWWEAWMWEFSFFWFFFWWAFWFFWWESAFFSFFFFFWFFFWFFSFSWEEFFWAFFFWFAWFAFAWWMWEFFEFSFFWFFEEEFWFWFFFFMFFFEFWWFFFAEFMWFFFWEFWWEWFSFFWFWWFFWEFFFFWWAEFWFFAWEFALWWFFWWFFFEWWFFFAWFWWFFWEFFWFFFEFWSWFFWWAFFFWEFWSLFAMWFSEMSFAWFEFFWMWWFEFFFEEFFFFFFWWWEFMFFFFWFSLEEFFWEEFFFFFEFMFFWWFWWFWSFWWEEEWWFFEEWFWFFFWFWWFWFWSWEESWWAFFFWFESWWWWSAWSWEEFFWWFAWFFFMFFFWFFFFFWFFEWEEWSWFSWAWFWWWFWFWFWFWFWFFAWWWAEMWWFEWFWMAWWAWWFFEFEEFWFWWFEWWFFFFFWWWWEFALFFSEFAEWAFWEMWFFEFWSFMEEFFFAFFAEEMAFWWFEWSWWFFFFSFWMSFFWFWFFEFFWFWWSFWFMEFEFWEEFWWFMWFWFWFFWAFWWWFFWMWFWFFSWFWALFWSEFSEFFWFFFFFFFEFFFMFFFEFFFFWFWWFEWAFFFSFAFFWWWFEFFWFFWFFWWWFFEWWAMEFFFEWWAWFEFSFWSFAFAFEFEFFEWFWFWFEFWSFFFFFWFFFFFFWFWMEFMFFFEFFWEFSWFFFEFFFFAWFWFFEWMFFE

a-mad commented 2 years ago

we will investigate to make sure there isn't a bug in the code. but it's not surprising that the model can suffer from mode collapse and/or repetition issues. interestingly, the pretraining databases (e.g. uniref) are riddled with spurious artifacts as well FYI.

four simple hacks to solve for this: (1) sample more. create a large library and simply filter out the poor generations (2) better decoding strategies. implement a repetition penalty similar to the original ProGen or CTRL paper. huggingface should have support for this (3) provide initial context to the model. even a few amino acids on either side of the sequence can greatly help (4) tune the model. prompt-tuning a small number of extra parameters or finetuning to a curated dataset of proteins

enijkamp commented 2 years ago

@amirshane We have pushed a few corrections and sanity checks. The implementation should now be identical to the one used for the results reported in the paper.

Could you try once more? Does this help?

lucidrains commented 2 years ago

@amirshane had this issue too, but just created a loop and sampled with many different random seeds

magnesium-transport

progen2 -> alphafold2

thisproteindoesnotexist :laughing:

amirshane commented 2 years ago

Thank you! @enijkamp @a-mad @lucidrains

I just reran the exact same commands and here are the outputs for reference:

python3 sample.py --model progen2-small --t 0.8 --p 0.9 --max-length 1024 --num-samples 1 --context "1" outputs 1MTEQSLLERSFRKGLALLGLCCLASALGLAQAEPAEELAPEGFTLESVSVQGRTRYLRDIAIEEETVPLGALELDQRGRLEQAIARLPGVAINRTSGAPRIVTIQGRGLQSASTLYDGAPVTNPSNNGGAAVRFDAPISDVIEGTQGVVVDAATVGVTGFVQTTVAGSATGGRQGLVDAGYGSFDAESTLAYGANGWRAGVTGGYSHRSRFEQGGLYGSVYRAGVQSELSGSAGAGAAPLGPLEPGTVTREFLPGTAGVSPGTVPGPTSYGFVDQLTLRRDDRLVQDGVSFTWSGAYFDTERPLTPAAGLDASLAAGASGLFERAGTQEATTGLGASAEGRFAERSFDLTATVRATHEDGANSASSSGFVFAPNTGGGGSRSYRETAQGFLEARADTADAWQLDAGLEGSRFRADLAPREFATATRATVGALVGVPAAEGGRDIADPTLARRASLRDRSTRLSGTLRARWDADDWRATAGLTRTRVTDSAPLDARSLTGDGYRITDLSGFGSGRPSDGLTGAVDASLGRALAAGDGGALSASLGLRHSDRRLEAADGDAGVRGTLPGGGTRDIDRTSLAGDARLGLSRRTALTGTVGLSGQDSDLRAGTSVRVRDGATVGASVGLSGGGSGGDSGSASGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSGSG

python3 sample.py --model progen2-oas --t 0.8 --p 0.9 --max-length 1024 --num-samples 1 --context "1" outputs 1SETLSLTCTVSGGSISSYYWSWIRQPPGKGLEWIGYIYYSGSTNYNPSLKSRVTISVDTSKNQFSLKLSSVTAADTAVYYCARSLYDYVWGSYRYSDAFDIWGQGTMVTVSS2

python3 sample.py --model progen2-oas --t 0.8 --p 0.9 --max-length 1024 --num-samples 1 --context "1EVQ" outputs 1EVQLVESGGGLVQPGGSLRLSCAASGFTFSSYAMSWVRQAPGKGLEWVSAISGSGGSTYYADSVKGRFTISRDNSKNTLYLQMNSLRAEDTAVYYCAKSGAPRRLVGATRGGDYWGQGTLVTVSS2

python3 sample.py --model progen2-large --t 0.8 --p 0.9 --max-length 1024 --num-samples 1 --context "1" outputs 1MKENSFLERSFRKGLALLLTFTLALTLFSAGASPAYAADPEGGTLESVSEQTETTDSGDTAPEEETEEETAEEADVTEEEEEESAEDTEEDAEDTEEADATEEEEEDTAEDAEDAEDSEDTEEESEDTEDAEDTEDAEDTEDAEDTEDAEDTEDTEDTEDAEDTEDAEDTEDTEDTEDAEDTEDAEDTEDAEDTEDAEDTEDTEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTEDAEDTE

Thanks again for the changes. Closing the issue now.