728x90
1.Bag of Words
단어의 빈도만을 고려하는 국소 표현(Local Representation)방법의 일종이다.
문서에 포함된 단어들의 순서를 무시하고 빈도를 기반으로 수치 벡터를 생성한다.
각단어의 고유 번호와 빈도로 구성된다.
from konlpy.tag import Okt
okt = Okt()
def build_bag_of_words(text):
# 토큰화
tokens = okt.morphs(text)
tokens = [token for token in tokens if token.isalnum()] # 알파벳 및 숫자만 필터링
word_idx = {} # 단어와 인덱스를 매핑
freq = [] # 단어의 빈도
for word in tokens:
if word not in word_idx:
word_idx[word] = len(word_idx)
freq.append(1) # 새로 등장한 단어는 1로 초기화
else:
idx = word_idx[word]
freq[idx] += 1 # 재등장한 단어는 빈도수 증가
return word_idx, freq
text="최근 들어 많은 사람들이 취미로 코딩을 배우기 시작했습니다. 특히 온라인 교육 플랫폼과 유튜브 등의 자원을 활용하여 쉽고 빠르게 기초를 배우고 있습니다. 코딩을 배우면 문제 해결 능력도 향상되고, 창의적 사고를 기를 수 있는 장점이 많습니다. 또한, 프로그래밍 언어를 배우면 다양한 분야에서 활용할 수 있어 실용적입니다."
print(build_bag_of_words(text))
#결과
({'최근': 0, '들어': 1, '많은': 2, '사람': 3, '들': 4, '이': 5, '취미': 6, '로': 7, '코딩': 8,
'을': 9, '배우기': 10, '시작': 11, '했습니다': 12, '특 히': 13, '온라인': 14, '교육': 15,
'플랫폼': 16, '과': 17, '유튜브': 18, ' 등': 19, '의': 20, '자원': 21, '활용': 22, '하여':
23, '쉽고': 24, '빠르게': 25, '기초': 26, '를': 27, '배우고': 28, '있습니다': 29, '배우면'
: 30, '문제': 31, '해결': 32, '능력': 33, '도': 34, '향상': 35, '되고': 36, '창의': 37, '
적': 38, '사고': 39, '기를': 40, '수': 41, '있는': 42, '장점': 43, '많습니다': 44, '또한'
: 45, '프로그래밍': 46, '언어': 47, '다양한': 48, '분야': 49, '에서': 50, '할': 51, '있어
': 52, '실용': 53, '입니다': 54},
[1, 1, 1, 1, 1, 2, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 2, 1, 1, 1, 1, 3, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1
, 1, 1, 1, 1, 1, 1, 1])
1-1.CountVectorizer
sklearn에서지원하는 CountVectorizer 로 영어에 대해 수행할수있다.
from sklearn.feature_extraction.text import CountVectorizer
corpus = ['hello my name is hello hello']
vector = CountVectorizer()
print(vector.fit_transform(corpus).toarray())
print(vector.vocabulary_)
#출력
[[3 1 1 1]]
{'hello': 0, 'my': 2, 'name': 3, 'is': 1}
2.Document-Term Matrix
여러 문서에서 단어의 등장 빈도를 정리한 행렬로, 텍스트 데이터를 수치화하는 데 사용한다.
Bag of Words (BoW) 기법의 확장이다.
3.TF-IDF
텍스트 데이터에서 중요한 단어를 추출하기 위해 사용되는 통계적 기법
각 단어의 문서 내 중요도를 수치화하는 데 사용
3-1.TF (Term Frequency)
특정 단어가 문서에서 얼마나 자주 등장했는지 나타냄
3-2.IDF (Inverse Document Frequency)
특정 단어가 전체 문서에서 얼마나 드물게 등장했는지를 나타냄
3-3.TF-IDF
문서 내 중요도를 수치화하는 값이다.
3-4.TfidfVectorizer
Scikit-learn에서 제공하는 텍스트 데이터를 TF-IDF 방식으로 벡터화하는 도구
TF-IDF 값을 적용하여 변환한다.
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
corpus = [
"hello my name is hello hello",
"my name is John",
"hello John my name"
]
#DTM
vector = CountVectorizer().fit(corpus)
print(vector.fit_transform(corpus).toarray())
print(vector.vocabulary_)
#TF-IDF
tfidfv = TfidfVectorizer().fit(corpus)
print(tfidfv.transform(corpus).toarray())
print(tfidfv.vocabulary_)
#결과
[[3 1 0 1 1]
[0 1 1 1 1]
[1 0 1 1 1]]
{'hello': 0, 'my': 3, 'name': 4, 'is': 1, 'john': 2}
[[0.89617418 0.29872473 0. 0.2319864 0.2319864 ]
[0. 0.55847784 0.55847784 0.43370786 0.43370786]
[0.55847784 0. 0.55847784 0.43370786 0.43370786]]
{'hello': 0, 'my': 3, 'name': 4, 'is': 1, 'john': 2}
🎈참고자료
728x90
'AI' 카테고리의 다른 글
[AI] 코사인 유사도 (0) | 2024.12.27 |
---|---|
[AI] 국소 표현(Local Representation),분산 표현(Distributed Representation) (0) | 2024.12.27 |
[AI] 통계적모델, n-gram모델 (0) | 2024.12.27 |