@@ -258,3 +258,143 @@ outputs = model(**inputs)
258258```
259259
260260> BERT는 ` transformers ` 라이브러리와 PyTorch가 필요합니다. 가벼운 실습은 ` chapter113 ` 의 TF-IDF 기반 코드를 먼저 사용해 보세요.
261+
262+ ---
263+
264+ ## KoNLPy: 한국어 형태소 분석 라이브러리
265+
266+ ** KoNLPy** (Korean NLP in Python)는 한국어 자연어 처리를 위한 파이썬 라이브러리입니다.
267+ 한국어는 조사·어미가 단어에 붙어 변형되는 교착어라서, 영어처럼 공백으로 단순하게 나눌 수 없습니다.
268+ KoNLPy는 이런 한국어 특성을 다루는 ** 형태소 분석기** 를 한 곳에 모아 제공합니다.
269+
270+ ### 대표 형태소 분석기
271+
272+ | 분석기 | 특징 | 활용 상황 |
273+ | ---| ---| ---|
274+ | ** Okt** (Open Korean Text) | 속도가 빠르고 SNS·비정형 텍스트에 강함 | 뉴스 댓글, 주식 커뮤니티 텍스트 분석 |
275+ | ** Kkma** (꼬꼬마) | 정밀도가 높고 학술적 텍스트 분석에 강함 | 논문, 공문서, 정밀 분류 |
276+ | ** Mecab** | 속도가 가장 빠르고 대용량 처리에 유리 | 대규모 코퍼스 전처리 |
277+
278+ ### Okt 기본 사용 예시
279+
280+ ``` python
281+ from konlpy.tag import Okt
282+
283+ okt = Okt()
284+
285+ sentence = " 삼성전자 주가가 오늘 크게 올랐습니다."
286+
287+ # 형태소 분리
288+ morphs = okt.morphs(sentence)
289+ # → ['삼성전자', '주가', '가', '오늘', '크게', '올랐습니다', '.']
290+
291+ # 품사 태깅 (형태소 + 품사)
292+ pos = okt.pos(sentence)
293+ # → [('삼성전자', 'Noun'), ('주가', 'Noun'), ('가', 'Josa'),
294+ # ('오늘', 'Noun'), ('크게', 'Adverb'), ('올랐습니다', 'Verb'), ('.', 'Punctuation')]
295+
296+ # 명사만 추출
297+ nouns = okt.nouns(sentence)
298+ # → ['삼성전자', '주가', '오늘']
299+ ```
300+
301+ ### 주식 뉴스 분석에 활용하면
302+
303+ ``` python
304+ from konlpy.tag import Okt
305+ from collections import Counter
306+
307+ okt = Okt()
308+ news = " 반도체 수출이 증가하며 삼성전자와 SK하이닉스 주가가 동반 상승했습니다."
309+
310+ # 명사만 추출해 키워드 분석
311+ nouns = okt.nouns(news)
312+ keyword_count = Counter(nouns)
313+ # → Counter({'삼성전자': 1, '반도체': 1, '수출': 1, '주가': 1, ...})
314+ ```
315+
316+ > ** 핵심 포인트** : KoNLPy는 한국어 텍스트를 의미 단위(형태소)로 쪼개는 도구입니다.
317+ > 뉴스, 공시, 커뮤니티 글에서 ** 핵심 키워드를 추출** 하거나 ** BoW(단어 가방) 벡터** 를 만들 때 첫 번째 전처리 단계로 사용됩니다.
318+
319+ ### KoNLPy 처리 흐름
320+
321+ ``` mermaid
322+ flowchart TD
323+ A["한국어 텍스트 입력\n'삼성전자 주가가 올랐습니다'"] --> B["형태소 분석\nOkt.pos()"]
324+ B --> C["형태소 + 품사 목록\n[('삼성전자','Noun'), ('주가','Noun'), ...]"]
325+ C --> D["명사/동사 필터링\n불필요한 조사·어미 제거"]
326+ D --> E["정제된 키워드 목록\n['삼성전자', '주가', '상승']"]
327+ E --> F["단어 빈도 계산 또는\nWord2Vec / TF-IDF 입력"]
328+ ```
329+
330+ ---
331+
332+ ## 마르코프체인(Markov Chain): 통계 기반 텍스트 생성
333+
334+ ** 마르코프체인** 은 신경망 없이 ** 현재 상태만 보고 다음 상태를 확률적으로 예측** 하는 통계 모델입니다.
335+ 텍스트 생성에서는 "앞 단어(들)가 주어졌을 때, 다음 단어가 무엇일 확률이 높은가?"를 학습한 뒤 문장을 만들어냅니다.
336+
337+ ### 직관적인 이해
338+
339+ | 방식 | 기억 범위 | 예시 |
340+ | ---| ---| ---|
341+ | 1-gram (Unigram) | 이전 상태 0개 | 단어를 완전 무작위 선택 |
342+ | 2-gram (Bigram) | 이전 단어 1개 | "삼성" 다음엔 "전자"가 자주 옴 |
343+ | 3-gram (Trigram) | 이전 단어 2개 | "삼성전자 주가" 다음엔 "상승"이 자주 옴 |
344+
345+ ``` python
346+ import random
347+ from collections import defaultdict
348+ from konlpy.tag import Okt
349+
350+ okt = Okt()
351+
352+ def build_markov_chain (text , n = 3 ):
353+ """ n-gram 마르코프체인 딕셔너리 구축"""
354+ tokens = okt.pos(text) # 형태소 + 품사 분리
355+ chain = defaultdict(list )
356+ for i in range (len (tokens) - n):
357+ key = tuple (tokens[i:i+ n]) # n개 토큰을 키로 사용
358+ chain[key].append(tokens[i+ n]) # 다음 토큰을 값으로 저장
359+ return chain
360+
361+ def generate_text (chain , n = 3 , length = 20 ):
362+ """ 마르코프체인으로 문장 생성"""
363+ start = random.choice(list (chain.keys()))
364+ result = list (start)
365+ for _ in range (length):
366+ key = tuple (result[- n:])
367+ if key not in chain:
368+ break
369+ next_token = random.choice(chain[key])
370+ result.append(next_token)
371+ return " " .join([word for word, _ in result])
372+ ```
373+
374+ ### 마르코프체인 vs LSTM 비교
375+
376+ | 비교 항목 | 마르코프체인 | LSTM |
377+ | ---| ---| ---|
378+ | 학습 방식 | 통계(빈도 카운팅) | 신경망(역전파 학습) |
379+ | 문맥 범위 | 고정 n개 이전 토큰만 | 긴 시퀀스 전체를 기억 |
380+ | 계산 비용 | 매우 낮음 | 높음(GPU 권장) |
381+ | 생성 품질 | 어색한 문장 빈도가 높음 | 더 자연스러운 문장 생성 |
382+ | 해석 가능성 | 높음(빈도 테이블로 확인 가능) | 낮음(블랙박스) |
383+ | 활용 | 빠른 프로토타입, 교육 목적 | 실제 언어모델, 챗봇 등 |
384+
385+ ### 주식 투자에 연결하면
386+
387+ 마르코프체인의 "이전 상태 → 다음 상태 확률" 구조는 주가 흐름에도 적용할 수 있습니다.
388+
389+ ```
390+ 상승 → 상승 : 55%
391+ 상승 → 하락 : 45%
392+ 하락 → 상승 : 42%
393+ 하락 → 하락 : 58%
394+ ```
395+
396+ 이렇게 만들어 두면 "오늘 상승했을 때 내일 또 상승할 확률"을 간단하게 추정할 수 있습니다.
397+ (단, 실제 주가는 이보다 훨씬 복잡한 요인이 작용하므로 단독 활용은 주의가 필요합니다.)
398+
399+ > ** 핵심 포인트** : 마르코프체인은 신경망 이전 방식의 텍스트·시퀀스 생성 모델입니다.
400+ > LSTM이나 Transformer보다 단순하지만 계산 비용이 낮고 원리가 명확해, NLP 입문 실습과 빠른 프로토타입에 자주 사용됩니다.
0 commit comments