자신의 감정을 Mr.Children의 가사로 표현하고 싶습니다.

소개



이 사람은 무엇을 말하고 있어..?라고 하는 타이틀입니다만(웃음)..자연 언어 처리의 공부도 겸해, 4연휴를 이용해 만들어 보았습니다. 곧 어딘가에 웹에서 볼 수 있도록 노력하겠습니다.

개념과 완성 이미지



이 자료를 찾은 순간, 현상(As is)→과제→어야 할 모습(To be)을 내보내고 있었습니다.
과연 사업가 (웃음)


어떤 느낌으로 만들까라고 생각해 생각해 낸 것이 이하와 같은 구조입니다. ↓

내부에서 미스틸 가사 데이터 세트 작성 및 Word2Vec화. 자신의 감정도 마찬가지로 Word2Vec 처리하고 cos 유사도와 비슷한 가사를 끌어옵니다.

PoC 할 수 있었다!



상기의 전체상을 실현할 수 있을 것 같아서 딱 트라이했습니다.
결과... 「잠을 잘 수 없어서 힘들다」라는 자신의 감정에 대해 「사회인이 되어 중하를 짊어지고 깨닫게 되면 - 빛을 발하는 분에게」가 첫 번째로 돌아왔습니다. 어... 무서운 정도 깊게 읽어 온다...웃음


사용하는 것



형태소 분석: janome.tokenizer
Word2Vec : gensim.models의 word2vec
from janome.tokenizer import Tokenizer
from gensim.models import word2vec

형태소 해석으로 가사를 자르고 그 한마디마다 Word2Vec하고 있습니다.
최종적으로 벡터의 평균을 취득하는 것으로, 가사 1세트의 Word2Vec가 완성된다는 혼담입니다.


↓ 형태소 해석을 한 결과


문장을 Word2Vec하는 부분
# skip-gram Mr.Childrenの歌詞(sentences)で、w2vのモデルをつくる。
skipgram_model = word2vec.Word2Vec(sentences,
                                   sg=1,
                                   size=250,
                                   min_count=2,
                                   window=10, seed=1234)



#形態素解析をした1単語ごとにWord2Vecを行い、最後に平均をとる関数=>歌詞の文脈を反映したWord2Vecができる?
def avg_document_vector(data, num_features):
    document_vec = np.zeros((len(data), num_features))
    for i, doc_word_list in enumerate(data):
        feature_vec = np.zeros((num_features,), dtype="float32")
        for word in doc_word_list:
            try:
                feature_vec = np.add(
                    feature_vec, skipgram_model.wv.__getitem__(word))
            except:
                pass

        feature_vec = np.divide(feature_vec, len(doc_word_list))
        document_vec[i] = feature_vec
    return document_vec


결론



단어를 벡터로 변환하여 일치도를 보는 것이 재미 있다고 생각했습니다.
BERT라든지 공부해보고 싶다~라고.
이 놀이를 서비스로 해 나가기 위해서는 곡수의 확장이 시급합니다. (2020/7/29 현재 : 5곡..웃음)
요령과 노래를 모아 갑니다.

그렇다고 해도, 이런 놀이가 4연휴의 스키마 시간으로 할 수 있게 되어 온 것이, 스킬이 붙어 오고 있는 것 같아 기쁘네요! !

좋은 웹페이지 즐겨찾기