[NLP] FastText로 간단한 텍스트 분류 모델 만들기

2025. 4. 2. 23:43·LLM/Project

최근에 사용자 명령어를 인식해서 어떤 작업을 실행할지 구분하는 기능이 필요했다. 간단한 텍스트 분류 모델이 필요했는데, Facebook에서 만든 오픈소스 라이브러리 FastText를 사용하여 보았다. 이 글에서는 Python을 통해 FastText 분류 모델을 구현하는 전체 과정을 소개한다.

 

https://fasttext.cc/

 

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
'LLM/Project' 카테고리의 다른 글
  • [NLP] FastText Python 바인딩 오류 해결하기
  • [Project] LLM을 활용한 시스템 인터페이스 만들어보기
임승택
임승택
"Hello, I am Im Seungtaek, a computer engineering student. Nice to meet you!"
  • Lim's Technology
    임승택
    임승택
    "Welcome to Lim's Technology!"
  • 누적 조회수
    총 회
    구독하기
    • 분류 전체보기 (64)
      • Blog (1)
      • Computer Vision (34)
        • Computer Vision (2)
        • Paper reviews (16)
        • Project (9)
        • Basic (7)
      • LLM (8)
        • Paper reviews (3)
        • Project (3)
        • Basic (2)
      • Data Analysis (7)
        • Basic (7)
      • Robotics (5)
        • Paper reviews (3)
        • Basic (2)
      • Technology Notes (5)
      • Memo (4)
  • 인기 글

  • 최근 댓글

  • 최근 글

임승택
[NLP] FastText로 간단한 텍스트 분류 모델 만들기
상단으로

티스토리툴바