boostcampaitech2 / klue-level2-nlp-02

klue-level2-nlp-02 created by GitHub Classroom
0 stars 6 forks source link

Sangha2 #11

Closed sangHa0411 closed 3 years ago

sangHa0411 commented 3 years ago

충돌이 일어나는 이유는 제가 기성님 merge된 코드를 pull 하지 않고 바로 올려서 그런 것 같습니다. 실험 결과 나오고 방향 정해지면 정확히 작성해서 pull request 다시 신청하도록 하겠습니다.

  1. preprocessor.py 에서 오는 preprocess_sen 함수를 사용하지 않도록 수정했습니다.

  2. 전역 변수 설정을 아래와 같이 하였습니다.

    TAG_DICT = {'PER' : '인물', 'ORG' : '기관', 'DAT' : '날짜', 'LOC' : '위치', 'NOH' : '수량' , 'POH' : '기타'}
    SUB_TOKEN1 = '▲'
    SUB_TOKEN2 = '▫'
    OBJ_TOKEN1 = '◈'
    OBJ_TOKEN2 = '☆'
  3. preprocess_data 함수를 변형했습니다.

    def preprocessing_dataset(dataset):
    """ 처음 불러온 csv 파일을 원하는 형태의 DataFrame으로 변경 시켜줍니다."""
    subject_entity = []
    object_entity = []
    sen_data = []
    for s, i, j in zip(dataset['sentence'], dataset['subject_entity'], dataset['object_entity']):
    sub_info=eval(i) # 정보를 다 가져왔습니다.
    obj_info=eval(j)
    
    subject_entity.append(sub_info['word']) # 단어 정보를 추가하였습니다.
    object_entity.append(obj_info['word'])
    
    # 인덱스 정보, 타입 정보를 가져왔습니다.
    sub_type = sub_info['type'] 
    sub_start = sub_info['start_idx']
    sub_end = sub_info['end_idx']
    obj_type = obj_info['type']
    obj_start = obj_info['start_idx']
    obj_end = obj_info['end_idx']
    
    sen = add_sep_tok(s, sub_start, sub_end, sub_type, obj_start, obj_end, obj_type)
    sen_data.append(sen)
    
    out_dataset = pd.DataFrame({'id':dataset['id'], 
    'sentence':sen_data,
    'subject_entity':subject_entity,
    'object_entity':object_entity,
    'label':dataset['label'],}
    )
  4. 기성님이 아이디어 및 코드를 주셨는데 제가 연습해보고 싶어 직접 구현해봤습니다.

    
    def add_sep_tok(sen, sub_start, sub_end, sub_type, obj_start, obj_end, obj_type) :
    # type을 위에 있는 Dictionary를 활용해 한국어 단어로 변경합니다.
    sub_tok = TAG_DICT[sub_type]
    obj_tok = TAG_DICT[obj_type]
    
    # 아래 코드가 너무 길어질 것 같아서 위에서 토큰을 만들었습니다.
    # 아래에 13으로 설정한 이유는 위의 sub_start_tok, sub_end_tok 를 먼저 추가하게 되면 문장의 길이가 13이 늘어나서 뒤에 있는 obj_start,   및 , obj_end 에다가 13을 각각 더해줘서 위치를 재조정하였습니다.
    sub_start_tok = ' ' + SUB_TOKEN1 + ' ' + SUB_TOKEN2 + ' ' + sub_tok + ' ' + SUB_TOKEN2 + ' '
    sub_end_tok = ' ' + SUB_TOKEN1 + ' '
    obj_start_tok = ' ' + OBJ_TOKEN1 + ' ' + OBJ_TOKEN2 + ' ' + obj_tok + ' ' + OBJ_TOKEN2 + ' '
    obj_end_tok = ' ' + OBJ_TOKEN1 + ' '
    
    if sub_start < obj_start :
    sen = sen[:sub_start] +  sub_start_tok + sen[sub_start:sub_end+1] + sub_end_tok + sen[sub_end+1:]
    obj_start += 13
    obj_end += 13
    sen = sen[:obj_start] + obj_start_tok + sen[obj_start:obj_end+1] + obj_end_tok + sen[obj_end+1:]
    else :
    sen = sen[:obj_start] + obj_start_tok + sen[obj_start:obj_end+1] + obj_end_tok + sen[obj_end+1:]
    sub_start += 13
    sub_end += 13
    sen = sen[:sub_start] + sub_start_tok + sen[sub_start:sub_end+1] + sub_end_tok + sen[sub_end+1:]
    return sen
gistarrr commented 3 years ago

저도 한글로 해주면 더 좋을 것 같다고 생각했어요! 지금 dev branch 받으셔서 충돌만 해결해주시면 좋을 것 같습니다!