반응형
KoBERT를 사용했다
https://github.com/SKTBrain/KoBERT/tree/master/kobert_hf
설치하는 방법 등은 위 깃허브에 나와있다.
Konltk에 비해 어떤성능을 보여줄지 내심 기대를 했다.
그래도 BERT라는건 데이터를 때려넣고 어텐션 모델을 돌린거니까 각 단어의 토큰을 좀더 잘 파악하는 모델이지 않을까 싶었다.
그럼 샘플 코드와 그 결과물을 통해 보자
# from transformers import BertTokenizer, BertModel
from kobert_tokenizer import KoBERTTokenizer
import string
from nltk.util import ngrams
# Load tokenizer and model
tokenizer = KoBERTTokenizer.from_pretrained('skt/kobert-base-v1')
# Text to tokenize
text = "한국어 문장을 분류합니다.모델 코디네이션이 무엇인지 압니까 휴먼?"
# Tokenize the text
tokens = tokenizer.tokenize(text)
encoded = tokenizer.encode(text)
print("Tokens:", tokens)
print("Encode:", encoded)
# Function to clean tokens (handle subwords and remove punctuation)
def clean_tokens(tokens):
clean = []
for token in tokens:
# Remove punctuation
if all(char in string.punctuation for char in token): # Token is punctuation only
continue
# Handle subwords
if token.startswith("##"): # Subword continuation
clean[-1] += token[2:] # Append to the previous token
else:
clean.append(token)
return clean
# Cleaned tokEns
cleaned_tokens = clean_tokens(tokens)
print("Cleaned Tokens:", cleaned_tokens)
# Generate n-grams
def generate_ngrams(tokens, n):
return list(ngrams(tokens, n))
# Generate 2-grams and 3-grams
two_grams = generate_ngrams(cleaned_tokens, 2)
three_grams = generate_ngrams(cleaned_tokens, 3)
print("2-grams:", [" ".join(gram) for gram in two_grams])
print("3-grams:", [" ".join(gram) for gram in three_grams])
다소 요상한 말투의 문장을 토크나이제이션을 하고 이를 n-gram으로 만들었다.
사실 n-gram 부분은 크게 중요하지는 않다. 결국 토큰이 어떻게 나왔는지가 중요하니까.
Tokens: ['▁한국', '어', '▁문', '장을', '▁분류', '합니다', '.', '모델', '▁코', '디', '네', '이', '션', '이', '▁무', '엇', '인지', '▁압', '니까', '▁휴', '먼', '?']
결과는 위와 같이 나왔다. "_"는 어떤 단어의 시작을 뜻한다고 한다. 그런 의미에서 단어의 시작점은 잘 짚었다. 근데 무슨이유에서인지 단어가 지나치게 쪼개져 버린다. 외국어인 "코디네이션"의 경우 각각으로 쪼개져버렸다. 무슨 방법이 있는지 몰랐기 때문에 KoBERT가 아닌 Konlpy를 쓰기로 했다.
반응형
'테크일기' 카테고리의 다른 글
영차영차 (0) | 2025.01.19 |
---|---|
파라메트릭 모델링 계속 (0) | 2025.01.18 |
Bert Tokenizer를 이용한 n-gram 만들기 (0) | 2025.01.16 |
오랜만에 NLP에 시동을 건다 (0) | 2025.01.15 |
이산수학 공부 (0) | 2025.01.14 |