[๐Ÿงฑ|CS] ์•Œ์ž˜๋”ฑ๊น”์„ผ ์˜คํƒ€ ๊ณ ์ณ์ฃผ๋Š” ๋ ˆ๋ฒค์Šˆํƒ€์ธ ๊ฑฐ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜

minseok128ยท2024๋…„ 11์›” 17์ผ
1

๋Š˜ ์ ๋‹นํ•œ ๊ฑฐ๋ฆฌ๋ฅผ ๋‘์ž.

์ƒ์ƒ๋ ฅ ๋Œ€์žฅ LLM

์ตœ๊ทผ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ, LLM ๋ชจ๋ธ์—๊ฒŒ ํ”„๋กฌํ”„ํŠธ ์—”์ง€๋‹ˆ์–ด๋ง์„ ํ†ตํ•ด ์•ฝ 400๊ฐœ ์ •๋„์˜ ๊ฐ์ • ๋‹จ์–ด ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ณ ์ •์ ์œผ๋กœ ์ œ๊ณตํ•œ ๋’ค, ์ธํ’‹ ๋ฌธ์žฅ์˜ ์ƒํ™ฉ๊ณผ ๋ฌธ๋งฅ์— ๊ฐ€์žฅ ์–ด์šธ๋ฆฌ๋Š” ๋‹จ์–ด๋ฅผ ์ถ”์ถœํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด "์˜ค๋Š˜์€ ๋‚˜์˜ ์ƒ์ผ์ด๋‹ค!"๋ผ๋Š” ๋ฌธ์žฅ์— ๋Œ€ํ•ด์„œ LLM์€ '๊ธฐ์˜๋‹ค', 'ํ–‰๋ณตํ•˜๋‹ค', '๊ธฐ๋Œ€ํ•˜๋‹ค' ๋“ฑ์˜ ๊ฐ์ • ๋‹จ์–ด๋ฅผ ์„ ํƒํ•ด์•ผํ•œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๊ธฐ๋ณธ์ ์œผ๋กœ LLM์€ ์ƒ์ƒ๋ ฅ์ด ๋„˜์น˜๋Š” ์•„์ด๋‹ค. ๋ถ„๋ฅ˜ ๋ฌธ์ œ ๋“ฑ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ถ„๋ฅ˜๊ธฐ ๋“ฑ๊ณผ๋Š” ๋ชฉ์ ๋ถ€ํ„ฐ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ€๋”์”ฉ ์ œ์‹œ๋œ ๋‹จ์–ด ๋ชฉ๋ก์ธ ๊ธฐ๋ถ„ ์ข‹๋‹ค๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ๊ธฐ๋ถ„์ด ์ข‹๋‹ค๋ฅผ ์ถœ๋ ฅํ•˜์˜€๋‹ค.!

์šฐ๋ฆฌ์˜ ์„œ๋น„์Šค๋Š” LLM์˜ ์ถœ๋ ฅ์„ ์ ์ ˆํžˆ ํŒŒ์‹ฑํ•˜๊ณ , ์‹ค์ œ DB ์ƒ์˜ ๊ฐ์ • ๋‹จ์–ด์™€ ๋งคํ•‘ํ•ด์•ผํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ถ„์ด ์ข‹๋‹ค์™€ ๊ฐ™์€ ์ž˜๋ชป๋œ ์ถœ๋ ฅ์€ DB ์ƒ์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ฐ์ดํ„ฐ ์ทจ๊ธ‰์„ ๋ฐ›๊ณ  ๋ฒ„๋ ค์ง€๊ฒŒ ๋œ๋‹ค.

์‹ฌ๊ฐ์„ฑ์„ ๋А๋ผ๊ณ  LLM์˜ ๋›ฐ์–ด๋‚œ ์ฐฝ์˜๋ ฅ์„ ์ œํ•œํ•ด๋ณด๊ณ ์ž Temperature ๋“ฑ์˜ ์—ฌ๋Ÿฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์กฐ์ •ํ•˜์˜€์ง€๋งŒ, ๋™์ผํ•œ ๋ฌธ์ œ๋Š” ์ง€์†์ ์œผ๋กœ ๋ฐœ์ƒํ–ˆ๋‹ค.

