forus-ai / KoGPT2-Lyrics-Generation-FineTuning-Version1

Korean GPT-2, KoGPT2 FineTuning cased. 한국어 가사 데이터 학습
https://github.com/gyunggyung/KoGPT2-FineTuning
Apache License 2.0
20 stars 7 forks source link

dataset 만드는 방법 #1

Open HyoilKim opened 4 years ago

HyoilKim commented 4 years ago

안녕하세요 :) dataset 관련 질문이 있어서 글을 남깁니다. 먼저 많은 질문을 해서 죄송합니다 ㅜㅜ

data.py의 Read_Dataset을 통해 dataset을 만들었다고 해석했습니다.

54줄 lines = lines.split("<|endoftext|>")

  1. 해당 코드에 lines 변수는 해당 파일에 정의되어 있지 않은데 어떤 변수인지 궁금합니다.

  2. 만약 lines 변수에 data의 전체가 들어있다면 어떻게 만들었는지도 궁금합니다.

  3. 60~69줄 코드는 20line을 하나의 데이터로 묶었는데 20이라는 숫자는 어떻게 설정했는지 궁금합니다.

78줄 toeknized_line = tokenizer(line[:-1])

  1. 이 부분에서 toknizer를 사용하여 마지막 전 data만 실제 data로 사용하는지 궁금합니다.

귀찮으실탠데 답변 주시면 정말 감사하겠습니다.

gyunggyung commented 4 years ago

안녕하세요.

54줄 lines = lines.split("<|endoftext|>")

  1. 해당 코드에 lines 변수는 해당 파일에 정의되어 있지 않은데 어떤 변수인지 궁금합니다. -> 이전에 사용했었는데 지금은 사용하지 않고 있습니다. 지워야되는데 알려주셔서 감사합니다 ㅎㅎㅎ

  2. 만약 lines 변수에 data의 전체가 들어있다면 어떻게 만들었는지도 궁금합니다. -> 이거는 어떤 의미일까요? 그렇게 가정을 했을 때 이야기인가요?

  3. 60~69줄 코드는 20line을 하나의 데이터로 묶었는데 20이라는 숫자는 어떻게 설정했는지 궁금합니다. -> 사실 큰 의미는 없습니다. 20줄 정도면 학습하기에 괜찮겠구나 이렇게 생각을 했습니다. 수정하셔도 괜찮습니다.

  4. 이 부분에서 toknizer를 사용하여 마지막 전 data만 실제 data로 사용하는지 궁금합니다. 78줄 toeknized_line = tokenizer(line[:-1]) -> 이렇게 해서 마지막 부분을 예측하는 테스트를 진행합니다 :)

추가로 질문이 있으시면 언제든지 올려주세요!

감사합니다.

gyunggyung commented 4 years ago

만약 lines 변수에 data의 전체가 들어있다면 어떻게 만들었는지도 궁금합니다. -> 이거에 대한 답변이 맞을지 모르겠지만 제가 데이터를 처리한 방법은 다음과 같습니다.

lines에서 모든 데이터를 입력을 받습니다. 그리고 각각의 요소의 데이터들이 존재합니다. 해당 요소를 line.split("\n") 코드로 한 줄 단위로 바꿉니다.

for 문을 통해서 이제 그 한줄 한줄의 값들을 이용 부분은 아래와 같습니다. 한줄의 가사 l이고 20줄 정도를 하나의 데이터로 사용합니다.

            for i, l in enumerate(line):
                if i % 20 == 0 and i != 0:
                    datasets.append(now)
                    now = ""
                now = now + "\n" + l
                if i == len(line) - 1:
                    datasets.append(now)
HyoilKim commented 4 years ago

정성껏 답변 해주셔서 감사합니다. 추가 질문이 있습니다.

  1. 53줄 lines = [line.split("\n") for line in lines] 에서 lines 변수가 같은 파일에서 정의한 부분이 없는데 어디서 가져오신건가요??

  2. 20줄 정도의 가사를 하나의 데이터로 사용할 때, 한 곡당 20줄의 내용만 선택 하신건가요?

  3. main.py 102줄의 kogpt2model = GPT2LMHeadModel(config=GPT2Config.from_dict(kogpt2_config)) 에서 GPT2LMHeadModel의 init을 보면 self.transformer = GPT2Model(config) 다음과 같이 되어 있습니다. 그리고 GPT2Model의 init에는 output_past 변수가 존재합니다. 하지만 초기 main 함수에 정의된 kogpt2_config에는 output_past변수가 없어서 에러가 발생 하는데, 이부분에 있어서 도움을 받을 수 있을까요??

또 질문 읽어주셔서 정말 정말 감사합니다.

gyunggyung commented 4 years ago
  1. 53줄 lines = [line.split("\n") for line in lines] 에서 lines 변수가 같은 파일에서 정의한 부분이 없는데 어디서 가져오신건가요??

  2. 20줄 정도의 가사를 하나의 데이터로 사용할 때, 한 곡당 20줄의 내용만 선택 하신건가요?

    • 모든 가사들을 하나의 텍스트로 바꿉니다. 그후 20줄씩 나눠서 학습에 사용합니다.
  3. 하지만 초기 main 함수에 정의된 kogpt2_config에는 output_past변수가 없어서 에러가 발생 하는데, 이부분에 있어서 도움을 받을 수 있을까요??

    • pytorch_kogpt2에서 모델의 url을 불러와서 사용합니다! 쓸 수 있는 url을 올려야겠군요 ㅎㅎ

제가 곧 1, 3번 문제를 해결하고 말씀드리겠습니다 :)

감사합니다.

HyoilKim commented 4 years ago

답변 주셔서 정말 감사합니다.

저도 열심히 해보겠습니다.