최근에 사용자 명령어를 인식해서 어떤 작업을 실행할지 구분하는 기능이 필요했다. 간단한 텍스트 분류 모델이 필요했는데, Facebook에서 만든 오픈소스 라이브러리 FastText를 사용하여 보았다. 이 글에서는 Python을 통해 FastText 분류 모델을 구현하는 전체 과정을 소개한다.
fastText
Library for efficient text classification and representation learning
fasttext.cc
FastText 설치
먼저 설치부터 시작. FastText는 아래처럼 pip으로 간단하게 설치할 수 있다.
pip install fasttext
데이터 준비
모델을 학습시키기 위해, 각 명령어에 해당하는 의도를 미리 정의해두었다. 예를 들어 "티칭창 열어줘", "검사 시작해", "패키지 설정해" 같은 명령어들을 6가지 의도로 나누었다. ( 필자는 반도체 검사시에 장비에서 사용될 시스템에서의 텍스트 분류가 필요하여서 다음과 같이 만들어 보았다. )
data = {
"text": [
"티칭창 좀 열어줘", "티칭 화면 보여줘", ...
],
"label": [
"open_teaching"] * 5 +
["inspection_window"] * 5 +
...
}
데이터 전처리
astText는 학습 시 특별한 포맷을 요구한다. __label__ 접두사를 붙여서 라벨을 표현해야 한다.
__label__open_teaching 티칭창 좀 열어줘
Pandas로 데이터를 DataFrame으로 만든 뒤, 학습용과 검증용으로 나누고 이 포맷에 맞게 .txt 파일로 저장했다.
def save_fasttext_format(data, filename):
with open(filename, "w", encoding="utf-8") as f:
for index, row in data.iterrows():
f.write(f'__label__{row["label"]} {row["text"]}\n')
모델 학습해보기
이제 준비된 데이터를 바탕으로 모델을 학습시킨다.
model = fasttext.train_supervised(input="train.txt")
모델 성능 확인
검증용 데이터로 정확도를 확인해봤다. 결과는 Accuracy: 1.0 으로 나왔다. 데이터가 적긴 하지만, 분류가 제대로 되는 걸 확인할 수 있었다.
result = model.test("val.txt")
print(f"Accuracy: {result[1]}")
실제 문장 예측해보기
예측 테스트도 해봤다. 예를 들어 “BGA 검사 시작하자”라는 입력을 넣으면 FastText는 학습된 분류 중 하나로 예측해준다.
text = "BGA 검사 시작하자"
prediction = model.predict(text)
예측된 레이블은 이런 식으로 나온다.
__label__start_inspection
사람이 보기 쉽게 바꿔주기 위해 맵핑 딕셔너리를 만들어 의도 이름으로 변환해줬다.
label_map = {
'__label__open_teaching': "open_teaching",
'__label__inspection_window': "inspection_window",
...
}
FastText는 빠르고, 사용법도 간단해서 간단한 분류 문제에 굉장히 유용했다. 하지만 이 글을 쓰게된 주요 목적은 FastText가 2018년에 만들어지고, 2024년 3월 19일자로 fasttext github 저장소가 읽기 전용 보관 파일로 변경되고 fasttext가 더 이상 유지 관리되지 않으므로 패치를 더 이상 받지 않아서 오류가 많이 발생했다. 그래서 이 오류를 해결한 방법은 다음 포스트에 작성하여 놓았다.
https://c0mputermaster.tistory.com/69
[NLP] FastText Python 바인딩 오류 해결하기
이 글은 FastText 사용중에 NumPy 2.0으로 인해 Python 바인딩에서 오류 발생하여 해결한 방법을 공유하고자 작성되었다.2025.04.02 - [LLM/Project] - [NLP] FastText로 간단한 텍스트 분류 모델 만들기 ErrorFastText
c0mputermaster.tistory.com
'LLM > Project' 카테고리의 다른 글
[NLP] FastText Python 바인딩 오류 해결하기 (0) | 2025.04.06 |
---|---|
[Project] LLM을 활용한 시스템 인터페이스 만들어보기 (0) | 2025.03.12 |