์ด๋Ÿฐ์‹์œผ๋กœ ๋„์–ด์“ฐ๊ธฐ์™€ ์•ฝ๊ฐ„์˜ ์กฐ์‚ฌ๊ฐ€ ๋‹ค๋ฅด๋‹ค๋Š” ์ด์œ ๋กœ ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๋ฌผ ์ทจ๊ธ‰์„ ๋ฐ›๋Š” ๋ฐ์ดํ„ฐ๋“ค์ด ๋„ˆ๋ฌด๋‚˜ ์•„๊นŒ์› ๊ธฐ์—, ์ด๋ฅผ DB์ƒ์— ์กด์žฌํ•˜๋Š” ์ •์ƒ ๋‹จ์–ด๋กœ ์ ์ ˆํžˆ ๋งคํ•‘ํ•˜๊ณ ์ž ๊ณ ๋ฏผํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‹ค ํ‰์†Œ git ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ์˜คํƒ€๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊ธฐ์–ตํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

๋ช…๋ น์–ด์— ์˜คํƒ€๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์•Œ์•„์„œ ๋ˆˆ์น˜์žˆ๊ณ  ์„ผ์Šค์žˆ๊ฒŒ ๊ต์ •ํ•ด์ฃผ๋Š” ์ฐฉํ•œ git

์–ด๋–ป๊ฒŒ ์ด๋ ‡๊ฒŒ ๋น ๋ฅธ ์‹œ๊ฐ„ ๋‚ด์—, ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋Œ€๋‹ต์„ ์ฐพ์•„์„œ ์ถ”์ฒœํ•ด์คฌ๋˜ ๊ฑธ๊นŒ?
์•„์ฃผ ๋ถ€๋Ÿฌ์šด ๋Šฅ๋ ฅ์ด๋‹ค.
๊ทธ ๋Šฅ๋ ฅ์˜ ๋น„๋ฐ€์€ ๋ ˆ๋ฒค์Šˆํƒ€์ธ ๊ฑฐ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์žˆ๋‹ค.

๋ ˆ๋ฒค์Šˆํƒ€์ธ ๊ฑฐ๋ฆฌ(Levenshtein Distance)๋Š” ๋‘ ๋ฌธ์ž์—ด ๊ฐ„์˜ ํŽธ์ง‘ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ •ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๋ฌธ์ž์—ด์„ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์‚ฝ์ž…, ์‚ญ์ œ, ๊ต์ฒด ์—ฐ์‚ฐ์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ฃผ๋กœ ์˜คํƒ€ ๊ต์ •, ๋ฌธ์ž์—ด ์œ ์‚ฌ๋„ ๊ณ„์‚ฐ, DNA ์„œ์—ด ๋ถ„์„ ๋“ฑ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.


๋ ˆ๋ฒค์Šˆํƒ€์ธ ๊ฑฐ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๋ช…

1. ๋™์ž‘ ์›๋ฆฌ

๋ ˆ๋ฒค์Šˆํƒ€์ธ ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ์€ ๋™์  ๊ณ„ํš๋ฒ•(Dynamic Programming)์„ ์‚ฌ์šฉํ•œ๋‹ค.
๋‘ ๋ฌธ์ž์—ด (A)์™€ (B)์˜ ๊ธธ์ด๊ฐ€ ๊ฐ๊ฐ (m)๊ณผ (n)์ผ ๋•Œ, (m * n) ํฌ๊ธฐ์˜ ํ‘œ๋ฅผ ๋งŒ๋“ค๊ณ , ๊ฐ ์นธ์— ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ๊ฐ„์˜ ํŽธ์ง‘ ๊ฑฐ๋ฆฌ๋ฅผ ๊ธฐ๋กํ•œ๋‹ค. ์ด 3๊ฐ€์ง€ ๊ธฐ๋ณธ ํŽธ์ง‘ ์—ฐ์‚ฐ์ด ์žˆ๋‹ค.

  • ์‚ฝ์ž…: ํ•œ ๋ฌธ์ž๋ฅผ ์ถ”๊ฐ€ (AC -> ABC)
  • ์‚ญ์ œ: ํ•œ ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐ (ABC -> AC)
  • ๊ต์ฒด: ํ•œ ๋ฌธ์ž๋ฅผ ๋‹ค๋ฅธ ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝ (ABC -> ACC)

2. DP ํ…Œ์ด๋ธ” ๊ตฌ์„ฑ

