ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • word2vec, auto labeling, text generation, abstrative summarization에 관한 초보적인 실험
    카테고리 없음 2019. 12. 12. 12:26

    목표:

    1. [word2vec] word2vec 모델을 통해서 동의어를 얻어낸다.

    2. [auto labeling] MLP(Multi Layer Perceptron)으로 많은 양의 텍스트를 높은 품질로 분류한다.

    3. [text generation] LSTM으로 높은 품질의 문장을 생성한다.

    4. [abstractive summarization] seq2seq으로 높은 품질의 abstractive summarization 모델을 구현한다. 

     

    요약:

    1. word2vec 모델을 통해서는 좋은 수준의 동의어를 얻기가 어렵다.

    2. LSTM의 문장생성 모델은 정확도가 높아지면 코퍼스내의 문장을 그대로 출력하게 된다.

    3. 전이학습을 한 seq2seq 모델이 전이학습이 없는 모델에 비해서 참신한 문장을 출력한다.

    4. MLP 문장 분류 모델은 중복이 허용된 라벨 방식이기 때문에 출력단 활성화함수를 sigmoid를 선택해야 한다.


    실험내용:

    잡코리아에서 크롤링한 자기소개서 6,000건을 코퍼스로 하여 실험을 진행했습니다.


    Word2vec

    word2vec을 통한 동의어 추출

    word2vec은 언어학의 분포가설(distributional hypothesis)[*]을 전제로하는 단어 임베딩 모델으로서, 유사한 의미를 갖는 단어들끼리 높은 유사도 값을 갖도록 벡터공간에 임베딩시킵니다. word2vec의 특정 훈련알고리즘에 의해서 iteration이 충분히 진행되었을 때, 이상적인 결과로서 단어 벡터끼리의 덧셈연산이 가능하게 됩니다.

    King - Queen + Aunt= Uncle

    또한 cosine similarity를 척도로 주어진 query 단어에 대하여 most similar 단어를 출력하여, 해당 단어와 유사한 단어들을 결과로 얻을 수 있습니다.

     

    따라서 word2vec의 임베딩 특성과 most similar 특성을 활용하면 동의어를 추출할 수 있습니다.

     

    자기소개서 6,000건을 코퍼스로하고 iteration을 달리하여 word2vec을 학습시키고, 또 박규병님의 word2vec 모델을 이용하여, 아래의 결과를 얻었습니다.

     

    iter = 1 iter = 10 iter = 100 박규병 word2vec
    증가 -> 대비(0.96),
    increase -> contrast
    증가 ->감소(0.69),
    increase -> decrease
    증가 ->감소(0.60),
    increase -> decrease
    증가 -> 감소(0.92),
    increase -> decrease
    마음가짐 -> 배움(0.97),
    mental attitude -> learning
    마음가짐 -> 자세(0.60),
    mental attitude -> posture, attitude
    마음가짐 -> 자세(0.54),
    mental attitude -> posture, attitude
    마음가짐 -> OOV,
    mental attitude -> OOV(out of vocab)
    전문가 -> 한솔섬유(0.96),
    expert -> Hansol textile(company in Songpa-gu, Seoul)
    전문가 -> 스페셜리스트(0.49),
    expert -> specialist
    전문가 -> 스페셜리스트(0.56),
    expert -> speicalist
    전문가 -> 연구자(0.71),
    expert -> researcher
    훈련 -> 선언문(0.97)
    training -> declaration
    훈련 -> 교관(0.54)
    training -> instructor
    훈련 -> 교관(0.39)
    training -> instructor
    훈련 -> 재교육(0.65)
    training -> retraining
    발표 -> 제출(0.97),
    announcement, presentation -> submission
    발표 -> 제출(0.49),
    announcement, presentation -> submission
    발표 -> 제출(0.47),
    announcement, presentation -> submission
    발표 -> 공표(0.64),
    announcement, presentation -> official announcement
    행복 -> 몽상가(0.96)
    happiness -> dreamer
    행복 -> 감동(0.63)
    happiness -> being be moved
    행복 -> 감동(0.63)
    happiness -> being be moved
    행복 -> 사랑(0.67)
    happiness -> love

     

    iteration 1에서 10으로 되었을 때, 결과의 품질이 좋아졌다고 판단할 수 있습니다. iteration이 1일 때 모든 query word에 대하여 most similar word가 높은 cosine similarity값과 함께 동의어라고 보기 어려운 단어들이 나오고 있음을 확인할 수 있습니다. 특히 bad case로, 전문가라는 단어에 대하여 한솔섬유이라는 회사명이 나오고 있는 사례가 가장 눈에 띄고 있습니다. 이 단어는 iteration 10이 되었을 때 스페셜리스트라는 납득할만한 결과를 출력해주었습니다.

     

    그러나 iteration이 100이 되었지만, 여전히 일부 단어에 대하여 동의어라고는 보기 어려운 단어가 나오고 있습니다. query word "증가"에 대하여 반의어인 "감소"가 나왔으며,  "발표"에 대하여 "제출"이 출력되었습니다. 이에 비해 wikidata로 학습된 박규병님의 word2vec 모델에서는 "발표"에 대하여 "공표"라는 동의어에 가까운 단어가 출력되었습니다. 이렇게 박규병님의 모델에서 더 좋은 결과가 나온 이유는 자기소개서 코퍼스가 35Mb인데 비하여 wikidata 코퍼스가 80Mb정도로 훨씬 더 많은 텍스트를 가지고 있기 때문이라고 판단됩니다.

     

    하지만 "마음가짐"이라는 단어에 대해서는 박규병님의 모델에서는 OOV(out of vocab)으로 출력 결과가 없는데 비하여, 자기소개서 코퍼스의 모델에서는 "자세"라는 동의어에 가까운 단어가 출력되었습니다. 이는 특정 태스크에 맞는 코퍼스를 활용하면 해당 글 영역에서 사용되는 단어에 대하여 모델이 잘 기능할 수 있다고 볼 수 있습니다. 따라서 좀더 좋은 품질의 동의어를 출력하기 위해서는, 특정 태스크 영역의 코퍼스와 방대한 크기의 코퍼스를 모두 활용했을 때 좋은 성능을 낼 수 있을 것이라고 생각됩니다.

     

    그외로 이 표의 결과로부터 관찰한 것은 iteration 10에서 100으로 되었을 때, most similar word의 결과가 동일한 상태에서, cosine similarity의 값이 대체로 변화한다는 점입니다. 그 원리는, "동의어로 보기 어려운 단어에 대하여 그 값이 감소하고 동의어로 여겨지는 단어에 대하여는 그 값이 증가한다"는 것으로 추측됩니다. 이 규칙이 아래 결과에 대하여 일부 사례에 대하여는 합치되고 있습니다.

     

    iter = 10 iter = 100 변화량 품질 판정 규칙 합치 여부
    증가 ->감소(0.69),
    increase -> decrease
    증가 ->감소(0.60),
    increase -> decrease
    -0.09 반의어 합치
    마음가짐 -> 자세(0.60),
    mental attitude -> posture, attitude
    마음가짐 -> 자세(0.54),
    mental attitude -> posture, attitude
    -0.06 좋음 불합치
    전문가 -> 스페셜리스트(0.49),
    expert -> specialist
    전문가 -> 스페셜리스트(0.56),
    expert -> speicalist
    +0.07 좋음 합치
    훈련 -> 교관(0.54)
    training -> instructor
    훈련 -> 교관(0.39)
    training -> instructor
    -0.15 행위-행위자 합치
    발표 -> 제출(0.49),
    announcement, presentation -> submission
    발표 -> 제출(0.47),
    announcement, presentation -> submission
    -0.02 연관있음 불합치
    행복 -> 감동(0.63)
    happiness -> being be moved
    행복 -> 감동(0.63)
    happiness -> being be moved
    0 연관있음 불합치

     

    또한 cosine similarity가 얼마값이 되어야 그 단어를 query word에 대하여 동의어로 판정할 수 있나 그 기준에 대해서도 고민해볼만하다고 생각됩니다. 위에서 비교한 모든 사례를 보았을 때, most similar word로 얻어졌다고 하여, 무조건적으로 동의어로 판정할 수는 없다고 파악됩니다.

     

    TSNE를 통한 word2vec 시각화와 실제 유사도와의 괴리

    word2vec을 시각화는 TSNE를 사용하여 고차원의 단어 벡터를 이차원으로 축소하여 처리되었는데, 그래프에서 보여지는 가까운 정도와 달리 실제 cosine similarity와 euclidean distance의 결과는 달랐습니다.

    word2vec 시각화 (query word : 경험) 파란선은 원점으로 이어짐

    query word, 경험에 대하여 "역량"이 0순위였고, "깨달음"이 3순위였으나, 그래프에서는 "깨달음"이 제일 가까운 것으로 보입니다. 따라서 TSNE의 차원축소를 이용한 word2vec의 시각화에서는 대략적인 유사도 정도를 직관적으로 읽는데 적합하고, 보다 면밀한 유사도를 가늠하기에는 부적합하다는 것입니다.

     

    dist./ word cos similarity Euclidean dist.
    "역량(capability)" [closer] 0.42 1.08
    "깨달음(realization)" [farther] 0.40 1.10

     

    추가로 공부할 것

    word2vec에서 추가로 공부할 것으로 유사도 척도를 euclidean distance 쓰는 경우, cosine similarity의 경우에 대해서 갖는 차이를 비교해보려고 합니다. 그리고, 실험결과 동의어로 보기에 어려운 단어들이 많이 나오고 있어서, 근본적인 관점에서 word2vec을 통해 동의어가 얻어지는 것이 가능한 것인지와 이 모델의 전제인 분포가설의 좀더 자세한 내용에 대하여 공부해보려고 합니다.


    Auto labeling

    MLP를 이용한 문장의 분류 모델 구현

    text generation 모델과 abstractive summarization 모델의 품질을 높이기 위하여, 코퍼스를 특정 카테고리로 나누어 세분화할 필요성이 대두되었습니다. 그러나 그 양이 약 24,000건으로 사람이 직접 모두 라벨링하기에는 어려움이 있어, 이를 자동화할 수 있는 모델을 구현하고자 하였습니다. 총 6,000건의 자기소개서는 평균 4건의 질문 문항과 그에 대한 자기소개서 작성자의 답변으로 약 24,000건의 질문-답변 쌍으로 구성됩니다. 질문 문항의 내용에 따라 아래 표의 9가지 카테고리로 분류하였습니다. 

     

    label No.

    category

    0 성장과정
    Growth process
    1 성격 장단점, 생활신조 / 윤리의식(환경, 직업윤리)
    Personality, principles in life / ethics(environment, vocational ethics)
    2 직무역량 / 강약점 / 직무상의 강약점, 학과, 자격증
    Job competency / strength and weakness / major, certificates
    3 지원동기 및 입사후 포부 / 입사를 위한 준비과정 / 회사 이해도 / 입사 후 제안 서비스
    Reason for application / preparation for application / comprehension on company
    4 사회경험(인턴, 동아리, 공모전, 봉사활동, 아르바이트 및 학창시절) / 도전, 성취 경험 /
    Practical experience(Internship, club activity, contest, voluntary, part time job, school days) / challenge, achievement /
    5 경력사항(일을 했던 경력)
    Work experience
    6 사회이슈
    Essay on social issue
    7 조직적응력, 사회성(대인관계) 팀워크 / 소통 / 리더십
    Teamwork / communication skills / leadership
    8 문제해결력 / 의사결정 / 우선순위 / 시나리오 문제
    Problem solving skills / decision making / priority / scenario problems

     

    Dense 레이어를 활용한 단순한 모델을 통해서 auto labeling 태스크를 실현하고자 했습니다. 사람이 약 1,000건의 질문 문항에 직접 label을 달고, 그것을 학습한 모델을 통해서 나머지 23,000건의 질문 문항을 자동으로 label을 달고자 했습니다.

     

    N-hot encoding과 활성화함수

    아래와같은 질문 문항이 있어서 카테고리의 분류 기준을 세우는 것이 중요했습니다.

    자신의 성장과정부터 취미, 입사지원 동기, 희망업무 및 포부, 본인의 장점 및 기타 특기사항을 서술하시기 바랍니다. 

    1,000건의 질문 문항에 대하여, 하나의 카테고리로만 라벨링할 수 없는 경우가 전체의 1/3정도로 적지 않았습니다. 하나의 카테고리로 라벨링하려고 한다면, 질문 문항이 애매한 것들에 대해서 새로운 카테고리를 추가해야할 것이고, 문제는 더욱 복잡해질 것이라고 판단했습니다. 문제를 단순하게 처리하기 위해서는, 첫째로 서로 다른 내용이면서, 둘째로 종류가 너무 많아 관리에 어렵지 않도록, 많지도 적지도 않은 개수의 적당한 카테고리를 설정하는 것이 중요했습니다. 위의 9가지 카테고리로 분류 기준을 세웠고, 여기에 1,000건의 모든 질문 문항을 사람이 라벨링하기 위해서는 중복 라벨링, N-hot encoding 방식을 사용했습니다.

     

    auto labeling 모델을 구현함에 있어서 고려해야할 것으로, 보통의 multi-class classification 문제에서 target data를 one hot encoding으로 처리하는 것과 달리 N-hot encoding으로 처리되는 상황이라는 점입니다. 아래는 output 레이어에서 활성화함수를 softmax와 sigmoid로 하였을 때의 accuracy를 비교하는 그래프입니다.

    N-hot encoding이기 때문에 softmax는 수렴이 불가

    동일한 조건에서 output 레이어의 활성화함수만 바꾸었을 때의 차이입니다. 2,000 epoch이 되도록 softmax의 경우 accuracy 진동하고 있으며, sigmoid는 증가하는 경향을 보입니다. softmax는 벡터의 원소의 합이 1이 되는 방식이므로, N-hot encoding의 target data가 주어졌을 때, 정답에 수렴하는 것이 원리적으로 불가능합니다. 

    본인이 지원한 직무관련 지원동기와 역량에 대하여. 해당 직무의 지원동기를 포함하여, 직무관련 본인이 보유한 강점과 보완점을 사례를 통하여 구체적으로 기술해주시기 바랍니다.

    위의 질문 문항은 9가지 카테고리 기준의 직무 역량(2)과 지원동기(3)에 해당하기 때문에, 아래와 같이 N-hot encoding이 됩니다.

     

    label 0, 1, 2, 3, 4,  5, 6, 7, 8
    N-hot encoding [0, 0, 1, 1, 0,  0, 0, 0, 0]

     

    정답 데이터가 위와 같이 값 1이 2번째 3번째 원소에 총 2회 나타나고 있어서, 원소의 총합이 1이 되는 softmax로는 정답과 가까워 질 수 없습니다. 기껏해야 softmax의 모델은 [0, 0, 0.5, 0.5, 0,  0, 0, 0, 0] 정도를 출력해줄 것입니다. sigmoid는 벡터의 각 원소의 값을 0과 1사이의 값으로 출력해주므로 N-hot encoding의 target data에 대해서 적합합니다.

     

    model = Sequential()
    e = Embedding(vocab_size, dim_embed, weights=[embedding_matrix], \
    			input_length=max_len, trainable=False)
    model.add(e)
    model.add(Flatten())
    model.add(Dense(100, activation='sigmoid'))
    model.add(Dropout(0.2))
    model.add(Dense(100, activation='sigmoid'))
    model.add(Dropout(0.2))
    model.add(Dense(9, activation='sigmoid'))
    sgd =SGD(lr= 0.01)
    model.compile(optimizer=sgd, loss='categorical_crossentropy', metrics=['acc'])

     

    학습데이터의 분포와 예측 데이터의 분포는 유사하다

    auto labeling 모델을 학습시키기 위하여 사람이 직접 라벨링한 1,000건의 데이터는 예측 데이터의 분포와 유사합니다.

    얻어진 결과는 accuracy 71.9%, validation accuracy 55.6%으로 학습된 모델을 통해서 질문 문항 23,000건의 분류를 진행했습니다.

    좌: auto labeling의 예측 데이터 / 우: 사람이 라벨링한 학습 데이터 (질문 문항은 중복을 제거하였을 때 약 14,000건이며, 중복되는 질문 문항이더라도 자기소개서 작성자마다 다른 답변이 달려있기 때문에, 질문-답변 쌍은 24,000건으로 고유합니다)

     

    LDA 토픽 모델링과의 성능 비교 및 한계점

    LDA(Latent Dirichlet Allocation) 모델을 사용했을 때보다는 성능이 낫은 것으로 보입니다. 첫째는 LDA는 토픽의 개수밖에 설정할 수 있기 때문에 분류의 기준에 사람의 기준을 가미하는 것이 어려운 점입니다. 둘째는 LDA의 출력결과를 보면, 한 토픽내에서 사람이 보았을 때 같은 유형이라고 느껴지는 것들이 많이 나오기 때문입니다. 사실 위에서 세운 9가지의 분류에 해당하는 질문 문항이 모두 나오는 정도로 품질이 좋지 않았습니다.

     

    본 auto labeling 모델은 validation accuracy가 높지 않은 것이 한계입니다. 그 원인으로는 데이터셋의 양이 1,000건으로 많지 않으며, 균형있는 데이터 분포를 갖는 데이터셋을 구축되지 못한 점으로 판단됩니다. 모델 개선을 위해서는 더 많고 label이 균형잡힌 데이터셋을 구축한 후에 성능 개선 여부를 확인해야 합니다. 또한 loss함수로 focal loss를 사용할 때, 성능이 개선되는지 확인이 필요합니다.


    Text generation

    LSTM을 이용한 text generation

    문장의 일부가 입력되었을 때 그 내용을 바탕으로 이후의 단어를 예측하여 완성된 문장을 출력하는 모델입니다.[*] 

    경마장에 있는 말이 뛰고 있다.
    그의 말이 법이다.
    가는 말이 고와야 오는 말이 곱다.

    [*]의 저자의 예제코드로 실험한 결과 적은 epoch으로도 곧 100%의 accuracy에 도달하게 됩니다. LSTM은 학습데이터의 내용을 100% accuracy로 학습했을 때, 입력 단어에 대하여 정확한 출력을 주는 특성을 가진 것으로 생각됩니다. 정확한 출력은 코퍼스내의 문장 그대로를 출력해주며, 이것은 검색에 가까우며 문장 생성과는 거리가 멉니다. 따라서 참신한 문장을 생성하기 위해서는 정확도가 적당히 낮은 경우가 성능이 좋을 것이다라고 판단했습니다.

     

    학습데이터는 정규표현식을 사용하여 숫자, 영문자, 한글만 포함시켰고 어절단위로 tokenizing 했으며, keras의 LSTM 클래스를 이용하여 입력 sequence에 대하여 다음 단어를 출력하는 모델을 구성했습니다.

     

    세분화된 코퍼스는 특화된 문장을 출력할 것이다

    앞서 auto labeling 모델을 통해서 질문 문항의 내용에 따라 9가지 종류를 N-hot encoding으로 라벨링했습니다. text generation 모델이 자기소개서 6,000건 전체가 아니라, 토픽별로 학습을 했을 때 좀더 좋은 성능을 낼 것이라는 가정을 세우고 실험을 진행했습니다.

     

    성장과정 (0)

    조직적응력 (7)

    전체 코퍼스

    하지만 저는 제 날 한 사람들 앞에서 노래를 불렀습니다

    되돌아보며 첫날 약 여름 것으로 판매하는 없을 땐 언제 테이블과 정보가 못 않아도 과제를 했었습니다

     

    친구들은 저는 누구에게나 다른 관계 속에서 자기 속에서 화합할 수 있는 것은 없는 사람은 아직도 어려운 없습니다

     

    환경 팀 프로젝트를 하며 전공 친구들과 하여 분석하는 능력을 참 힘든 일은 정말 가장 큰 매력을 느꼈습니다

     

    시너지 효과를 바탕으로 실용적이고 객관적인 마련하여 1의 경쟁률을 뚫고 서류전형을 통과할 수 있었습니다

     

    목표 달성을 위해 및 끊임없이 가치를 위에서 찾아주는 저의 저의 인생에서 가장 큰 영향을 미칠 수 있다는 것을 깨달았습니다

    조직 모두가 또한 높은 가진 가진 서비스를 된 리스크관리부와 숙식 주어진 사고 동안 기술을 강연을 만들어 1등을 차지할 것이고 마칠 수 있었습니다

     

    소통 속에서 해답을 찾아내다 참가하는 1등을 서비스를 싶어 그 프로젝트를 반응을 공유하며 듣고 저의 문제도 통해 자리를 만들었습니다

     

    행동 수립하여 조장은 해야겠다는 있었고 고객과의 신뢰를 성공적으로 없이 여러 저의 의견에 모두 맡았습니다

     

    사회 수업 것도 일 있어서 모두 연습 준비를 들었고 많은 시간을 훈련 에너지 연락을 많은 무사히 하였습니다

    동기 예로 지원했습니다 

    문제 해결을 위해 단기적으로는 경험을 통해 쌓은 경험을 통해 쌓은 역량을 발휘할 수 있는 역량을 갖춘 인재가 되겠습니다 

     

    성장 활동을 수행하면서 다양한 경험을 통해 의사소통 능력을 길렀습니다 

    인재 중에서도 있는 경우 여러 및 실험 및 등록에 관한 다양한 사람들과 함께 하는 것이 중요하다고 생각합니다 

     

    효율성  진출에 따른 필요한 역량을 쌓을 수 있습니다

     

     

    위의 결과처럼 코퍼스를 나누어서 학습하는 경우가 좀더 이야기를 풀어내는 듯, 구체적인 사례에 관한 문장을 출력했습니다. 그에 비해 전체 코퍼스로 학습한 모델이 출력한 문장은 추상적이며, 구체적인 사례가 나타나지 못하고 있습니다.

     

    한계와 보완할 점

    accuracy는 성장과정의 경우 59.3% 조직적응력의 경우 92.5%까지 달성되었음에도 전체적으로 매끄러운 문장을 출력하고 있지는 못하고 있습니다. 또한 문장 생성 태스크이므로 학습데이터를 답변의 본문으로 한정해야 하는데, 답변의 제목이 포함되고 있는 것이 문제입니다. 아래는 본문에 사용될 문장이 아니라 제목을 생성한 것으로 보이는 예문입니다.

    소통 속에서 해답을 찾아내다 참가하는 1등을 서비스를 싶어 그 프로젝트를 반응을 공유하며 듣고 저의 문제도 통해 자리를 만들었습니다

    제목을 입력데이터에서 제외하면 이러한 문제를 개선하여 모델 성능이 다소 높아질 것으로 판단됩니다. 또한, 충분한 epoch을 거쳐서 더 높은 accuracy을 달성하여, 어떤 출력을 보이는지 확인을 해봐야 합니다. 그래도 LSTM으로는 성능이 만족스럽지 못하다면, 다른 모델 seq2seq, transformer, GPT2, XLNet 등을 이용하여 문장 생성을 시도할 계획입니다.

     

    기타, one hot encoding의 메모리 문제

    LSTM은 입력 데이터의 형식을 제한하는데, 문장을 sliding한 sequence를 그 형식으로 요구합니다.

     

    x_train[0] x_train[1] x_train[2] x_train[3] y_train
    0 0 0 우리
    0 0 우리 함께
    0 우리 함께 노래
    우리 함께 노래 합시다

     

    그렇기 때문에 한 문장에 대해서 문장의 길이 만큼 데이터가 들어나가 됩니다. 위의 경우는 한 문장이 4개의 입력 데이터로 늘어난 경우입니다. 거기에다가 target data는 단어를 one hot encoding을 사용하기 때문에 메모리에 더 부담을 주게 됩니다. 결국 out of memory 관련 에러가 나타나게되는데, 이 때 sparse categorical_crossentropy를 사용하면, target data를 정수로 인코딩하기 때문에 메모리의 부담을 줄일 수 있고, 에러없이 학습을 진행할 수 있었습니다. 


    Abstractive summarization

    Seq2seq를 이용한 abstractive summarization

    질문 문항에 대하여 자기소개서 작성자가 답변한 내용에는 보통 소제목을 다는 경우가 많습니다. 소제목은 읽는 사람에게 핵심을 잘 요약하여 전달한다는 그 기능에서 중요성이 있는데, seq2seq 모델을 활용하여 본문 내용을 통해 소제목을 출력하는 모델을 구현했습니다. 모델은 

     

    자기소개서 답변 24,000건에 대하여, 정규표현식을 활용해 ",',(,[,1,2,3... 과 같이 따옴표, 괄호로 묶여있거나, 숫자로 시작하는 문장을 소제목으로 간주하여 제목-본문 쌍의 데이터를 구성했습니다. seq2seq은 

     

    자소단위 토큰화을 통한 참신한 표현

    위에서 LSTM 문장 생성 모델은 어절단위로 토큰화를 진행했는데, 이것은 메모리 초과 문제를 피하기 위해서 어쩔 수 없는 선택이기도 했습니다. seq2seq에서는 입력데이터의 형식을 sliding으로 처리하지 않으므로, LSTM 문장 생성 모델에 비해서 입력데이터의 수가 매우 적습니다. 따라서 자소단위로 토큰화를 진행하면, 단순계산을 했을 때 아래와 같습니다.

    글자 -> ㄱ+ㅡ+ㄹ / ㅈ+ㅏ

    한 글자를 초성, 중성, 종성의 3개 자소로 분해하기 때문에 한글자를 3배로 확장합니다. 한 문장에 대해서 한 문장이 대략 50자라고 하면, 총 문장 당 150개의 자소가 됩니다. 실제로는 Dan Rasband의 krtpy[*] 모듈을 이용하여 한글의 로마자 변화를 이용했습니다.

     

    자소단위로 토큰화를 했기 때문에, 어절단위 토큰화보다 글자를 조합하는데에 더 높은 자유도를 가지므로 다양한 표현이 나올 것이라고 예상했습니다. 반대로 자소단위 토큰화의 단점으로 아래의 문장이 해당합니다.

    작은 강험을 통한 극성

    작은 경험을 통한 각성정도로 생각이 되는데, 또는 모델이 좀더 학습되었을 때 강한 경험을 출력하지는 않았을까도 생각이 듭니다. 모델의 accuracy가 높아지면서 자소가 분리되는 현상은 사라지지만 이렇듯 말이 안되는 단어를 구성하는 경우가 발생하고 있습니다. 이는 충분히 높은 정확도를 올렸을 때 개선이 되는 것으로 판단됩니다.

     

    전이학습을 통한 참신한 표현의 시도

    신문기사의 본문-헤드라인으로 학습한 모델의 가중치를 이용하여 자기소개서 코퍼스에 학습을 시켰습니다. 전이학습이 없는 모델이 정답을 따라가려는 경향을 보이는데에 비해서, 전이학습이 된 모델은 정답데이터와는 다른 참신한 제목을 출력했습니다. 아래는 전이학습을 한 모델의 한 예시입니다.

     

    생성 제목

    실제 제목

    사람의 마음을 돌리다 

    "주인의식 빼면 시체"

    저는 사람의 스타일과 특징 말투 행동을 활용해 처음 본 사람을 기억하는 습관을 갖고 있습니다. 인간관계를 맺을 때 그 사람을 먼저 기억하는 것이 예의라고 생각했습니다 저의 이러한 습관은 사회활동에서 긍정적인 관계를 형성하는데 영향을 미쳤습니다…… … 

     

    좋은 품질의 제목이 출력되었습니다. 첫째로 자소가 분리되지 않았고, 말이 안되는 단어가 나오지 않았으며, 본문을 요약한다고 볼 수 있는 내용을 담고 있기 때문입니다.

     

    아래는 전이학습이 이루어진 모델과 전이학습이 없는 모델의 출력을 비교했습니다. 표의 품질 열에서는 자기소개서의 본문을 제대로 요약했는지를 bad case와 good case로 분류했습니다. 전이학습이 있는 경우가, 단어 구성력이 더 뛰어나고 첫글자부터 정답 값과는 다른 출력을 보이고 있습니다.

     

    모델 출력 값 정답 값 품질 전이학습 여부
    동적인 관심의 기적 "아버지에게서 배운 성실성과 소통 능력" bad case 전이학습

    발전을 통한 배운 경쟁사업 

    "방향성을 가진 엔지니어"

    good case 전이학습
    끝없는 노력에 불가능성은 없다

    "고객의 소리에 경청"

    good case 전이학습
    사람의 마음을 돌리다  "주인의식 빼면 시체" good case 전이학습
    소중한 서비스 "설문조사 결과를 바탕으로 한 동아리 홍보 방식의 변경" - -
    발전을 통한 배운 경쟁사업 "방향성을 가진 엔지니어" - -
    작은 강험을 통한 극성 "자율주행과 안정성" - -
    관되는 소통 "교내 스포츠 경기 활성화를 위한 노력" - -

     

    전이학습이 없는 모델의 경우 정답의 첫번째 글자의 초성이 일치하며, 중성까지 일치하는 경우도 보이고 있습니다. 그러나 정답 값과 차이가 나는 이유는, 모델이 한 글자를 틀린 후에, 틀린 글자로부터 단어로서 가장 그럴듯한 다른 글자를 예측하려는 특성이 있기 때문이라고 생각됩니다.

     

    교사강요(teacher forcing)을 없애면 안된다

    교사강요[*]는 모델에게 정답을 가르쳐주어 빠른 시간내에 학습이 이루어지도록 하는 전략입니다. 모델의 참신성을 주고자 교사강요를 제외했는데, 학습이 전혀 이루어지지 않고 자모가 분리되버리는 결과가 나왔습니다. 교사강요는 seq2seq에서 빠른 학습뿐만이 아니라 모델의 학습 여부를 결정짓는 중요한 요소임을 확인했습니다.

     

    한계와 보완할 점

    전이학습을 한 모델에서는 단어가 안되는 글자를 출력하는 경향이 줄었으나, 생성한 제목이 매끄러운 문장이 되지 못하고 있다는 점이 한계입니다. 또, 좀더 다양한 테스트 케이스를 구성하여 모델의 성능을 면밀하게 평가해야 합니다.


    마치며:

    본 실험은 2개월간의 프로젝트 과정 중에서 팀원들과 함께 같이 수 많은 오류들을 겪어내며, 함께 고민하여 여러 가설을 세우고 시도해가며 공부한 내용입니다. 모델의 품질이 좋지 못하며, 성능 검증 과정의 부족함, 근거가 부족한 추론 및 결론 등 실험 방법론에 있어서도 미흡하였으나, 여러 재미있는 시도를 해보았고 나름 의미있는 결론도 얻었다고 생각합니다. 또, 더 좋은 결과를 위해서 여러가지 것들이 더 시도되었어야 하는 아쉬움이 많이 남아있습니다. django를 활용하여 웹브라우저에서 체험해 볼 수 있도록 구현해보고 싶었고, hugging face에서 제공하는 여러 모델을 적용해보고 싶었습니다만, 아쉬운 부분들은 차차 팀원들과 틈틈이 더 공부를 해나가려고 합니다. NLP에 막 입문하였으며, 많이 부족합니다. 내용 상의 오류나 잘못 등 수정해야할 사항을 알려주시면 감사하겠습니다.


    출처

    언어학의 분포가설(distributional hypothesis)[*] : 딥 러닝을 이용한 자연어 처리 입문, Won Joon Yoo

    LSTM을 이용한 text generation[*] : 딥 러닝을 이용한 자연어 처리 입문, Won Joon Yoo

    교사강요[*] : 딥 러닝을 이용한 자연어 처리 입문, Won Joon Yoo

    krtpy[*] : Korean Romanization/Hangulization utility written in python

    krtpy ported[*] : krtpy ported from python2 to python3

     

    Seunggeun.parkk@gmail.com (word2vec)/ dbsgh3322@gmail.com (text generation, abstractive summarization)/ chun3842@gmail.com (auto labeling)

     

    댓글

Designed by Tistory.