Skip to content

Weekly Report #1

Soyoung Cho edited this page Feb 13, 2020 · 22 revisions

2월 2째 주 주간보고서

2월 10일 (월)

  • 한영 번역 데모 제작하신 분께 메일로 문의한 결과 다음과 같이 답변 해주심.

    1. 코드 : Fairseq , Tensor2Tensor 보는 것 추천
    2. 데이터 단위 : Subword Tokenization - BPE, SentencePiece
    3. 전처리 : Parallel Corpus Filtering 모듈(박찬준), 글자수 80 글자 미만 이런 제한

2월 11일 (화)

  • 전처리 공부 팀 / 코드 수정 팀 나누었다.

  • Pytorch seq2seq + attention translation tutorial 수정 (문장 입력 파트)

    • 띄어쓰기 단위로 split, 문장의 단어 개수를 제한하여 인코더, 디코더에 사용
    • AI Hub 데이터셋 일부 돌려보았으나 성능은 낮은 편. (특히 앞 부분 번역은 잘하다가 뒤에 잘 못하는 경우 있었음)
  • tatoeba 데이터셋 추가 다운로드 (tatoeba) -> 약 3300 문장, 대체로 짧은 구어체.

    • tatoeba 데이터셋 간단 전처리하여 AI HUB 데이터셋과 결합
  • 데이터셋 EDA 진행

    1. 중복 여부 파악, 제거
    • 중복 제거 전 : 1,606,026 문장
    • 중복 제거 후 : 1,603,529 문장 (2497개 중복 제거)
      • AI Hub 데이터셋, tatoeba 데이터셋 합치고 중복 제거한 파일을 'datalist.csv'로 저장.

    1. 문장 별 단어 길이 파악
    • 한글 문장 중 가장 많은 단어 개수 가진 문장 : 89개, 영어 문장 중 가장 많은 단어 개수 가진 문장 : 993개의 단어 가지고 있었음.
    • boxplot 그려본 결과 다음과 같음. (좌 : 한글 문장에서의 단어 개수 , 우 : 영어 문장에서의 단어 개수)
    • 아웃라이어 처리 고민 필요.
  • subword tokenization 공부하기 좋아보이는 링크

    • BPE, SentencePiece 내용 있음.

논의 사항

  1. 새로운 데이터셋 사용 여부 ? 대화체. 사용하기로 함

  2. 여러 문장이 같이 묶여 있는 경우, : 와 ; 로 연결된 긴 문장의 경우 처리 방법? ==> 코드로 구분하기에 예외사항이 많기에 단어 / 글자 수로 제한을 두어 전처리 할 듯.


2월 12일 (수)

  • 데이터 10만개, Pytorch tutorial 로 돌린 결과 약 10시간 소요, but 성능 아예 안 나옴. -> 코드의 한계 같음. loss 약 7, 하지만 BLEU와 같은 다른 평가 지표 사용 필요할듯.

  • BLEU 구현방식에 관한 링크

  • NMT 구현 코드가 있다는 링크

  • 위키독스 링크

  • BPE 코드 돌린 결과 데이터셋 크면 어느정도 성능 나옴.

  • SentencePiece(Word Piece Model) 참고 링크

  • 참고! (추후 진행) location base attention이 긴 문장에 대해서도 성능이 좋다고 함.

  • 데이터셋 EDA 추가 진행

    1. 띄어쓰기 대신 이상한 문자 있었음 -> 제거 후 다시 저장 datalist_modified.csv
    2. 한글 문장 단어 개수 정렬
    • 가장 긴 문장 (89개 단어)는 여러 문장으로 이루어져 있음
    • 그 외 긴 문장들은 법 조항 관련 문장
    • 가장 짧은 문장들 (1개 단어) 중 띄어쓰기가 안된 문장들 있음
    1. 영어 문장 단어 개수 정렬
    • 긴 문장들의 경우 띄어쓰기 / 공백이 지나치게 많음
    • 짧은 문장들의 경우 번역이 안되어 있음 (. 혹은 x)

위 사항 논의 필요.

2월 13일 (목) 오프라인

  • NMT에서 반복 , 엉뚱한 말 번역의 문제 -> 전처리와 후처리

  • 핑퐁 전처리 게시물 참고함 -> BPE VS MECAB VS SENTENCEPIECE

    • SentencePiece 쪽으로 할 듯.
    • SentencePiece는 신조어에 강하고 매우 빠름. unknown 토큰 처리에 좋다 (빈도 기반)
      -> mecab과의 눈에 띄는 차이는 사전의 유무인 것 같음.
      -> train하는 데이터의 양이 많아진다면 mecab과 비슷한 성능을 낼 것이라 기대함.
    • mecab은 사전이 있고 형태소 기반이기에 의미 파악 잘함. but 신조어에 약함.
  • 한글을 subword tokenize하면 영어는 어떻게 같이 들어가는지?

    • 한글, 영어 둘 다 같이 분리. 분리 후 one-hot 인코딩으로 된 벡터들이 인풋으로 들어가는듯?
  • SentencePiece README 보는데 MECAB과 함께 사용할 수 있나? Pre-tokenization (Moses tokenizer/MeCab/KyTea) is not always required. 이렇게 적혀 있어서.

    • YES. 같이 사용 하면 성능 더 높게 나온다고 함 (BCJ님 논문)

다음 미팅까지 할 것

  • 데이터 어떻게 들어가는지 알아볼 것.
    (ex) src_vocab, tar_vocab 으로 넣어서 하는 NMT 코드 (kh-kim 글 - simple nmt) 돌려보기 (dataloader 부분)
  • 전체적인 NMT process 공부하기 (ex) jointly aligning ~ 논문)
  • 데이터 전처리에 필요한 rule 추가하기 (ex. 번역이 안된 문장 제거 등)
  • 데이터셋의 과도한 공백 -> strip()으로 앞뒤 공백 제거하자
  • 특수 문자 처리 고민 (.!? 등)
  • Parallel Corpus Filtering 에 대해 공부 (BCJ님 논문 참고)
  • Mecab + SentencePiece 함께 사용할 수 있는 방법 공부해보기 (어디 단계에서 적용되는지)

Clone this wiki locally