ํ…Œ์ด๋ธ”์˜ D[i][j]๋Š” (A)์˜ ์ฒ˜์Œ (i)๊ฐœ ๋ฌธ์ž์™€ (B)์˜ ์ฒ˜์Œ (j)๊ฐœ ๋ฌธ์ž ์‚ฌ์ด์˜ ๋ ˆ๋ฒค์Šˆํƒ€์ธ ๊ฑฐ๋ฆฌ๋ฅผ ๋œปํ•œ๋‹ค.

ํ…Œ์ด๋ธ”์˜ ์ดˆ๊ธฐ ์กฐ๊ฑด์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • (D[0][j] = j): (B)์˜ ์ฒ˜์Œ (j)๊ฐœ ๋ฌธ์ž๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด (j)๋ฒˆ ์‚ฝ์ž…
  • (D[i][0] = i): (A)์˜ ์ฒ˜์Œ (i)๊ฐœ ๋ฌธ์ž๋ฅผ ์‚ญ์ œ

"kitten"๊ณผ "sitting"์— ๋Œ€ํ•ด์„œ

""sitting
""01234567
k1
i2
t3
t4
e5
n6

์ดํ›„ ๋‹ค์Œ์˜ ์ ํ™”์‹์— ๋”ฐ๋ผ ํ…Œ์ด๋ธ”์„ ์ฑ„์šด๋‹ค.

  • ๋งŒ์•ฝ A[i-1] == B[j-1]๋ผ๋ฉด, D[i][j] = D[i-1][j-1]
  • ๋งŒ์•ฝ A[i-1] != B[j-1]๋ผ๋ฉด, D[i][j] = 1 + min(D[i-1][j], D[i][j-1], D[i-1][j-1])
    • ์ด๋•Œ D[i-1][j]๋Š” ์‚ญ์ œ ์—ฐ์‚ฐ์„ ์˜๋ฏธ
    • D[i][j-1]๋Š” ์‚ฝ์ž… ์—ฐ์‚ฐ์„ ์˜๋ฏธ
    • D[i-1][j-1]๋Š” ๊ต์ฒด ์—ฐ์‚ฐ์„ ์˜๋ฏธ

์ด์— ๋”ฐ๋ผ ํ…Œ์ด๋ธ”์„ ์ฑ„์šฐ๋ฉด

""sitting
""01234567
k11234567
i22123456
t33212345
t44321234
e55432234
n66543323

์ตœ์ข…์ ์œผ๋กœ D[m][n] = 3, ์ฆ‰ "kitten"์„ "sitting"์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ์—ฐ์‚ฐ ํšŸ์ˆ˜๋Š” 3์ด๋‹ค.

  • k โ†’ s (๊ต์ฒด)
  • e โ†’ i (๊ต์ฒด)
  • "" โ†’ g (์‚ฝ์ž…)

๋Œ€๋ฐ˜์ „

๊ตฌํ˜„์ด ์–ด๋ ต์ง€ ์•Š๊ณ  ์ง๊ด€์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ํ•ด๋‹น ๋ถ€๋ถ„์„ ์ž‘์—…ํ•  ๋•Œ ๋„ˆ๋ฌด ๋ฐ”์œ ๋‚˜๋จธ์ง€ ๋‹ค์Œ์˜ ๊ธˆ๋‹จ์˜ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ–ˆ๋‹ค. (๋น„๋ฐ€, ๊ฟ€ํŒ)

# pip installl levenshtein
import Levenshtein

Levenshtein.distance(target_word, word)

์ด์ œ ๋” ์‰ฌ์šด ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋๋‹ค.

๋„ˆ๋ฌด ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ ์•„์˜ˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์กด์žฌํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.
์‹ผ ๊ฒŒ ๋น„์ง€๋–ก์ด๋ผ๊ณ , ๊ทธ๋ƒฅ importํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ธฐ์—๋Š” ๋ญ”๊ฐ€ ์ฐ์ฐํ•˜๋‹ˆ๊นŒ ๊ทธ ์›๋ฆฌ๋„ ํ•œ ๋ฒˆ์”ฉ ์•Œ์•„๋‘๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค. (์ด๋Ÿฐ ์ง€์‹์€ ์–ธ์  ๊ฐ„ ๋„์›€์ด ๋˜๊ธฐ์—...)


๋ฐ˜์ „์˜ ๋ฐ˜์ „

์ด๋ ‡๊ฒŒ ์—ด์‹ฌํžˆ ๊ตฌํ˜„ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•ด ๋ณธ ๊ฒฐ๊ณผ...!!

