스프링 공부/ChatUniv

[ChatUniv] KOMORAN을 이용한 자연어 처리

장아장 2023. 10. 1. 08:28

AI : 아ㅋㅋㅋ 도깨비 자막 치우고 보고싶다고ㅋㅋㅋㅋ

 

질문에 대한 명사들의 통계를 내기 위한, 자연어 처리 라이브러리들을 보고있었다. 

이걸 통계로 적용시키고, 각 문자열에서 단어들만을 파싱하기 위한 외부 라이브러리를 디깅하던 중, 

두 가지 라이브러리가 눈에 들어왔다. mecab과 KOMORAN이라는 친구였다. 

물론 요즘 부스트캠프를 통해 js를 하루종일 만지다 보니 mecab을 적용시켜보는 것은 아주 수월했다

(솔직히 오픈소스에 대한 접근, 활용성은 자바보단 js가 더 편한 느낌도 든다.)

 

그래서, 둘 다 시도를 해보고, 프로젝트 내부에 코드를 적용시킬 수 있는 KOMORAN을 최종적으로 선택했다. 

 

그렇다면, KOMORAN을 어떻게 쓸까?

2가지 순서가 존재한다. 

  1. build.gradle에 해당 리포지토리 등록, 의존성 주입
  2. 코드 적용

 

해당 순서대로 정리를 간단히 해보았다. 

...
repositories {
    mavenCentral()
    maven { url 'https://jitpack.io' }
}
...
dependencies {
	...
    implementation group: 'com.github.shin285', name: 'KOMORAN', version: '3.3.4'
    ...
}

이런 방식으로 코모란 라이브러리를 등록해준다. 

KOMORAN은 한글로 존재하는 자연어를 처리해 국어문법에 맞게 토큰화시킬 수 있다. 

 

이걸 어떻게 써먹었을까?

private static final Komoran komoran = new Komoran(DEFAULT_MODEL.FULL);

private static List<String> analysePrompt(final String prompt) {
        return komoran.analyze(prompt).getNouns();
}
    
private static List<String> separateFromSentenceToWords(final String prompt) {
        return analysePrompt(prompt).stream()
                .filter(word -> word.length() < LIMIT_WORD_LENGTH)
                .collect(Collectors.toList());
}

이런식으로 처리를 했다. 

순서대로 정리하자면, KOMORAN은 자연어처리할 모델을 파라미터로 받아 문자열을 처리한다. 

 

여기에서 MODEL의 타입이 LIGHT, FULL이 있다는 공식 문서의 Q&A를 봤는데(참조), 우리는 정형화된 문자열이 아닌, 받은 질문의 키워드들을 받으면서, 신조어 등의 가능성이 있기에 FULL 모델을 사용했다. 

light는 용량이 가볍고 기본적인 국어만이 가능하다면, 위키피디아등의 고유명사를 포함한 모델이 FULL이라고 한다. 

 

이걸 이용한 코모란 객체를 초기화한 후, 해당 객체가 analyze를 이용해 명사들을 파싱해준다. 

 

이걸 가지고, 원하는 조건에 맞는 문자열로 파싱할 수 있었다. 

 

현재 프로젝트에서는 명사만을 사용했지만, 일반 토큰단위로 파싱할 수도 있다. 

'스프링 공부 > ChatUniv' 카테고리의 다른 글

[ChatUniv] No Offset?이게 왜 좋을까?  (0) 2023.09.29