Tokenize vs AnalyzeSyntax
Tokenize와 AnalyzeSyntax의 차이와 사용 시점
바른의 LanguageService에는 분절에 초점을 둔 Tokenize와,
품사 태깅까지 수행하는 AnalyzeSyntax가 함께 있습니다.
두 메서드는 같은 입력 문서를 받지만, "어디까지 분석해서 돌려주느냐"가 다릅니다.
이 문서는 두 메서드의 차이와, 각각을 언제 쓰면 좋은지를 정리합니다.
무엇이 다른가요
바른의 분석은 분절(Segmenter) → 품사 태깅(PosTagger) → 후처리의 단계로 흐릅니다.
Tokenize는 형태소 분석이 아니라 단어만 분리하는 데 집중하므로, 47품사 체계가 아닌
8성분 체계(N 체언 / V 용언 / A 부사 / M 관형어 / J 조사 / E 어미 / S 기호 / I 감탄사)로
토큰을 표시합니다. 반면 AnalyzeSyntax는 47품사 태깅과 형태소 단위 결과까지 모두 돌려줍니다.
graph LR
IN[입력 문장] --> SEG[분절 Segmenter]
SEG --> TK[Tokenize: 어절/토큰]
SEG --> TAG[품사 태깅 PosTagger]
TAG --> AS[AnalyzeSyntax: 형태소+47품사]
| 항목 | Tokenize |
AnalyzeSyntax |
|---|---|---|
| 핵심 결과 | 어절·토큰 분절(단어 분리) | 문장→어절→형태소(47품사) |
| 분류 체계 | 8성분(N/V/A/M/J/E/S/I) | 47품사 |
| 품사 태그 | 초점 아님 | 형태소마다 tag 부여 |
확신도(probability) |
— | 형태소별 제공 |
단어 출처(out_of_vocab) |
— | 제공 |
| 처리 비용 | 상대적으로 가벼움 | 태깅까지 수행 |
언제 무엇을 쓰나요
- Tokenize가 적합한 경우: 검색 색인용 토큰화, 어절 경계 확인, 빠른 전처리처럼 "품사까지는 필요 없고 잘게 나누면 되는" 작업.
- AnalyzeSyntax가 적합한 경우: 명사만 추출, 동사·형용사 분석, 품사 기반 필터링, 형태소별 위치·확신도가 필요한 분석 등 대부분의 본격 NLP 작업.
from bareunpy import Tagger
tagger = Tagger("koba-XXXX-...", host="api.bareun.ai", port=443)
res = tagger.tags(["오늘 날씨가 참 좋네요."])
# 명사(NNG/NNP)만 골라냅니다.
for sent in res.msg().sentences:
for token in sent.tokens:
for m in token.morphemes:
if m.tag in ("NNG", "NNP"):
print(m.text.content, m.tag, m.probability)
둘 다 같은 분절 모델을 씁니다
Tokenize와 AnalyzeSyntax는 같은 분절 모델(seg-model.onnx)을 공유합니다.
AnalyzeSyntax는 그 뒤에 품사 태깅 모델(tag-model.onnx)을 한 단계 더 돌립니다.
그래서 분절 결과는 일관되며, 품사가 필요할 때만 AnalyzeSyntax를 쓰시면 됩니다.
자주 묻는 질문
Q. 품사가 필요 없으면 Tokenize가 더 빠른가요?
품사 태깅 단계를 거치지 않으므로 일반적으로 더 가볍습니다. 검색 색인·전처리처럼
품사 정보가 필요 없는 작업에서는 Tokenize가 적합합니다.
Q. 명사만 추출하려면 어떤 메서드를 쓰나요?
AnalyzeSyntax를 쓰고, 형태소의 tag가 NNG(일반명사)·NNP(고유명사)인 것만
골라내면 됩니다. 품사 태그는 AnalyzeSyntax에서만 제공됩니다.
Q. 두 메서드의 분절 결과가 다를 수 있나요?
분절은 같은 모델을 사용하므로 일관됩니다. 차이는 그 뒤 품사 태깅을 수행하는지 여부입니다.
Q. Tokenize는 47품사를 그대로 돌려주나요?
아닙니다. Tokenize는 형태소 분석이 아니라 단어만 분리하므로, 47품사가 아닌
8성분 체계(N 체언 / V 용언 / A 부사 / M 관형어 / J 조사 / E 어미 / S 기호 / I 감탄사)로
토큰을 분류합니다. 47품사 형태소 태그가 필요하면 AnalyzeSyntax를 사용하세요.
도움이 되었나요?