심심해서 하는 블로그 :: 심심해서 하는 블로그
연극의 줄거리보다 연극이 재밌는지 궁금한 분을 위한 선 요약
1. 배우분들의 훌륭한 연기력과 문학 소설 같은 시나리오
2. 극 전반적 분위기가 무겁습니다. 단 한 번도 웃음이 나오는 장면이 없었습니다.
3. 마음이 무거워지지만 저는 추천 드립니다.





감자님의 운은 어디까지인 걸까요..
연극표 당첨되서 또 문화생활을 이렇게 누릴수 있었습니다.

러브 스코어 이후 처음으로 관람하게 되는 연극이였습니다.
러브 스코어의 밝고 쾌할한 느낌과는 달리 한편의 묵직한 소설책을 읽은 듯한 느낌으로 연극을 관람했어요.

전체적인 줄거리 
기묘여행은 살인 사건의 피해자와 가해자 가족들이서 여행하는 연극 제목 그대로 기묘한 여행이다.

피해자 가족들의 상처와 아픔
가해자 가족들의 죄책감
그리고 죽은 영혼으로 등장하는 피해자
자신의 죄를 인정하고 그 댓가를 치룰려는 가해자

이들이 함께 있는 연극의 분위기는 당연히 무겁고 어둡습니다.

피해자 가족 입장은 당연히 가해자에 해한 복수.
사랑하는 딸의 죽음을 쉽게 용서할 수는 없습니다.
가해자를 만나 반드시 본인 손으로 죽이겠다는 다짐으로 여행을 떠납니다.

반대로 가해자 부모는 가해자의 생존이 목적입니다.
가해자 본인은 항소를 포기하며, 자신의 죄에 대한 벌을 받고자 합니다.
자기 자식이 살인자라 하여도 부모들에게는 하나 뿐인 자식이기에 인면수심임에 불구하고 피해자 가족에게 그를 설득해달라고 부탁합니다.

과연 그들은 각자의 목표를 이룰 수 있을까요..?


고통스러운 사람끼리 위로가 과연 통할 것인가?
모든 등장 인물이 각각의 고통을 가지고 있습니다.
피해자 가족, 가해자 가족, 피해자, 가해자, 여행을 주선한 사람까지 모든 이들이 고통스러운 나날을 보냈던 사람들입니다.

인형을 각각 가해자와 피해자의 이름을 붙이고 피해자 가족은 가해자에게 칼을 꽂고, 가해자 가족은 피해자를 안아주는 장면이 있습니다.
각자의 입장이 되어보며 각자의 고통을 이해하는 시간이 되었겠죠.

그런데 오히려 감정의 교류는 피해자 어머니가 찌르기를 거부하고, 가해자 어머니가 대신 찌를 때 감정이 교류됩니다.

단 한 차례만 허벅지를 찌르는 피해자 아버지
수차례를 가슴을 찌르는 가해자 어머니
 
그동안 감정을 숨겨오던 가해자의 어머니의 행동으로 가해자의 살인은 가해자 부모에게도 큰 상처와 분노로 남은 것을 행동으로 보여주는 장면이 아닐까 저는 생각합니다.
그렇다고 서로의 감정을 확인한 이 장면이 두 가족간의 화해의 장면은 결코 아닙니다.
연극이 끝나는 시점까지 피해자 가족은 가해자에게 단 한번도 설득한 적이 없기 때문입니다.
서로의 고통을 확인하더라도 자신이 받는 고통이 더욱 크기에 서로 위로를 받거나 이해를 하지 않습니다.

연극을 보는 내내 마음 한구석이 너무 무거웠습니다.

해피엔딩도 아닌, 새드 엔딩도 아닌 살아 남은자는 계속 아픔을 가지고 살아 갈 것이다라는게 결말이였기 때문이죠.

많은 관객들이 눈물을 많이 흘렸습니다. 피해자 가족 입장에서 죽이고 싶지만 죽일 수 없는 감정에 많은 공감을 했던 것 같습니다.


그 누구도 행복하지 못한 결말, 그 누구도 원하는 것을 얻지 못한 결말에 답답함을 느낄지도 모르겠습니다. 

하지만 배우들의 탄탄한 연기력과 소설을 읽은 듯한 감동을 선사해주는 이 연극을 추천 드립니다.


긴 글 읽어주셔서 감사합니다.

공감 버튼은 글쓴이에게 큰 동기부여가 됩니다.

,


Github > https://github.com/ssooni/data_mining_practice

- 자세한 소스코드는 Github에 올렸습니다.

