목록2025/12 (16)
dev.Log
리눅스를 쓰다 보면“이 프로그램은 왜 부팅할 때 자동으로 실행될까?”라는 생각을 한 번쯤 하게 된다.이때 등장하는 개념이 바로 시작 서비스다.시작 서비스란 간단히 말해시스템이 부팅되는 과정에서 자동으로 실행되는 프로그램이나 스크립트를 의미한다.SSH, 네트워크, 웹 서버, GUI 로그인 화면 같은 것들은모두 시작 서비스의 한 종류다.1. init이란 무엇인가리눅스에서 커널 부팅이 끝나면가장 먼저 실행되는 사용자 공간 프로세스가 있다. PID 1 = init 이 init 프로세스는 시스템 전체의 시작을 관리한다.어떤 서비스들을 실행할지어떤 순서로 실행할지어떤 상태에서 실행할지이 모든 것을 init 시스템이 책임진다.2. 옛날 방식: SysVinit과거 리눅스 배포판들은 SysVinit 방식을 사용했다.2-..
실시간 STT에서 무엇을 선택해야 할까?최근 음성 인식(STT) 서비스를 설계하거나 운영하다 보면Whisper를 쓸지, NVIDIA NeMo를 쓸지 고민하게 된다.두 모델 모두 성능은 뛰어나지만, 지향점과 구조가 완전히 다르다.이 글에서는“실시간 STT 관점에서 Whisper와 NeMo는 무엇이 다르고, 언제 어떤 선택이 맞는지”를 중심으로 정리한다.1. 출발점부터 다르다: 설계 철학의 차이WhisperOpenAI에서 공개한 범용 ASR 모델약 30초 길이의 음원을 입력으로 받아 전체 문맥을 보고 인식다국어, 잡음, 다양한 발화에 매우 강함기본 철학: 배치 인식 + 슬라이딩 윈도우NeMoNVIDIA의 ASR 프레임워크스트리밍 ASR을 전제로 설계프레임/청크 단위 처리실시간 Partial → Final 결..
개발 문서나 장애 리포트, 아키텍처 설명을 보다 보면이런 표현을 자주 본다.업스트림에서 문제가 발생했다다운스트림 장애로 요청이 밀렸다근데 생각해보면 이런 의문이 든다.그냥 입력 / 출력이라고 하면 안 되나?왜 굳이 업스트림, 다운스트림이라고 부를까?이건 단순한 용어 차이가 아니라시스템을 바라보는 관점 차이다.1. 입력 / 출력은 너무 “작은 단위”의 말이다입력(Input)과 출력(Output)은 보통 이런 상황에서 쓴다.함수메서드API 하나모듈 하나예를 들면 이런 느낌이다. output = function(input) 이 표현은“이 코드가 뭘 받아서 뭘 내보내는지” 설명하기엔 좋다.하지만 현실의 시스템은 이렇게 단순하지 않다.2. 실제 시스템은 항상 ‘연결된 흐름’이다대부분의 서비스는 이런 구조다. A ..
(STT·번역·LLM 디코딩에서 왜 쓰일까)Beam Search는 음성 인식(STT), 기계 번역, 대규모 언어 모델(LLM)에서문장을 한 토큰씩 생성할 때 더 나은 결과를 얻기 위한 탐색 전략이다.모델은 항상 다음 단어 하나를 바로 결정하지 않는다.여러 가능성 중에서 어떤 선택이 전체 문장으로 이어졌을 때 가장 자연스러운지를끝까지 고려해야 하기 때문이다.1. Greedy Search의 한계가장 단순한 방식은 Greedy Search다.매 시점마다 확률이 가장 높은 단어 하나만 선택계산은 빠르지만, 초반 선택이 틀리면 되돌릴 수 없다예를 들어 문장이 이렇게 시작했다고 하자. 나는 오늘 다음 단어 확률이 아래와 같다면,단어확률학교에0.40집에0.35밥을0.15갑니다0.10Greedy Search는 항상 학..
두 diarization 프레임워크는 무엇이 다를까?Speaker Diarization(SD)을 실제 서비스에 적용하려고 하면가장 많이 비교되는 선택지가 NVIDIA NeMo와 pyannote.audio다.둘 다 diarization을 수행할 수 있지만,설계 철학과 파이프라인 구조는 꽤 다르다.이 글에서는 다음 관점에서 두 프레임워크를 비교한다.전체 파이프라인 구조핵심 모델 구성겹말(Overlap) 처리 방식ASR 및 서비스 연계 관점실제 서비스에서의 선택 기준1. 전체 구조 개요NeMo Diarization파이프라인 중심각 단계가 명확히 분리됨ASR과 독립적인 “화자 타임라인 생성”이 목표pyannote.audioEnd-to-End diarization 지향신경망이 segmentation + speak..
DER는 무엇을 말해주고, 무엇을 말해주지 않는가Speaker Diarization(SD)은“누가 언제 말했는지”를 시간 축 위에서 복원하는 문제다.이 문제의 성능을 평가하는 대표적인 지표가 **DER(Diarization Error Rate)**다.하지만 DER는 정의는 명확한 반면,실제 서비스 품질을 그대로 대변하지는 않는다.이 글에서는:DER의 정확한 구성각 오류 항목의 의미실무에서 DER를 해석하는 방법DER만으로 부족한 이유를 정리한다.1. DER(Diarization Error Rate)란?DER는 전체 음성 시간 대비화자 분리 결과가 잘못된 시간의 비율이다.수식으로 표현하면 다음과 같다.DER=FA+MISS+CONFUSIONTOTALDER = \frac{FA + MISS + CONFUSION..
ASR과 분리된 화자 인식 파이프라인STT 시스템을 실제 서비스로 운영하다 보면단순히 “무엇을 말했는지”를 넘어서**“누가 언제 말했는지”**가 필요한 경우가 많다.이를 해결하는 기술이 **Speaker Diarization(SD)**이며,NVIDIA NeMo는 ASR과 분리된 독립적인 diarization 파이프라인을 제공한다.이 글에서는 NeMo 내부의 SD 로직이어떤 구성과 철학으로 설계되어 있는지 정리한다.1. NeMo에서 Speaker Diarization의 위치NeMo에서 diarization은:ASR의 부가 기능이 아니라독립적인 음성 분석 파이프라인이다.즉,ASR 없이도 diarization만 수행 가능diarization 결과를 ASR 결과에 후처리로 결합하는 구조를 기본 전제로 한다.이 ..
batch size, false negative, STT/RAG loss까지 한 번에 정리최근 STT, RAG, sentence embedding, contrastive learning 관련 논문이나 코드에서in-batch augmentation 또는 in-batch negatives라는 표현을 자주 볼 수 있다.처음 접하면 “데이터 증강이랑 무슨 관계지?”라는 의문이 들기 쉬운데,실제로는 기존 augmentation과는 전혀 다른 개념이다.이 글에서는 다음 세 가지를 중심으로 정리한다.In-batch augmentation이 무엇인지왜 batch size를 키우면 성능이 좋아지는지false negative는 왜 생기는지STT / RAG에서 실제로 사용하는 loss 형태1. In-batch augment..