본문 바로가기

Programming/Python

[Pycon KR 2017] 대선후보 분석하기

https://www.slideshare.net/hongjoo/speaker-diarization


# What us Speajer Diarization

    * Audiotrack 

    * Segmentation : 분리

    * Clustring : Speacker별로

# Time domain vs Frequency domain

    * TimeDomain -> Frequency domain(3D)

# Feacture Extraction

    * 20~30ms단위로 쪼갬 

    * 10ms 정도로  overlaping되게 움직임

# Time domain to Frequency domain

    * 고음역대 -> 저음역대(8khz미만으로 이동) Mel 스펙트럼

# Chromagram

    * 12음계로 쪼개서 그 피치를 표시

# Mel-Frequency Cepstral Coefficients

    * Scale

# Segmentation

    * Wave -> Cromagram

    *  2~5s 간격으로

    * 각 음계별로 가장 maximum 부분을 구별해낸다.

    * 12 * N개의 매트릭스를 만들 수 있다.

# Clustring

    * k-means

        * 가까운것들을 묶고 센터를 정해서 계속 샌트로이드가(Centroids) 일정한 위치가 되도록 

        * 썩 좋은 방법은 아니다.

        * 남자와 여자들이 많을때에는 피치가 구분이 잘 안된다. 

        * 피치가 섞이는것은 좋지 않다.

        * 동시에 말하는 경우 : 구별이 힘들다.

# Use MFFC

    * 가변적인 Segmentation

    * Speaker와 Speaker사이에 변환되는 지점을 찾는다.

    * 두사람의 목소리들을 MFCC의 가옵션 그래프를 그리면 다르게 나르게 난다.

    * 프레임이 흐를때 바뀌는 부분을 찾느다.

# Bayesian Inforamtion Criterion

    * MOdesl selection;

    * 주어진 모델에서 그것이 발견될 확률을 구하는것.

    * 이 모델이 이 데이터에 적합하는가를 구하는 function과 비슷.

    * Window를 왼쪽에서 오른쪽으로 움직이면서 모델이 한인안 경우와 2개 경우의 BIC 더 좋은지 찾는다.

    * BIC가 Maximum되는 부분이 Speacker가 바뀌는 부분

    * Code

        * rang_n_cluster : 클러스트 구별

    * 맨 왼쪽의 그래프는 (maximum = 1 minmum = 0)으로 그린것으로, 0으로 가까울수록 적합한 Cluster의 갯수임을 알 수 있다.

# Agglomerative CLustring

    * 제일 가까은 cluster를 merge하고 이 과정을 계속 반복하여 모든 데이터가 하나의 cluster가 될때까지 돈다.

    * linkage : Cluster와 Cluster의 거리를 구하는 방법을 정의

    * Code

        * arr 설명 : fst | sec | dis | 갯수

# Hierarchical Clustering & Dendrogram

    * Dendrogram을 그려보면 어디서 끊어야할지(예: 5번같은경우는 이상하다. 그런데 대부분 1미만이다. 5번만 클러스트 한개를 차지한다.)

# Agglomerative CLustring

    * 색깔별로 같은 사람의 목소리라고 치면

    * BIC값을 제일 가까운것을 뽑아서 계속 묶는다. △BIC(C9,C10) < 0일때까지만 묶어도된다. (∴ Speacker = 3)

반응형