RNN에서 문자 정렬
7886 단어 KerasNLPRNNDeepLearningsort
seq2seq sort
정렬되지 않은 문자열에서 문자의 원래 문자열을 복원
원래의 상정하고 있던 유스 케이스로서는, 아이디어를 어울리는 브레인스토밍 등으로, 자주(잘) 스티커 메모 등을 사용해 키워드를 포스잇등으로 치고, 그 다음 최종적으로 말하고 싶은 것을 구축하는 것을, 잘 합니다만, 그러한 키워드군을 투입하는 것으로, 자연스럽게 이끌고 싶은 정보를 귀결시킬 수도 있다고 생각했습니다.
단어로 하려고 하면 입력 차원이 고차원이 되어 네트워크 크기의 한계에 부딪히고 문자의 정렬 작업을 이번에는 주어 봅니다.
선행 연구
문자열을 파괴하여 문자 입도의 벡터 열에서 원래 문자열의 배열을 복원합니다.
네트워크
어쩐지 시도하고 잘 작동하는 모델을 사용하고 싶습니다.
enc = input_tensor
enc = Flatten()(enc)
enc = RepeatVector(30)(enc)
enc = GRU(256, dropout=0.15, recurrent_dropout=0.1, return_sequences=True)(enc)
enc = TimeDistribute(Dense(3000, activation='relu'))(enc)
enc = Dropout(0.25)(enc)
dec = Bidirect(GRU(512, dropout=0.30, recurrent_dropout=0.25, return_sequences=True))(enc)
dec = TimeDistribute(Dense(3000, activation='relu'))(dec)
dec = Dropout(0.5)(dec)
dec = TimeDistribute(Dense(3000, activation='relu'))(dec)
dec = Dropout(0.1)(dec)
decode = TimeDistribute(Dense(3135, activation='softmax'))(dec)
그림 1. 만든 Encoder-Decoder의 정렬 작업
전처리
동양경제씨의 콘텐츠를 스크래핑
$ python3 12-scan.py
스크래핑 된 html 정보를 구문 분석하고 텍스트 정보를 검색합니다.
$ python3 16-parse-html.py
텍스트 정보와 벡터 정보 쌍 만들기
$ python3 19-make_title_boc_pair.py
기계 학습 가능한 숫자의 벡터 정보로 변환
$ python3 23-make_vector.py
학습
학습하기
(데이터 크기가 거대하기 때문에 128GByte 정도의 메인 메모리가 필요합니다)
$ python3 24-train.py --train
...
categorical_crossentropy의 손실이 0.3 정도로 떨어지면 어느 정도 예상이 가능합니다.
GTX1060으로 3일 정도 필요했습니다
평가
입력에 사용한 순서가 무너진 정보와, 그들을 입력으로, 재정렬하고 그러한 문자의 페어는 이와 같이 됩니다
入力 ['、', 'が', 'ル', 'ダ', '子', 'を', '日', '銀', '本', '団', '上', 'メ', '男', '定', '体', '以', '確', '球', '卓']
出力 卓球男子団体、日本が銀メダ以以上を確定<EOS>
入力 ['は', 'い', 'リ', 'た', 'ャ', 'ル', '界', 'し', 'に', 'て', '戦', '由', '表', 'シ', '挑', '自', '限', '現']
出力 シャルリは表現の自由の限界に挑戦していた<EOS>
入力 ['「', 'は', '」', 'た', '国', 'と', 'に', 'る', '消', 'え', '攻', '米', '北', '朝', '鮮', '先', 'よ', '撃', '制', '藻', '屑']
出力 米国による「北朝鮮先制攻撃」は藻屑と消えた<EOS>
入力 ['、', 'が', '国', '世', '界', '子', '主', '沸', '騰', 'す', '部', 'る', 'マ', 'ス', '業', '中', '品', '電', '救', 'ホ']
出力 中国スマホが救世主、沸騰する電子部品業界<EOS>
코드
GitHub에 있습니다. 그래서 확인하십시오
끝에
처음에는 단어 입도의 벡터를 입력으로 문자열 복원을 하고 있었습니다만, 입력이 너무 고차원이 되어 버린 것, 컴퓨터 자원적으로 학습이 어렵다는 배경이 있었습니다
그 때문에, 몇번이나 수법을 정리했습니다만, 캐릭터 입도는 학습이 간단한 반면, 그다지 재미있지 않습니다
RNN에서 가장 큰 과제라고 느끼는 것은 온메모리로 입력용의 밀행렬을 유지하는 것이 어려운 것입니다. 메모리의 양이 유한이므로, 어떠한 방법으로 안정화시키는 방법이 요구되고 있습니다만, 어쩐지 좋은 방법 없을까요.
Reference
이 문제에 관하여(RNN에서 문자 정렬), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nardtree/items/3a7b45acbb47ed2c9755텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)