음성인식 자연어이해 및 자연어처리 간단 소개 #2
앞서 말씀드린 내용처럼 ASR 과정과 NLU 과정에는 확률이라는 개념이 많이 적용되고 있습니다.
하지만 NLU 과정에는 확률언어모델 말고도 문법기반의 NLU 모델 또한 존재하고 있습니다.
사람이 말하는 내용을 미리 모델 내에서 정의해 놓고, 말하는 내용이 정의된 내용과 일치할 경우에 미리 결정된 응답에 의해서 음성인식을 처리하는 방법입니다. 따라서 이 방법을 적용할 때는 Syntax와 Semantics을 얼마나 잘, 구체화시켜서 지정하는지가 모델의 성능을 좌지우지하는 척도가 될 것입니다. (이런 문법기반의 NLU 모델을 학습하기위해 향후 BNF - Backus–Naur form 표기법에 대해서도 포스팅해보도록 하겠습니다)
Grammar 방법은 아무래도 미리 정의해놓는 방법이기에 미리 알고있는 내용에 대해서는 매우 정확한 처리가 가능할 것입니다. 그리고 여러 명령 (예: "여기 갔다가 저기 갔다가 저기들려서 가줘")을 동시에 내린다고 하더라도 미리 정해져있는 내용일 경우에는 문제없이 작동가능할 것입니다. 관리자입장에서 모델을 관리하는데도 쉬울 것입니다.
다만 모델 내에 정의되어있지 않는 명령이 들어올 경우에는 아예 작동하지 않게 되는 단점을 가지고 있습니다.
여기서 시멘틱하다라는 의미가 궁금하실 분들이 있을 것 같아 아래와 같이 사전을 찾아봤습니다.
'사람이 말한 문장을 컴퓨터가 의미를 이해할 수 있는 언어의 형태로 바꾸는 것' 을 시멘틱하다라고 표현을 하고 있습니다.
앞으로 시멘틱이라는 단어를 많이 사용할테니 간단하게나마 의미를 기억해주시면 도움이 될 것 같습니다.
통계모델의 경우는 상당히 복잡한 과정이고, 여러가지 모델들이 있습니다.
나중에 시간을 내서 하나하나씩 학습해보도록 하겠습니다.
간단하게 설명드리면 n-grams이라는 모델이 있습니다. 사람이 말을 한 내용을 n개의 음절이나 단어로 쪼개서 분석을 하는 기법입니다.
예를 들어서 "나는 오늘 김밥을 친구와 함께 먹었습니다."라는 문장을 단어수준의 n-grams으로 처리를 한다면,
'나는 오늘 김밥을', '오늘 김밥을 친구와', '김밥을 친구와 함께', '친구와 함께 먹었습니다' 와 같이 쪼갤 수 있습니다.
여기서 '나는 오늘 김밥을' 다음에, '오늘 김밥을 친구와' 다음에, '김밥을 친구와 함께' 다음에 나와야 할 동사는 무엇일 것 같으신가요?
아마도 많은 분들께서 '먹다' 라고 생각을 하실 것입니다. 예, 그렇습니다. n-gram을 통해서 모델은 그 다음에 나올 단어의 확률을 계산하고 가장 높은 확률을 가지고 있는 것을 다음 단어로 매칭시킬 수 있습니다.
아무래도 통계모델의 경우에는 개발에 훨신 큰 노력이 수반되게 됩니다. 아무래도 사전 데이터가 많이 수집되어야하고 학습되어있어야 하기 때문입니다. 하지만 문법기반의 모델과 비교하여 사전에 정의되지 않았던 부분을 커버할 수 있고, 다양한 음성명령에 대해서도 조금 더 유연하게 대응 가능하다는 장점을 가지고 있습니다.