hgk0404.tistory
Code After Work
hgk0404.tistory

공지사항

전체 방문자
오늘
어제
  • 전체 카테고리 N
    • [컴퓨터비전]
    • [MLOps] N
      • [FastAPI] N
    • [Computer Science]
      • [컴퓨터네트워크]
      • [알고리즘]
      • [자료구조 in C]
      • [C & C++]
      • [이산수학]
      • [Math]
    • [머신러닝]
      • [Numpy, Pandas]
    • [Cloud]
      • [AWS]
      • [NCP]
      • [Kubernetes]
      • [Terraform]
    • [Dev]
      • [가상환경]
      • [Linux]
      • [Docker]
    • [Python]
    • [Coding Test]
      • [백준]
      • [프로그래머스]
      • [SQL]
    • [WEB]
    • [일상]
    • [엑셀]
    • [금융]

인기 글

최근 글

최근 댓글

250x250
hELLO · Designed By 정상우.
hgk0404.tistory

Code After Work

[머신러닝] 문장 유사도 분석을 위한 Levenshtein Distance(편집거리 알고리즘) 행렬 구하기
[머신러닝]

[머신러닝] 문장 유사도 분석을 위한 Levenshtein Distance(편집거리 알고리즘) 행렬 구하기

2024. 4. 18. 14:52
728x90

 

 

두 문장의 유사도를 알기 위해 "레벤슈타인 거리"라는 알고리즘을 사용할 수 있습니다. 

 

 

대학시절 이산수학 과목에서 배웠는데 잊어버리기도했고 문장 유사도 분석을 해야하기 때문에 다시 정리할까 합니다.

 

 

https://en.wikipedia.org/wiki/Levenshtein_distance

 

 

이러한 공식을 가지고 있다고 합니다.

 

 

하지만 너무 어려우니 저는 매트릭스에 값 채우는 법만 빠르게 알아보겠습니다

 

 

레벤슈타인 알고리즘은 2차원 매트릭스를 생성하는데 비교하는 글자의 수에 따라서 정방행렬이 될 수도 있고, 아닐 수도 있습니다.

 

 

비교하려는 두 개의 문자 또는 문장의 길이가 같으면 정방행렬, 그렇지 않다면 정방행렬이 아니게 됩니다.

 

 

규칙은 간단합니다. 2차원 매트릭스의 행과 열을 a[i], b[j]라 할때 a[i] == b[i]이면 왼쪽 위 대각선 값을 그대로 가져오고, 그렇지 않으면 왼쪽, 위쪽, 왼쪽 위 대각선 셋 중 가장 작은 값에 +1을 해준값을 가져오면 됩니다.

 

 

그렇게 모든 값을 채운 후 2차원 행렬의 오른쪽 가장 아래 값이 레벤슈타인 거리가 됩니다.

 

 

예시로 "kitten"과 "sitting"의 레벤슈타인 거리가 얼마인지 알아보겠습니다.

 

 

맨 처음 각 행에 원하는 글자를 넣고 숫자를 채워줍니다.

 

 

 

 

첫 번째 행인 s를 채워주겠습니다. 위에서 말한대로 a[i] == b[j]이면 왼쪽 위 대각선의 값을 그대로 가져오고 아니라면 왼쪽, 위쪽, 왼쪽위 대각선에서 가장 작은 값에서 +1을 해줍니다.

 

두 번째 행인 i를 채울 때에는 같은 알파벳인 i 가 있습니다. 그래서 a[i] == b[j]를 만족해 왼쪽위 대각선의 값을 그대로 가져옵니다.

 

 

그렇게 같은 방법으로 끝까지 진행하다 보면 다음과 같이 매트릭스가 채워지게 됩니다.

(색상별로 칠한 것은 a[i] == b[j]일때를 나타냈습니다)

 

 

그렇게 가장 아래에 있는 값은 3이므로 (빨간색 배경) 레빈슈타인 거리는 3이 됩니다.

 

 

kitten에서 sitting으로 변환하는데 최소 횟수는 3임을 알 수 있습니다.

 


 

참고한 블로그

https://hoonzi-text.tistory.com/116

 

편집거리 알고리즘을 통한 검색어 자동완성 보정 (ft . Levenshtein Distance)

저번 검색어 자동완성 글 말미에 오타가 들어가 있는 경우, 제대로 된 단어로 유추될 수 있으면 좋겠다는 생각을 했는데 마침 적당한 알고리즘이 있어서 실제로 실습해봤다. 브랜드 이름 검색어

hoonzi-text.tistory.com

 

 

 

728x90
저작자표시 동일조건 (새창열림)

'[머신러닝]' 카테고리의 다른 글

[머신러닝] 회귀(Regression) 모델과 성능지표  (1) 2024.10.27
[머신러닝] 혼동행렬(Confusion Matrix)과 성능지표  (0) 2024.10.15
[머신러닝] TF-IDF란?  (0) 2024.05.07
[통계] 중앙값, 중간범위, 평균, 최빈값, 범위, 표준편차, 정규분포, 편향, 분산  (0) 2023.07.15
'[머신러닝]' 카테고리의 다른 글
  • [머신러닝] 회귀(Regression) 모델과 성능지표
  • [머신러닝] 혼동행렬(Confusion Matrix)과 성능지표
  • [머신러닝] TF-IDF란?
  • [통계] 중앙값, 중간범위, 평균, 최빈값, 범위, 표준편차, 정규분포, 편향, 분산
hgk0404.tistory
hgk0404.tistory
공부기록

티스토리툴바