Fence의 기술력
대회에서 소개했던 Fence의 메인 서비스인 로챗(LawChat)에 대해 소개해보려고 한다.
기본적으로 로챗은 변호사들이 하나의 사건을 맡으면서 유사판례를 찾아주는 챗봇이다.
기존 판례 서칭 시스템은 키워드 2~3개를 선정하여 검색을 했다. 이 작업의 비효율성을 여러 조사를 통해 체감했고, 로챗을 개발하고 있다. 키워드 기반 검색과 달리 문장의 문맥을 바탕으로 실제 의미론적 유사도가 같은 판례를 변호사에게 제공해 준다.
이제 조금 더 구체적으로 사용된 기술에 대해 얘기해보자.
세계 최초로 코사인 유사도와 Spearman 스코어, Pearson 스코어를 합산하여 한국어 텍스트의 의미론적 유사도(Semantic Similarity)를 측정하는 프로토 타입을 구현했다. Semantic Similarity는 두 개체(단어, 문장, 문서 등)가 의미적으로 얼마나 유사한지 측정하는 방법이다. 즉, 단어의 뜻이나 문장의 의미를 분석하여 둘의 의미에 대한 유사도를 수치화 할 수 있는 것이다. 코사인 유사도는 두 백터간의 유사도를 측정하는 방법 중 하나이다. 벡터는 방향과 값을 가지는 값이라고 물리 시간에 배웠을 것이다. 예를들어 단어들을 벡터로 표현할 수 있다. 코사인 유사도는 두 벡터의 방향이나 얼마나 비슷한지를 나타내는 값으로 0과 1 사이의 값으로 표현한다. 값이 1에 가까울수록 두 벡터는 유사하다 할 수 있다. 스피어만 스코어와 피어슨 스코어는 두 변수간의 상관 관계를 측정해준다. 두 변수가 얼만큼 밀접하게 연관되어 있는지 측정할 수 있는데, 스피어만 스코어는 두 변수가 순서형으로 되어 있을 경우, 그리고 피어슨 스코어는 두 변수가 연속형으로 관련되어 있을 경우에 적용한다.
예를들어 "어린이"와 "아이"라는 단어는 의미적으로 매우 비슷하다. 이 단어들의 코사인 유사도를 계산하면, 1과 비슷한 매우 높은 값을 받을 것이다. 하지만 "어린이"와 "나무"는 의미가 거의 연관이 없다. 따라서 코사인 유사도가 매우 낮을 것이다. 따라서 코사인 유사도와 상관계수를 이용해서 단어나 문장의 의미 유사도를 측정할 수 있다. 이러한 측정 방법들은 자연어 처리와 정보 검색 분야에서 널리 사용되는데 로챗에서 사용되는 알고리즘은 두 가지 방법으로 작동한다.
첫째, 각각의 단어 쌍에 대해 코사인 유사도와 상관 계수를 따로 계산한 후, 이들 값을 가중 평균하여 최종 유사도를 계산한다. 둘째, 코사인 유사도와 상관계수를 결합하여 하나의 유사도 점수를 계산한다.
이 값들을 계산하고 나타내기 위해서 Github와 hugging face로 파인튜닝된 SKT의 KoBERT, Google의 SBERT, 그리고 GPT3.5엔진을 사용하였다. 구체적으로 KoBERT는 한국어 모델로 코사인 유사도를 측정하는데 사용이되고 SBERT는 영어 모델로 코사인 유사도를 측정하였다. 그리고GPT3.5 엔진을 통해서 피어슨 스코어와 스피어만 스코를 계산하는 것이다.
결론적으로 이 알고리즘을 통해서 기존의 키워드 중심으로 유사 판례를 검색하는 것이 아닌 간편하게 현재의 판례 상황을 문장의 형식으로 입력을 하면 알고리즘을 통해서 의미론적 유사도를 계사하여 유사 판례를 찾아주는 것이다. 이 서칭 서비스와 수십만건의 판례 데이터 베이스가 들어가게 된다면 매우 강력한 알고리즘이 될 것이라고 생각한다. 따라서 우리는 우리의 알고리즘을 강화시키고, 수십만건의 판례 구매와 전처리를 위해 외주 개발 팀을 고용했습니다.