๋†€๋ž๊ฒŒ๋„ ์•ˆ๋„ํ•˜๋‹ค๋ฅผ ์• ๋„ํ•˜๋‹ค๋กœ, ์กฐ์šฉํ•˜๋‹ค๋ฅผ ์ฒ˜์ฐธํ•˜๋‹ค๋กœ ๋ฐ”๊ฟจ๋‹ค..!!!! (์ฒ˜์ฐธํ•œ ๊ฑด ๋‚˜์˜ ๋งˆ์Œ์ด๋‹ค)
ํ•œ๊ธ€์˜ ํ•œ ๊ธ€์ž๋ฅผ ์œ ๋‹ˆ์ฝ”๋“œ 1๊ฐœ๋กœ ์ธ์‹ํ•˜๋Š” ๋ฌธ์ œ๋กœ ๋ณด์ธ๋‹ค.

์ฐพ์•„๋ณด๋‹ˆ ๊ณ ์ฐจ์›์ ์ธ ์œ„๋Œ€ํ•œ ํ•œ๊ธ€์„ ์ œ๋Œ€๋กœ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, ์ž์Œ๊ณผ ๋ชจ์Œ์„ ๋ถ„๋ฆฌํ•ด์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค.

# pip install jamo
from jamo import h2j, j2hcj
# ...

๊ทธ๋Ÿฌ๋‚˜ ์ด๋ณด๋‹ค ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค.
๋ ˆ๋ฒค์Šˆํƒ€์ธ ๊ฑฐ๋ฆฌ๋Š” ๋‹จ์–ด์˜ ์˜๋ฏธ๋ก ์  ์œ ์‚ฌ๋„๋Š” ์ธก์ •ํ•˜์ง€ ๋ชปํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์‚ฌ์‹ค ์šฐ๋ฆฌ์˜ ์„œ๋น„์Šค๊ฐ€ ๊ฐ์ • ๋‹จ์–ด๋ฅผ ์ œ๋Œ€๋กœ ๋งคํ•‘์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹จ์ˆœ ์˜คํƒ€ ๊ต์ •์ด ์•„๋‹Œ, ๋‹จ์–ด์˜ ์˜๋ฏธ๋ก ์ ์ธ ์œ ์‚ฌ์„ฑ๊นŒ์ง€๋„ ๊ณ ๋ คํ•ด์•ผํ•œ๋‹ค.
๋ ˆ๋ฒค์Šˆํƒ€์ธ ๊ฑฐ๋ฆฌ๋Š” ํŽธ์ง‘ ๊ฑฐ๋ฆฌ๋งŒ์„ ๊ณ ๋ คํ•˜๊ธฐ์— ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์„ ํƒ ์ž์ฒด๊ฐ€ ๋ถ€์ ์ ˆํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.

๋”ฐ๋ผ์„œ ํ…์ŠคํŠธ ๋ฒกํ„ฐ ์ž„๋ฒ ๋”ฉ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜๊ณ , ๋ชจ๋“  ๋ ˆ๋ฒค์Šˆํƒ€์ธ ๊ฑฐ๋ฆฌ ๊ด€๋ จ ์ฝ”๋“œ๋Š” ์‚ญ์ œํ•˜์˜€๋‹ค.

pip uninstall levenshtein

๊ทธ๋ž˜๋„ ์ž ๊น์ด์ง€๋งŒ ๋งŒ๋‚˜์„œ ๋ฐ˜๊ฐ€์› ์–ด levenshtein. ๐Ÿฅน

profile
์„ธ๊ณ„๋Š” ๋‚˜์˜ ํ‘œ์ƒ

1๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2024๋…„ 11์›” 17์ผ

git์—์„œ ๋งจ๋‚  ๋‚˜ํƒ€๋‚˜์„œ ์ œ ์˜คํƒ€๋ฅผ ๊ต์ •ํ•ด์ฃผ๋Š” ๊ฒŒ ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด์—ˆ๊ตฐ์š”!!
์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ „๊ณต์—์„œ๋„ ์–ธ๊ธ‰๋œ ๊ฐœ๋…์ธ ๊ฑฐ ๊ฐ™์€๋ฐ ๋‹ค์‹œ ๋ณด๋‹ˆ ๋ฐ˜๊ฐ‘๋„ค์š”~~

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