콘텐츠로 이동

사전 갱신·품질 관리

사전 갱신 주기와 품질 관리 — 어떻게 최신성을 유지하나

바른의 내장 사전들은 서버가 직접 만들어내지 않습니다. 학습 트랙에서 사전을 생성한 뒤 배포 과정을 거쳐 서버에 실려 옵니다. 이 글은 사전이 어떻게 갱신되고, 빠른 시작과 품질을 위해 어떤 장치를 두는지 설명합니다.

생성 → 배포 — 두 트랙의 분업

바른은 사전을 만드는 학습 트랙과 사전을 읽어 추론하는 서비스(서버)가 나뉘어 있습니다. 새 어휘를 반영하려면 학습 트랙에서 사전을 다시 만들어 배포해야 합니다.

graph LR
  SRC[말뭉치·사전 원본] --> BUILD[학습 트랙에서 사전 생성];
  BUILD --> DEPLOY[배포];
  DEPLOY --> SERVER[서버가 사전 로드];
  SERVER --> INFER[형태소 분석·교정];
사전 생성 원천
dict.res 학습된 토큰 색인
ext-dict.pb 성씨·수량·위키 등 확장 어휘
urimal-dict.fb 우리말샘 어휘
onterm-dict.fb 온용어 전문용어
word-freq.gob 말뭉치 빈도 집계(10시간+ 소요)

왜 서버가 직접 안 만드나요

사전을 만드는 일은 큰 말뭉치를 다루는 무거운 작업입니다. 빈도 사전 하나만 해도 빌드에 10시간이 넘게 걸립니다. 이런 작업을 추론 서버가 떠안으면 서비스가 느려지므로, 무거운 생성은 학습 트랙이 맡고 서버는 완성된 사전만 빠르게 읽습니다.

빠른 재시작을 위한 캐싱

사전은 크기가 커서 매번 처음부터 읽으면 서버 시작이 느립니다. 바른은 캐싱으로 재시작을 빠르게 합니다.

  • gob 캐싱: 우리말샘 사전 등의 보조 색인을 gob으로 캐싱해, 다음 시작 때 빠르게 불러옵니다.
  • FlatBuffer + mmap: 우리말샘·온용어 사전은 mmap으로 필요한 부분만 읽어 시작을 가볍게 합니다.

BK-tree 버전 관리

오타 후보를 찾는 BK-tree는 우리말샘을 바탕으로 만들어지며, 버전을 함께 관리합니다(예: v1.2.0). 사전이나 트리 구조가 바뀌면 버전을 올려, 캐시된 옛 트리를 새것으로 바꾸도록 합니다.

최신성과 안정성의 균형

어휘는 학습 트랙에서 말뭉치·원본 사전을 갱신해 최신성을 유지하고, 서버는 캐싱과 버전 관리로 빠르고 일관된 동작을 보장합니다. 생성과 추론을 나눈 구조가 이 균형을 가능하게 합니다.

자주 묻는 질문

Q. 사전은 누가, 어떻게 갱신하나요?

학습 트랙이 말뭉치와 사전 원본을 바탕으로 사전을 다시 만들고, 배포 과정을 거쳐 서버에 실립니다. 추론 서버는 완성된 사전을 읽기만 합니다.

Q. 사전이 커서 서버 시작이 느리지 않나요?

gob 캐싱과 FlatBuffer + mmap을 사용해 재시작을 빠르게 합니다. 보조 색인은 캐시에서 불러오고, 큰 사전은 필요한 부분만 메모리로 가져옵니다.

Q. BK-tree는 어떻게 최신 상태를 유지하나요?

BK-tree는 우리말샘 사전 기반으로 만들어지고 버전(예: v1.2.0)으로 관리됩니다. 구조가 바뀌면 버전을 올려 캐시된 옛 트리 대신 새 트리를 사용하도록 합니다.

Q. 새 어휘나 신조어를 사전에 반영하려면 어떻게 하나요?

내장 사전의 어휘를 늘리려면 학습 트랙에서 말뭉치·원본 사전을 갱신해 사전을 다시 만들고 배포해야 합니다. 당장 특정 단어를 인식시켜야 한다면, 사용자 사전을 CustomDictionaryService API로 등록하는 방법이 빠릅니다. 사용자 사전 파일은 바이너리이므로 UpdateCustomDictionary로 반영합니다.

Q. 사전을 갱신하면 형태소 분석과 맞춤법 검사기가 모두 영향을 받나요?

dict.res·ext-dict.pb처럼 모든 빌드에 들어가는 사전은 형태소 분석에 영향을 주고, 우리말샘·비표준어·외래어·한자·온용어·빈도 사전은 맞춤법 검사기를 포함하는 빌드에서만 쓰이므로 교정 동작에 영향을 줍니다.

도움이 되었나요?