CodeGen[[Codegen]]
๊ฐ์[[Overview]]
CodeGen ๋ชจ๋ธ์ Erik Nijkamp, Bo Pang, Hiroaki Hayashi, Lifu Tu, Huan Wang, Yingbo Zhou, Silvio Savarese, Caiming Xiong์ด ์์ฑํ ๋ ผ๋ฌธ A Conversational Paradigm for Program Synthesis์์ ์ ์๋์์ต๋๋ค.
CodeGen ๋ชจ๋ธ์ ํ๋ก๊ทธ๋จ ํฉ์ฑ(program synthesis)์ ์ํ ์๊ธฐํ๊ท(autoregressive) ์ธ์ด ๋ชจ๋ธ๋ก, The Pile, BigQuery, BigPython ๋ฐ์ดํฐ๋ก ์์ฐจ์ ์ผ๋ก ํ์ต๋์์ต๋๋ค.
๋ ผ๋ฌธ์ ์ด๋ก์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
ํ๋ก๊ทธ๋จ ํฉ์ฑ(program synthesis)์ ์ฃผ์ด์ง ๋ฌธ์ ๋ช ์ธ์ ๋ํ ํด๋ต์ผ๋ก ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ์ด ๋ ผ๋ฌธ์์๋ ๋๊ท๋ชจ ์ธ์ด ๋ชจ๋ธ(LLM)์ ํ์ฉํ ๋ํํ ํ๋ก๊ทธ๋จ ํฉ์ฑ(conversational program synthesis) ์ ๊ทผ๋ฒ์ ์ ์ํ์ฌ, ๊ธฐ์กด ์ ๊ทผ๋ฒ์์์ ๋ฐฉ๋ํ ํ๋ก๊ทธ๋จ ํ์ ๊ณต๊ฐ๊ณผ ์ฌ์ฉ์์ ์๋๋ฅผ ๋ช ์ธํํ๋ ๊ณผ์ ์์์ ์ด๋ ค์์ ํด๊ฒฐํฉ๋๋ค. ์ ์๋ ๋ฐฉ์์์๋ ํ๋ก๊ทธ๋จ ๋ช ์ธ ์์ฑ๊ณผ ์ค์ ํ๋ก๊ทธ๋จ ์์ฑ์ ์ฌ์ฉ์์ ์์คํ ๊ฐ ๋คํ ๋ํ(multi-turn conversation)๋ก ๋ฐ๋ผ๋ด ๋๋ค. ์ฆ, ํ๋ก๊ทธ๋จ ํฉ์ฑ ๊ณผ์ ๋ช ์ธ๋ฅผ ์์ฐ์ด๋ก ํํํ๊ณ , ๊ธฐ๋ํ๋ ํ๋ก๊ทธ๋จ ํฉ์ฑ์ ์กฐ๊ฑด๋ถ๋ก ์์ธกํ์ฌ ์์ฑํ๋ ์ผ์ข ์ ์์ฐจ์ ์์ธก ๋ฌธ์ (sequence prediction problem)๋ก ์ ๊ทผํ์ต๋๋ค. ์ด๋ฅผ ์ํด ์์ฐ์ด์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก CodeGen์ด๋ผ๋ ๋๊ท๋ชจ ์ธ์ด ๋ชจ๋ธ ๊ทธ๋ฃน์ ํ์ต์์ผฐ์ผ๋ฉฐ, ๋ฐ์ดํฐ๋ก๋ถํฐ ์ฝํ ์ง๋(weak supervision)์ ๋ฐ์ดํฐ ๋ฐ ๋ชจ๋ธ ๊ท๋ชจ์ ํ์ฅ๋ง์ผ๋ก๋ ๋ชจ๋ธ์ด ์์ฐ์ค๋ฝ๊ฒ ๋ํ ๋ฅ๋ ฅ์ ๊ฐ์ถ๊ฒ ๋๋ค๋ ์ ์ ํ์ธํ์์ต๋๋ค. ๋ํด์ ๋ชจ๋ธ์ ๋ํํ ํ๋ก๊ทธ๋จ ํฉ์ฑ ๋ฅ๋ ฅ์ ํ๊ฐํ๊ธฐ ์ํด ๋คํ ๋ํ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ ๋ฒค์น๋งํฌ(MTPB)๋ฅผ ๊ฐ๋ฐํ์ต๋๋ค. ์ด ๋ฒค์น๋งํฌ๋ ๊ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉ์์ ๋ชจ๋ธ ๊ฐ ์ฌ๋ฌ ๋จ๊ณ์ ๋ํ๋ฅผ ๊ฑฐ์ณ ํ๋ก๊ทธ๋จ์ด ์ ์ง์ ์ผ๋ก ํฉ์ฑ๋๋ ๊ณผ์ ์ ์๊ตฌํฉ๋๋ค. ์ฐ๊ตฌ ๊ฒฐ๊ณผ, CodeGen ๋ชจ๋ธ์ ๋ํํ ๋ฅ๋ ฅ์ ์ฑ๊ณต์ ์ผ๋ก ๋ฐํํ์ผ๋ฉฐ ๋ณธ ๋ ผ๋ฌธ์์ ์ ์ํ ๋ํํ ํฉ์ฑ ํจ๋ฌ๋ค์์ ์ฐ์์ฑ๊ณผ ํจ์จ์ฑ์ ์ ์ฆํ์ต๋๋ค. ํนํ 16B ํ๋ผ๋ฏธํฐ ๊ท๋ชจ๋ก TPU-v4์์ ํ์ต๋ CodeGen ๋ชจ๋ธ์ HumanEval ๋ฒค์น๋งํฌ์์ OpenAI์ Codex๋ฅผ ๋ฐ์ด๋๋ ์ฑ๋ฅ์ ๊ธฐ๋กํ์ต๋๋ค. ํ์ต๋ ์ฌ์ฉ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ JaxFormer์ ๋ชจ๋ธ ์ฒดํฌํฌ์ธํธ๋ ์คํ์์ค๋ก ๊ณต๊ฐ๋์์ต๋๋ค: ์ด https URL์์ ํ์ธํ์ธ์.
์ด ๋ชจ๋ธ์Hiroaki Hayashi๊ฐ ๊ธฐ์ฌํ์ต๋๋ค. ๋ชจ๋ธ์ ์๋ณธ ์ฝ๋๋ ์ฌ๊ธฐ์ ์์ต๋๋ค.
์ฒดํฌํฌ์ธํธ ๋ช ๋ช ๊ท์น[[Checkpoint Naming]]
- CodeGen ๋ชจ๋ธ์ ์ฒดํฌํฌ์ธํธ๋ ์๋ก ๋ค๋ฅธ ์ฌ์ ํ์ต ๋ฐ์ดํฐ์ ๋ค์ํ ํฌ๊ธฐ๋ก ์ ๊ณต๋ฉ๋๋ค.
- ์ฒดํฌํฌ์ธํธ์ ํ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
Salesforce/codegen-{size}-{data}size:350M,2B,6B,16Bdata:nl: The Pile ๋ฐ์ดํฐ๋ก ์ฌ์ ํ์ต๋ ๋ชจ๋ธmulti:nl๋ชจ๋ธ์์ ์์ํ์ฌ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ํ์ตํ ๋ชจ๋ธmono:multi๋ชจ๋ธ์์ ์์ํ์ฌ ์ถ๊ฐ๋ก Python ๋ฐ์ดํฐ์ ๋ํด ํ์ต๋ ๋ชจ๋ธ
- ์๋ฅผ ๋ค์ด,
Salesforce/codegen-350M-mono๋ 3์ต 5์ฒ๋ง(350M) ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ชจ๋ธ๋ก, The Pile, ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด, Python ๋ฐ์ดํฐ์ ์์๋ก ๋จ๊ณ์ ์ผ๋ก ํ์ตํ ์ฒดํฌํฌ์ธํธ๋ฅผ ์๋ฏธํฉ๋๋ค.
์ฌ์ฉ ์์[[Usage example]]
>>> from transformers import AutoModelForCausalLM, AutoTokenizer
>>> checkpoint = "Salesforce/codegen-350M-mono"
>>> model = AutoModelForCausalLM.from_pretrained(checkpoint)
>>> tokenizer = AutoTokenizer.from_pretrained(checkpoint)
>>> text = "def hello_world():"
>>> completion = model.generate(**tokenizer(text, return_tensors="pt"))
>>> print(tokenizer.decode(completion[0]))
def hello_world():
print("Hello World")
hello_world()
์๋ฃ[[Resources]]
CodeGenConfig
[[autodoc]] CodeGenConfig - all
CodeGenTokenizer
[[autodoc]] CodeGenTokenizer - create_token_type_ids_from_sequences - save_vocabulary
CodeGenTokenizerFast
[[autodoc]] CodeGenTokenizerFast
CodeGenModel
[[autodoc]] CodeGenModel - forward
CodeGenForCausalLM
[[autodoc]] CodeGenForCausalLM - forward