- 데이터 파일도 올려 드리고 싶지만 실제 카카오톡 대화내용이라 일부분만 올렸습니다.

- 소스코드는 짬짬히 업로드할 예정입니다.




Word to Vector

Word2Vec은 간단하게 텍스트를 숫자로 변환하는 것을 의미합니다.

컴퓨터가 모든 텍스트의 의미를 이해해서, Context를 잘 잡아낸다면 굳이 이런 작업을 하지 않아도 됩니다.

하지만 아직까지 컴퓨터는 숫자로 이루어진 세계에 대한 연산을 더 잘 합니다. 

숫자로 이루어진 세계에서 마치 컴퓨터가 우리가 글을 이해하는 듯한 알고리즘을 적용한다면 문맥을 이해할 수 있지 않을까? 하는 취지에서 시작되었습니다.


그렇다면 텍스트를 특정한 벡터 좌표로 표현할려면 어떤 방법들이 있을까요.

하나는 각각의 차원에 텍스트가 가질 수 있는 특성을 부여하는 방법입니다.



각각의 차원에 특성을 두고 사람과 닭이 가지는 특성에 맞게 배치를 하였습니다. 

사람과 닭은 예제에서 보여준 4가지의 속성에 따라 서로 구분이 가능하다는 것을 알 수 있습니다.

하지만 원숭이와 사람을 이 속성이 따라 구분하면 어떻게 될까요?



사람과 원숭이는 4가지의 속성으로는 서로 구분이 가기 힘듭니다.

따라서 우리는 사람과 원숭이를 구분할 수 있는 특성을 추가적으로 넣어야 합니다.

이렇게 계속 다른 것과 구분을 하기 위해 특성을 추가하다보면 이 세상 모든 단어를 표현하는데 필요한 차원은 무한대에 가까울 것입니다.

그리고 그런 특성을 사람이 일일히 부여하는 것은 매우 피곤한 일입니다.


CBOW 방법 vs Skip-Gram 방법

그래서 이번에는 다른 방법을 사용하여, 텍스트를 벡터로 표현하고자 합니다.

 


위의 문제가 주어졌을 때 운동이나 밥, 노래들을 잘하는지는 이전 또는 이후 문장을 확인해야 알 수 있습니다. 

주변의 단어를 통해 중심 단어를 추측하는 방법이 CBOW 방법입니다.  



반대로 Skip-Gram 방법은 어떤 단어가 등장했을 때 근접한 단어가 발생하는 양상을 측정하는 방법입니다.

노래라는 중심 단어를 기준으로 앞뒤 N개의 단어가 등장하는 확률을 구하여 Vector로 만들어 줍니다.



관련 키워드 찾기

Word2Vec 모듈의 설치방법은 아래와 같습니다.

>> pip install word2vec


앞선 시리즈에서 형태소 분석기를 통해 Token을 만들었는데 그것을 이용해서 Word2Vec를 알고리즘을 적용합니다.

자세한 소스코드는 GitHub를 참조해주세요.





word2vector.py


1
2
3
4
5
6
7
8
9
10
11
12
13
14
def create_model(filename, skip_gram=False):
    tokens = pd.read_csv(filename)
    tokens = tokens[tokens["contents"].apply(lambda x: 'http' not in x)]
 
    sentence = tokens["token"].apply(lambda x: ast.literal_eval(x)).tolist()
    
    if skip_gram:
        model = Word2Vec(sentence, min_count=10, iter=20, size=300, sg=1)
    else:
        model = Word2Vec(sentence, min_count=10, iter=20, size=300, sg=0)
 
    model.init_sims(replace=True)
    model.save("./result/embedding.model")
 
cs


line 3

카카오톡의 대화 내용 중에서 링크를 첨부하는 경우를 제외하였습니다. 


line 5

Word2Vec의 Sentence는 iterable한 자료형이 들어가면 됩니다.

저는 이전 시리즈에서 형태소 분석기로 Tokenize한 결과를 넣었습니다.


line 7-10

Skip Gram 방법을 사용할지 CBOW 방법을 사용할지 선택합니다.

각각의 파라미터는 반드시 똑같이 따라 하실 필요는 없습니다.


size : 몇 차원의 Vector를 만들지 여부를 결정합니다.

min_count : 특정 빈도수 이상 발생한 단어에 대하여 Embedding을 합니다.

iter: 반복 횟수


line 13

완성된 모델을 파일로 저장합니다.


word2vector.py

