728x90
1.soynlp
한국어 자연어 처리를 위한 오픈 소스 라이브러리
학습 기반 모델을 사용하여 단어를 자동으로 분리하고, 여러 가지 텍스트 전처리 작업을 효율적으로 수행할 수 있도록 돕는다.
불용어 처리와 어근 추출 등 다양한 기능을 제공하여 한국어 텍스트를 분석할 때 유용하다.
https://github.com/lovit/soynlp
GitHub - lovit/soynlp: 한국어 자연어처리를 위한 파이썬 라이브러리입니다. 단어 추출/ 토크나이저 /
한국어 자연어처리를 위한 파이썬 라이브러리입니다. 단어 추출/ 토크나이저 / 품사판별/ 전처리의 기능을 제공합니다. - lovit/soynlp
github.com
1-1.응집확률(cohesion probabilities)
응집 확률은 주로 텍스트 내에서 단어나 구가 서로 얼마나 관련이 있는지를 나타내는 지표이다.
주어진 문맥에서 특정 단어가 등장할 확률을 측정하는 데 사용될 수 있다.
1-2.분기 엔트로피(branching entropies)
텍스트 내에서 특정 단어가 뒤따를 가능성에 대한 예측 불가능성이나 변동성을 측정한다.
분기 엔트로피가 높을수록 예측할 수 있는 단어가 많고, 낮을수록 예측 가능한 단어가 적다는 뜻이다.
1-3.액세서 다양성(accessor variety)
문장에서 각 단어들이 얼마나 다양한 방식으로 접근되었는지를 측정하는 지표
다양한 의미를 가진 단어들이 얼마나 잘 활용되었는지 또는 단어가 얼마나 다양하게 사용되었는지를 나타낸다.
2.soynlp 사용
2-0.학습
corpus =["여기에 학습시킬 문장을 넣으세요"]
# 단어 점수를 추출하는 기능
word_extractor = WordExtractor()
# 텍스트 데이터(corpus)로 단어 점수 학습을 시작
word_extractor.train(corpus)
# 학습된 데이터를 바탕으로 각 단어의 점수를 추출
word_score_table = word_extractor.extract()
2-1.cohesion_forward
단어 응집력을 나타내는 지표로, 단어가 이전 단어와 얼마나 자연스럽게 연결되는지를 나타내는 지표이다.
주어진 단어가 문맥 내에서 얼마나 자연스럽게 연결되는지를 측정하는 값이다.
해당 지표가 낮으면 문맥상 잘 연결되지 않는 단어일수있다.
이 값이 높을수록 전체 코퍼스에서 이 문자열 시퀀스는 하나의 단어로 등장할 가능성이 높다.
# 응집확률
print(word_score_table["단어"].cohesion_forward)
#결과
0.19841268168224552
2-2.right_branching_entropy
확률 분포의 엔트로피값을 나타내는 지표다.
Branching Entropy는 단어의 다음 문자가 등장할 확률 분포를 측정하는 값이다.
Branching Entropy 값은 단어에 가까워질수록 점점 줄어들고 문자열 다음에는 다음 문자로 오는값이 명확하면 0을 가진다.
# 브랜칭 엔트로피
print(word_score_table["단어"].right_branching_entropy)
#결과
1.6371694761537934
2-3.l_tokenizer
L 토크나이저는 한국어 문장에서 단어를 두 부분으로 나누는 방식으로 토큰화하는 기법이다.
한글은 L 토큰 + R 토큰의 형식을 가질경우가 많다.
ex) 숙제+를 집+에서 해결+하다
분리 기준을 점수가 가장 높은 L 토큰을 찾아내는 원리이다.
응집력(cohesion)이 높다는것은 두 단어나 어절이 서로 잘 연결되고 자연스럽게 이어진다는 의미를 가진다.
# 응집확률기준으로 L+R 토큰분리
#띄어쓰기 단위로 나눈 어절 토큰찾기
scores = {word:score.cohesion_forward for word, score in word_score_table.items()}
l_tokenizer = LTokenizer(scores=scores)
print(l_tokenizer.tokenize("파일을 삭제하자", flatten=False))
#결과
[('파일', '을'), ('삭제', '하자')]
2-4.MaxScoreTokenizer
띄어쓰기가 되지 않는 문장에서 점수가 높은 글자로 찾아낸다.
# 최대 점수 토크나이저
maxscore_tokenizer = MaxScoreTokenizer(scores=scores)
print(maxscore_tokenizer.tokenize("테스트문장입니다"))
# 결과
['테스트','문장','입니다']
2-5.emoticon_normalize
반복되는 불필요한 데이터를 제거해준다.
# 반복제거
print(emoticon_normalize('반갑습니다다다다다다ㅋㅋㅋㅋ', num_repeats=1))
#결과
반갑습니다ㅋ
728x90
'AI' 카테고리의 다른 글
[AI] 통계적모델, n-gram모델 (0) | 2024.12.27 |
---|---|
[AI] 지도 학습(Supervised Learning)이란? (0) | 2024.12.27 |
[AI] 할루시네이션(Hallucination) (0) | 2024.12.26 |