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)
'Programming > Python' 카테고리의 다른 글
[Pycon KR 2017] Python 게임서버 RPC framework (Thirft편) (0) | 2017.08.13 |
---|---|
[Pycon KR 2017] Python Django + AWS로 쇼핑몰 제작 (0) | 2017.08.13 |