1
2
3
4
5
def most_similar():
    model = Word2Vec.load("./result/embedding.model")
    print("용돈과 관련된 키워드 : ", model.most_similar("용돈"))
    print("졍이와 관련된 키워드 : ", model.most_similar("졍이"))
    print("쭈니와 관련된 키워드 : ", model.most_similar("쭈니"))
cs


line 2

앞서 생성한 모델을 읽어드립니다.


line 3 - 5

most_similar 함수는 Word Vector에 Cosine 값을 내적을 통해 구한 뒤 그 값이 클수록 유사하다는 Cosine Similarity 방법을 사용하여 특정 단어와 관련된 단어를 찾아줍니다. 



관련도 수치가 낮은 게 아쉽긴 합니다만, 관련된 단어라고 생각하는 것들이 나와서 나름 만족 스럽습니다.

다음 시리즈에서는 벡터화된 데이터를 이용하여, 클러스터링을 하면 어떤 결과가 나오는지 확인해보도록 하겠습니다.


긴 글 읽어 주셔서 감사합니다.

공감 버튼은 글쓴이에게 큰 동기부여가 됩니다.

 

,

영화 내용은 안 궁금하고 재밌는지 궁금한 사람들을 위한 선 요약

1. 도어락을 따고 들어가서 도어락인거지 자물쇠 땄으면 자물쇠가 영화 제목이였음

2. 도어락 어떻게 딴건지 추리는 없다.  모든 것은 우연이다.

3. 긴장은 긴장대로 하게하고 해소를 해주지 않는 영화 


범인에 대한 스포일러가 있으므로 보고 싶지 않다면 뒤로 넘어 가시는것을 추천 드립니다.

영화 자체를 추천하지는 않아서 봐도 상관은 없습니다만..




영화의 스토리를 요약하면 도어락으로 문을 잠궜으나 도어락을 뚫고 들어와서 집 안에 몰래 같이 사는 변태적인 범인이 있다는 내용의 영화인데 사실 도어락이랑 전혀 상관이 없다.


만약 자물쇠로 문을 잠궜으나 자물쇠를 뚫고 들어왔다면 이 영화 제목은 자물쇠가 되었을 것이다.


다만 소재가 현실에도 있을 수 있는 일을 기반으로 하였다는 것에는 좋은 시도라고 생각한다만..


모든 서사는 우연이다. 필연이 없다.

그 사람이 어떤 사람인지 어떻게 들어왔는지 그런거는 관객이 전혀 알 수 없다. 범인의 직업이 경비원인데 경비원이라고 우리집 비밀번호 알고 있으면 다 잘라야 한다. 

그리고 CCTV도 없는데 어떻게 비밀번호를 아는 건지 그냥 모든게 우연이다.

그렇게 문을 쾅쾅치면서 사람을 잡아 대는데 옆집 앞집은 우연히 비어있나봐 이웃한테 먼저 물어보고 그런것도 없네..


나름 필연을 맞추기 위해서 추리씬이 들어가긴 하는데, 

우연히 3200원 사용하는 사람을 발견하였고, 

두 사람이 서로 다른 길로 찾았는데 우연히 실종자의 범행 현장에 주인공이 도착했고 위기의 순간에 

갑자기 동료가 우연히 지나가다가 몸통박치기로 도와준다.


유력한 용의자가 있지만 범행은 계속 일어나는 걸 계속 보여주면서 관객들에게 "얘는 범인 아니야^^" 농락하는데 그 과정이 매우 짜증이 난다. 


주변 사람들이 다치거나 죽으니 긴장감을 주는데 전혀 해소를 해주지 않는다. 떡밥을 던져서 조금씩 해소해줄 만한데 3200원과 오래된 시계말고는 결정적인 떡밥을 던지지 않으니, 주인공이 직접 잡히는 수 밖에 범인을 공개할 수단이 없다.


그렇게 형사도 너무 허무하게 죽고 전지전능한 범인이 우연히 튀어나온 못에 한방 맞고 사망하니까 허무하다. 


이런 긴장감을 주는게 목적이라면 아주 성공했지만, 중간 중간에 긴장을 해소하고 관객들에게 숨도 좀 돌릴수 있는 시간을 줬으면 더 좋았을텐데하는 아쉬움이 있다.


마지막까지 침대 밑을 비추면서 긴장감을 줄 필요가 있을까 하는거다. 영화 보고 나와서 찝찝함을 잊을 수 없던 영화였다.

'눈누난냐 > 영화' 카테고리의 다른 글

[영화] 보헤미안 랩소디 후기  (6) 2018.12.11
암수살인을 보고 왔습니다 (스포주의)  (2) 2018.10.26
,