1. N-gram 이란?
N-gram 이란 간단하게 말해서 입력한 문자열을 N개의 기준 단위로 분리하는 방법이다.
예를 들어, "Here is a dog" 라는 문장을 단어 단위의 3-gram으로 만든다면,
"Here is a", "is a dog"로 만들 수 있다. 이렇게 할 경우 각 키워드에 따른 빈도(Relative Frequency)를 분석 할 수 있고, 검색어 엔진에서 키워드를 뽑아내거나 음성 인식에서도 쓰일 수 있다고 한다.
2. N-gram 알고리즘
2-1. N-gram 실행 전 문자열 다듬기
String line = value.toString().replaceAll("[^A-Za-z]"," ");
나 같은 경우 자바에서 N-gram 알고리즘을 사용했었기에 이렇게 정규표현식과 replaceAll 함수를 사용 하여 문자를 다듬어 주었다. 이때, 알파벳이 아닌것들을 모두 공백으로 만들어 주었다.
2-2. N-gram 단어 단위로 만들기
String word_list ="";
// Doing N-grams according to each word
for(i = 0; i <= num_itr - N ; i++){
if(words[i] != null){
String key_word = words[i];
HashMap<String, Integer> map = new HashMap<String, Integer>();
if (input_map.containsKey(key_word)){
map = input_map.get(key_word);
}
//Make N-gram words
for (j = i + 1 ; j < i + N; j++){
word_list = word_list + " " + words[j]; //concat words
}
if (map.containsKey(word_list)){
map.put(word_list, (int) map.get(word_list) + 1);
}else {
map.put(word_list, 1);
}
input_map.put(key_word, map);
word_list = "";
}
}
나 같은 경우 Java의 Hash map을 사용하여 N-gram 기준 keyword와 뒤에 따라오는 word_list로 구분해주었고, keyword에 따라 word_list를 생성해 N-gram 단어를 생성했다. 그 후, Hashmap에 있는지 없는지 여부를 확인해 그 단어를 count 해주었다.
3. My Review
맨 처음에 N-gram 알고리즘을 공부했을 때는 그냥 단순히 알고리즘 중 하나인줄 알았는데 이렇게 블로그를 쓰면서 조사를 해보니깐 N-gram 알고리즘은 Language Model에서 사용되는 기본적인 기술 중 하나라는 것을 알았다.
또한 N-gram 기반으로 담은 단어를 확률로도 예측 할 수 있는 것이 굉장히 과학적이라고 느껴졌다.
하지만 N-gram에도 정확도 문제가 있다.
예를 들어, N-gram 언어 모델은 이전의 N개의 단어만 고려하기 때문에, 앞 문장의 맥락을 놓치는 경우가 발생 할 수 있기 때문에 정확도가 떨어질 수 있다고 한다.
'Algorithm' 카테고리의 다른 글
| [Algorithm] What is SON Algorithm ? (0) | 2023.08.14 |
|---|---|
| [Algorithm] What is A-Priori Algorithm? (2) | 2023.08.07 |
| [Algorithm] What is RFP Algorithm on deduplication? (3) | 2023.07.03 |
| [Algorithm] What is Dijkstra's Algorithm? (2) | 2023.06.20 |
| [Algorithm] What is the page rank? (1) | 2023.06.07 |