ํ•œ๊ตญ์–ด์™€ Tokenizer

[์›๋ณธ ๋งํฌ]

ํ•œ๊ตญ์–ด๋Š” Tokenizer๋ฅผ ํ†ตํ•ด ๋‹จ์–ด๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธฐ๊ฐ€ ๋Œ€๋‹จํžˆ ์–ด๋ ค์šด ํŽธ์— ์†ํ•˜๋Š” ์–ธ์–ด๋‹ค.
๋ผํ‹ด ๋ฌธ์ž๋กœ ๋œ ์–ธ์–ด๋“ค์€ ๋Œ€๋ถ€๋ถ„ ๋‹จ์–ด๊ฐ€ ๋„์–ด์“ฐ๊ธฐ๋กœ ๊ตฌ๋ถ„๋˜๊ณ  ๋™์‚ฌ ๋ณ€ํ˜•์ด๋‚˜ ๋‹จ์–ด์˜ ์„ฑ๋ณ„, ๋ณต์ˆ˜ํ˜• ์ •๋„๋งŒ ๊ณ ๋ คํ•˜๋ฉด ๋˜๋Š”๋ฐ, ํ•œ๊ตญ์–ด๋Š” ๊ทธ๊ฒƒ๋ณด๋‹ค ๋ฏธ๋ฌ˜ํ•œ ๋ณ€ํ˜•๋“ค์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํŠนํžˆ ๊นŒ๋‹ค๋กœ์šด ๊ฒƒ์€ "์กฐ์‚ฌ"๋‹ค. ๊ต์ฐฉ์–ด ํŠน์„ฑ์ƒ ์กฐ์‚ฌ๊ฐ€ ๋‹จ์–ด ๋’ค์— ๋ถ™๋Š”๋ฐ, ํ•œ๊ตญ์–ด์—์„œ๋Š” ์ด๊ฑธ ๊ทœ์น™์ ์œผ๋กœ ๋–ผ์–ด๋‚ด๋Š” ๊ฒƒ์ด ์ƒ๊ฐ๋ณด๋‹ค ์–ด๋ ต๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” ํ•œ๊ตญ์–ด์šฉ Tokenizer๋ฅผ ์„ ํƒํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๊ธฐ๋ฐ˜์ง€์‹, ๊ทธ๋ฆฌ๊ณ  ๋Œ€ํ‘œ์ ์ธ ๊ตฌํ˜„์ฒด ๋ช‡๊ฐ€์ง€๋ฅผ ์†Œ๊ฐœํ•ด๋ณธ๋‹ค.




๊ธฐ๋ณธ ๊ฐœ๋… ์ •๋ฆฌ

Tokenizer๋ฅผ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ ์šฉ์–ด๋‚˜ ๊ฐœ๋…์„ ์ข€ ์•Œ์•„๋‘๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
๋Œ€๋žต ์ •๋ฆฌํ•ด๋ณธ๋‹ค.



ํ•œ๊ตญ์–ด ํ’ˆ์‚ฌ ํƒœ๊ทธ

๋‹ค์ˆ˜์˜ Tokenizer๋“ค์€ ํ’ˆ์‚ฌ ํ˜•ํƒœ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ถ”์ถœํ•˜๊ณ  ์ถ”์ถœ ์ •๋„๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์„ ์ œ๊ณตํ•œ๋‹ค.
์—ฌ๊ธฐ์„œ ํ’ˆ์‚ฌ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ์ถ•์•ฝ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ๋ณดํ†ต ๊ตญ๋ฆฝ๊ตญ์–ด์›์—์„œ ์ •์˜ํ•œ "์„ธ์ข… ํ’ˆ์‚ฌ ํƒœ๊ทธ"๋ฅผ ๊ณจ์ž๋กœ ์‚ผ๋Š”๋‹ค.

์ถœ์ฒ˜: https://m.blog.naver.com/aramjo/221404488280
๊ตฌํ˜„์ฒด๋งˆ๋‹ค ์กฐ๊ธˆ์”ฉ ํ™•์žฅํ•ด์„œ ๋‹ค๋ฅด๊ฒŒ ์“ฐ๊ธฐ๋„ ํ•˜๋Š”๋ฐ, ๋Œ€์ฒด๋กœ๋Š” ์ด์™€ ๋น„์Šทํ•˜๋‹ค.
ํ’ˆ์‚ฌ ๊ฐ์ง€๊ฐ€ ๋˜๋Š” Tokenizer๋“ค์€ ํŠน์ • ํ’ˆ์‚ฌ๋งŒ ๋‚จ๊ธฐ๋Š” ํ’ˆ์‚ฌ ์ œ๊ฑฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.




ํ˜•ํƒœ์†Œ ๋ถ„์„

ํ•œ๊ตญ์–ด Tokenizer๋ฅผ ๋‹ค๋ฅธ ๋ง๋กœ ํ˜•ํƒœ์†Œ๋ถ„์„๊ธฐ๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค. ํ˜•ํƒœ์†Œ๋ถ„์„์ด Tokenizer์˜ ์—ญํ• ์— ํฌํ•จ๋˜๋Š” ๊ด€๊ณ„๋ผ์„œ ์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด ์ข€ ๋‹ค๋ฅด๊ธด ํ•œ๋ฐ, ์ด ๊ธ€์—์„œ๋„ ์–ด๋А ์ •๋„ ํ˜ผ์šฉํ•œ๋‹ค.

์ •ํ™•ํžˆ ๋งํ•˜๋ฉด ์–ด์ ˆ์„ ํ˜•ํƒœ์†Œ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌ์–ด์ ˆ์„ ํ˜•ํƒœ์†Œ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ํ˜•ํƒœ์†Œ๋ถ„์„์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
"๋จน์—ˆ์Šต๋‹ˆ๋‹ค"๊ฐ€ ๋“ค์–ด์˜ค๋ฉด, ๊ทธ๊ฒƒ์„ ์ตœ์†Œํ•œ์˜ ์˜๋ฏธ ๋‹จ์œ„์ธ ๋จน / ์—ˆ / ์Šต๋‹ˆ๋‹ค 3๊ฐœ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ด ๊ฒฝ์šฐ "๋จน"์€ ๋™์‚ฌ์˜ ์–ด๊ฐ„์ด๋‹ค. '๋จน๋‹ค'๋ผ๋Š” ๋™์ž‘์˜ ํ•ต์‹ฌ ์˜๋ฏธ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
"์—ˆ"์€ ... ๊ณผ๊ฑฐ ์‹œ์ œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์„ ์–ด๋ง ์–ด๋ฏธ๋‹ค.
"์Šต๋‹ˆ๋‹ค"๋Š” ๋†’์ž„๊ณผ ํ‰์„œํ˜•์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ข…๊ฒฐ ์–ด๋ฏธ์ด๋‹ค.

๊ตฌํ˜„ ์ˆ˜์ค€์ด ๋†’๊ณ  ๋ฌด๊ฑฐ์šด Tokenizer๋“ค์€ ๋ชจ๋‘ ์ด๋Ÿฌํ•œ ์„ธ๋ถ€์ ์ธ ๋ถ„์„์„ ํ†ตํ•ด ๋‹จ์–ด๋ฅผ ๋ถ„๋ฆฌํ•ด๋‚ธ๋‹ค.




์กฐ์‚ฌ ์ œ๊ฑฐ (Particle Removal)

ํ•œ๊ตญ์–ด์—์„œ ๊นŒ๋‹ค๋กœ์šด ๋ถ€๋ถ„ ์ค‘ ํ•˜๋‚˜๋‹ค.
๋‹จ์–ด ์ˆ˜์ค€์˜ ์ถ”์ถœ์ด ํ•„์š”ํ•˜๋ฉด ๋ฐ˜๋“œ์‹œ ์ค‘์š”ํ•˜๊ฒŒ ํ™•์ธํ•ด๋ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์ด๊ธฐ๋„ ํ•˜๋‹ค.

๊ฐœ๋… ์ž์ฒด๊ฐ€ ์–ด๋ ค์šด ๊ฒƒ์€ ์•„๋‹ˆ๊ณ , "์‚ผ์„ฑ์ „์ž์—์„œ"๋ฅผ "์‚ผ์„ฑ์ „์ž" + "์—์„œ"๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทผ๋ฐ ์ด๊ฒŒ ์‘์šฉ ์ˆ˜์ค€์œผ๋กœ ๊ฐ€๋ฉด ์ƒ๋‹นํžˆ ๊นŒ๋‹ค๋กญ๋‹ค. ์กฐ์‚ฌ ์ž์ฒด๋Š” ์ •ํ•ด์ ธ์žˆ์œผ๋‹ˆ๊นŒ ๊ทœ์น™์ ์œผ๋กœ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์‚ฌ์ „์— ์—†๋Š” ๊ณ ์œ ๋ช…์‚ฌ๊ฐ€ ์กฐ์‚ฌ๋กœ ๋๋‚˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ด๊ฒŒ ์‰ฝ์ง€ ์•Š๋‹ค.

"ํ•˜๋Š˜๋น›์น˜๊ณผ" ๊ฐ™์€ ๊ณ ์œ ๋ช…์‚ฌ๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ผ๋ฐ˜์ ์ธ Tokenizer๋Š” ์ด๊ฒƒ์„ "ํ•˜๋Š˜๋น›์น˜"+"๊ณผ"๋กœ ๋ถ„๋ฆฌํ•ด๋ฒ„๋ฆด ์ˆ˜ ์žˆ๋‹ค.

Open Korean Text์˜ ๊ฒฝ์šฐ: ๋ธ”๋ž‘์‰ฌ์น˜๊ณผ๋ฅผ "๋ธ”๋ž‘์‰ฌ์น˜"๋กœ ํŒŒ๊ดด.
์ด ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด "ํ•˜๋Š˜๋น›์น˜๊ณผ" ์ž์ฒด๋ฅผ ์‚ฌ์ „์— ๋“ฑ๋กํ•ด์•ผํ•˜๋Š”๋ฐ, ์ด๊ฒƒ๋„ ๋ง์ด ์‰ฝ์ง€ ๋ชจ๋“  ๋‹จ์–ด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์‚ฌ์‹ค์ƒ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. OOV ์„น์…˜์—์„œ ํ›„์ถœํ•œ๋‹ค.

์กฐ์‚ฌ ์ œ๊ฑฐ ์ •๋„๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ํ•œ๊ตญ์–ด tokenizer๊ฐ€ ์ œ๊ณต์„ ํ•˜์ง€๋งŒ, ๊ทธ ์ˆ˜์ค€์—๋Š” ์ฐจ์ด๊ฐ€ ์ข€ ์žˆ๋‹ค.




์–ด๊ทผ ์ถ”์ถœ (Stemming)

ํ…์ŠคํŠธ๋ฅผ ์ •ํ˜•์ ์ธ ํ˜•ํƒœ๋กœ ๋ถ„์„ํ•˜๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๋ฉด, ์–ด๊ทผ ์ถ”์ถœ๋„ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด๋‹ค.
ํŠน์ • ์šฉ์–ด๋ฅผ ์›ํ˜•์— ๊ฐ€๊นŒ์šด ์–ด๊ทผ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. "๋จน์—ˆ์Šต๋‹ˆ๋‹ค"๋ฅผ "๋จน๋‹ค"๋กœ ๋ฐ”๊พธ๊ณ  "running"
์„ "run"์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ ๋“ฑ์ด ์ด์— ์†ํ•œ๋‹ค.

"kiwi", "nori", "mecab-ko" ๊ฐ™์€ ๋Œ€ํ˜• tokenizer๋“ค์€ ์ง€์›ํ•˜๊ณ , open korean text ๊ฐ™์€ ๊ฒฝ๋Ÿ‰ ๊ตฌํ˜„์ฒด๋Š” ์ œ๊ณตํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.




Stop Word ์ œ๊ฑฐ

ํ•„์š”์—†๋Š” ํ˜•ํƒœ์†Œ๋“ค์„ ๋‚ ๋ ค๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.
"์€", "๋Š”", "์ด", "๊ฐ€" ๊ฐ™์€ ์กฐ์‚ฌ๋ฅผ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜, ์›ํ•œ๋‹ค๋ฉด ์ถ”๊ฐ€ ์‚ฌ์ „์„ ํ†ตํ•ด์„œ ํŠน์ • ๋‹จ์–ด๋“ค์„ ๋‚ ๋ ค๋ฒ„๋ฆฌ๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

"kiwi", "nori" ๊ฐ™์€ tokenizer๋“ค์€ stop word ์‚ฌ์ „ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.




OOV (Out-of-Vocabulary)

ํ˜•ํƒœ์†Œ๋ถ„์„์—์„œ ๊ฐ€์žฅ ๊นŒ๋‹ค๋กœ์šด ๊ฒƒ์€ ํ•ญ์ƒ ๊ณ ์œ ๋ช…์‚ฌ๋‹ค.
์•„๋ฌด๋ฆฌ ์ž˜ ๊ตฌํ˜„๋˜์–ด์žˆ๊ณ  ํ•œ๊ตญ์–ด ๋ฌธ์žฅ์„ ์ž˜ ๋ถ„์„ํ•˜๊ฒŒ ํ•ด๋†จ๋”๋ผ๋„, ๋ชจ๋ฅด๋Š” ๋‹จ์–ด๊ฐ€ ํฌํ•จ๋˜๋ฉด ๊ทœ์น™์— ์˜ํ•ด์„œ ์˜๋„์น˜ ์•Š์€ ๋ถ„ํ•ด๊ฐ€ ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๊ณผ๊ฒฉํ•˜๊ฒŒ ํ˜•ํƒœ์†Œ ๋ถ„๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ตฌํ˜„์ฒด๋Š” "๋‘์ซ€์ฟ "๋ฅผ "๋‘", "์ซ€", "์ฟ "๋กœ ๋ถ„๋ฆฌํ•ด๋ฒ„๋ฆด ์ˆ˜ ์žˆ๊ณ , "์„ธ๋ธŒ๋ž€์Šค์น˜๊ณผ"
๋ฅผ "์„ธ๋ธŒ๋ž€์Šค", "์น˜๊ณผ"๋‚˜ "์„ธ๋ธŒ๋ž€์Šค์น˜", "๊ณผ(์กฐ์‚ฌ)"๋กœ ๋ถ„๋ฆฌํ•ด๋ฒ„๋ฆด ์ˆ˜๋„ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์‚ฌ์ „์— ์—†๋Š” ๊ณ ์œ ๋ช…์‚ฌ๊ฐ€ ์žˆ๋Š” ๊ฒƒ, ํ˜น์€ ๊ทธ ๊ณ ์œ ๋ช…์‚ฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ OOV๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
OOV๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์—๋Š” ๋ช‡๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ๋Š”๋ฐ, ๋ฌด์—‡์„ ์„ ํƒํ•ด๋„ 100% ์™„์ „ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์€ ์—†๋‹ค.



1. ์‚ฌ์ „ ๊ด€๋ฆฌ (User Dictionary)

๊ณ ์ „์ ์œผ๋กœ๋Š” ์‚ฌ์šฉ์ž ์‚ฌ์ „์— ๊ณ ์œ ๋ช…์‚ฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ๋Œ€์‘ํ•˜๋Š” ๋ฐฉ์‹์„ ๋งŽ์ด ์‚ฌ์šฉํ–ˆ๊ณ , ๋Œ€์ค‘์ ์ธ Tokenizer ๊ตฌํ˜„์ฒด๋“ค์€ ์ด ๋ฐฉ์‹์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ „๋ถ€ ์ œ๊ณตํ•œ๋‹ค.
์‚ฌ์ „์— ์ถ”๊ฐ€๋งŒ ํ•ด๋‘๋ฉด ์•„์ฃผ ํ™•์‹คํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๊ฐ€ ๋œ๋‹ค๋Š” ๊ฒƒ์ด ๋ณด์žฅ๋˜์ง€๋งŒ, ์ƒˆ๋กœ์šด ์‹ ์กฐ์–ด๋‚˜ ๊ณ ์œ ๋ช…์‚ฌ๊ฐ€ ๊ณ„์† ์œ ์ž…๋  ๊ฒฝ์šฐ๋ฅผ ๋Œ€์‘ํ•˜๋Š” ๊ฒƒ์ด ์‚ฌ์‹ค์ƒ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.
๊ฒŒ๋‹ค๊ฐ€ ๋งค๋ฒˆ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๋ฆฌ๋กœ๋“œํ•˜๋Š” ๊ฒƒ๋„ ์ผ์ด๋‹ค.



2. ํ†ต๊ณ„ ๊ธฐ๋ฐ˜ ํƒ์ง€

ํ˜น์€, ํŠน์ • ๋ง๋ญ‰์น˜๊ฐ€ ๋“ฑ์žฅํ•˜๋Š” ๋นˆ๋„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ณ ์œ ๋ช…์‚ฌ๋ฅผ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.
soynlp์˜ Word Extractor๋‚˜ Noun Extractor ๊ฐ™์€ ๊ตฌํ˜„์ฒด๊ฐ€ ์ด์— ์†ํ•œ๋‹ค.

ํ†ต๊ณ„ ๊ฐœ๋…์„ ์ ์šฉํ•ด์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์‚ฌ์ „์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ณ€ํ˜• ๊ธฐ๋ฒ•์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค๋งŒ ์ด๊ฒƒ๋„ 100% ์™„์ „ํ•œ ๊ฒƒ์ด ์•„๋‹˜์€ ์ธ์ง€ํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.
ํ†ต๊ณ„์™€ ์‚ฌ์ „์ด ๊ตฌ์ถ•๋˜๊ธฐ ์ „์—๋Š” ํ’ˆ์งˆ์„ ๋ณด์žฅํ•  ์ˆ˜ ์—†๋Š” cold start ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”๋ฐ๋‹ค๊ฐ€, ํ†ต๊ณ„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ถ”๋ก ์ด ์˜คํƒ์ผ ์ˆ˜๋„ ์žˆ๋‹ค.



3. ๋ฌธ๋งฅ ๊ธฐ๋ฐ˜ ํƒ์ง€

์•„๋‹ˆ๋ฉด ์•„์˜ˆ ๋ฌธ๋งฅ์„ ๊ธฐ์ค€์œผ๋กœ ๋ช…์‚ฌ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ๋„ ๋ฐฉ๋ฒ•์ด๋‹ค. ์ด๊ฑด ๋‹จ์ˆœํžˆ ๊ทœ์น™ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ๋Š” ์–ด๋ ต๊ณ , LLM์ฒ˜๋Ÿผ ์ž์—ฐ์–ด ๊ธฐ๋ฐ˜์œผ๋กœ ํ•™์Šต๋œ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

kiwi๊ฐ€ ์ด ๋ฐฉ์‹์„ ์จ์„œ ๊ฒฝ๋Ÿ‰๋ชจ๋ธ์„ ๋‚ด์žฅํ•ด๋†“์€ ํŠน์ˆ˜ํ•œ ์ผ€์ด์Šค๋‹ค.



4. LLM ์ง€๋ฅด๊ธฐ

์‚ฌ์‹ค ๊ทธ๋ƒฅ ๊ฐ€์žฅ ํŽธํ•˜๊ณ  ํ™•์‹คํ•œ ๋ฐฉ๋ฒ•์€ ๊ดœ์ฐฎ์€ LLM์„ ์“ฐ๋Š” ๊ฒƒ์ด๋‹ค.
์˜คํ”ˆ๋ชจ๋ธ์„ ์„œ๋น™ํ•ด๋„ ๋˜๊ณ , GEMINI ๊ฐ™์€ ์ €๋ ดํ•œ ์„œ๋น„์Šค์˜ ๊ฒฝ๋Ÿ‰ ๋ชจ๋ธ์„ ์“ฐ๋Š” ๊ฒƒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํ•˜๋‹ค.

๋Œ€์‹  ๋น„์šฉ๋ฌธ์ œ, ๋‚ฎ์€ ๊ฐ€์šฉ์„ฑ/์ฒ˜๋ฆฌ๋Ÿ‰ ๋ฌธ์ œ, ๋ฝ์ธ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.




Tokenizer ๊ตฌํ˜„์ฒด

Tokenizer ๊ตฌํ˜„์ฒด๋Š” ๊ฝค ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•˜๊ณ , ๊ตฌํ˜„ ์ˆ˜์ค€์ด๋‚˜ ๊ธฐ๋Šฅ์˜ ์ข…๋ฅ˜, ์ฒ˜๋ฆฌ๋Ÿ‰ ๋“ฑ์ด ์ „๋ถ€ ๋‹ค๋ฅด๋‹ค.
๊ทธ๋ž˜์„œ ์ž˜ ํ™•์ธํ•ด๋ณด๊ณ  ์„ ํƒ์„ ํ•ด๋ณด๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
์—ฌ๊ธฐ์„œ๋Š” mecab, nori, kiwi, okt, charabia ์ •๋„๋ฅผ ๊ฐ„๋‹จํžˆ ์†Œ๊ฐœํ•ด๋ณธ๋‹ค.




Nori (Elasticsearch)

Elasticsearch ํ™˜๊ฒฝ์—์„œ ์ฃผ๋„์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” Tokenizer๋‹ค. ๊ฒ€์ƒ‰์šฉ์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค.
Java๋กœ ๊ตฌํ˜„๋˜์–ด์žˆ๊ณ , ์กฐ์‚ฌ ์ œ๊ฑฐ, ์–ด๊ทผ ์ถ”์ถœ ๋“ฑ์˜ ์ „๋ฐ˜์ ์ธ ๊ธฐ๋Šฅ๋“ค์„ ์ ๋‹นํžˆ ์ž˜ ์ œ๊ณตํ•œ๋‹ค.

ํ˜„์žฌ Elasticsearch์—์„œ ํ•œ๊ตญ์–ด๋ฅผ ์“ด๋‹ค๊ณ  ํ•˜๋ฉด ์ด๊ฑธ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ ํƒํ•˜๋Š” ํŽธ์ด๋‹ค.

Tokenizer์— ํ•„์š”ํ•œ ๊ฒƒ๋“ค์€ ์–ผ์ถ” ์žˆ๋‹ค. ์กฐ์‚ฌ ์ œ๊ฑฐ, ์–ด๊ทผ์ถ”์ถœ, ํ’ˆ์‚ฌ๋ณ„ ์„ ๋ณ„ ๋“ฑ.
๊ตฌํ˜„ ์ˆ˜์ค€์€ ๊ดœ์ฐฎ์€ ํŽธ์ธ๋ฐ, Java ๊ตฌํ˜„์ด๋ผ์„œ ์•„๋ฌด๋ฐ๋‚˜ ๋ถ™์ด๊ธด ๊ณค๋ž€ํ•˜๋‹ค.




Mecab-Ko (์€์ „ํ•œ๋‹ข)

MeCab์€ ์›๋ž˜ ์ผ๋ณธ์–ด๋ฅผ ์œ„ํ•œ ํ˜•ํƒœ์†Œ ๋ถ„์„๊ธฐ์ธ๋ฐ, ํ•œ๊ตญ์–ด์— ๋งž๊ฒŒ ํ™•์žฅํ•œ ๊ตฌํ˜„์ฒด๊ฐ€ Mecab-ko๋‹ค.
C++๋กœ ๊ตฌํ˜„์ฒด๋‹ค.

๊ณผ๊ฑฐ์—๋Š” Elasticsearch์—์„œ ์€์ „ํ•œ๋‹ข(Seunjeon) ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด ๋งŽ์ด ์‚ฌ์šฉ๋˜์—ˆ์ง€๋งŒ, ํ˜„์žฌ๋Š” Lucene์— ๊ธฐ๋ณธ ํฌํ•จ๋œ Nori๊ฐ€ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋ฉด์„œ ์‚ฌ์šฉ ๋นˆ๋„๊ฐ€ ํฌ๊ฒŒ ์ค„์—ˆ๋‹ค.
์˜ˆ์ „์— ์€์ „ํ•œ๋‹ข์„ ์จ๋ดค๋˜ ๊ธฐ์–ต์œผ๋กœ๋Š” ๋ฏธ๋ฌ˜ํ•˜๊ฒŒ ๊ตฌ๋ ธ๋‹ค... ์ง€๊ธˆ์€ ๋‚˜์˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™๊ธด ํ•˜๋‹ค๋งŒ.

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

OOV ์ฒ˜๋ฆฌ๋Š” ์‚ฌ์šฉ์ž ์‚ฌ์ „ ์ˆ˜์ค€์œผ๋กœ๋งŒ ์ œ๊ณตํ•œ๋‹ค.
๊ทธ ์™ธ์—๋Š” ๊ธฐ๋Šฅ ์ˆ˜์ค€์ด ๋Œ€๋žต nori์™€ ๋น„์Šทํ•˜๋‹ค. ํ’ˆ์‚ฌ ์‹๋ณ„, ์กฐ์‚ฌ ์ œ๊ฑฐ, ์–ด๊ทผ ์ถ”์ถœ ๋“ฑ ๊ธฐ๋ณธ์ ์ธ๊ฑด ์žˆ๋‹ค.




Kiwi

C++ ๊ตฌํ˜„์ฒด๋‹ค.
์–ธ์–ด๋ณ„ ํฌํŒ…์ด ๊ดœ์ฐฎ๊ฒŒ ์ œ๊ณต๋˜๊ณ , ํŽธ์˜์„ฑ์ด ์ข‹๋‹ค.
๊ตฌํ˜„ ๋ฐฉ์‹์ด๋‚˜ ๊ธฐ๋Šฅ ์ˆ˜์ค€์€ nori์™€ ๋น„์Šทํ•˜๊ฑฐ๋‚˜ ๋” ํ’๋ถ€ํ•œ ํŽธ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ข€ ๋” ๋ฒ”์šฉ์— ๊ฐ€๊น๋‹ค.

ํ’ˆ์‚ฌ ์‹๋ณ„, ์กฐ์‚ฌ ์ œ๊ฑฐ, ์–ด๊ทผ ์ถ”์ถœ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ž˜ ์ œ๊ณตํ•˜๊ณ , OOV ๊ธฐ๋Šฅ๋„ ๊ดœ์ฐฎ๊ฒŒ ์ œ๊ณต์ด ๋˜๋Š” ํŽธ์ด๋‹ค.
ํŠนํžˆ ์ตœ์‹  ๋ฒ„์ „์—์„œ๋Š” ๋ฌธ๋งฅ ๊ฐ์ง€์šฉ ๊ฒฝ๋Ÿ‰ ๋ชจ๋ธ์„ ๋‚ด์žฅํ•ด์„œ ๊ณ ์œ ๋ช…์‚ฌ๋ฅผ ๊ฝค ์ž˜ ์ถ”์ถœํ•œ๋‹ค.

๋‹ค์Œ ์›นํŽ˜์ด์ง€์—์„œ ์ฆ‰์‹œ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
https://kiwi.bab2min.pe.kr/




Open Korean Text

Scala ๊ตฌํ˜„์ฒด์ด๋‚˜ ์–ธ์–ด๋ณ„ ํฌํŒ… ๋ฒ„์ „์ด ์กด์žฌํ•œ๋‹ค.
ํŠธ์œ„ํ„ฐ ๊ฐ™์€ SNS์˜ ๊ธ€์—์„œ ํ‚ค์›Œ๋“œ๋ฅผ ์ถ”์ถœํ•˜๋Š” ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค.

ํ˜•ํƒœ์†Œ ๋ถ„์„๊ธฐ๋ผ๊ธฐ๋ณด๋‹ค๋Š” ๊ฐ€๋ฒผ์šด ํ•œ๊ตญ์–ด ํ…์ŠคํŠธ ์ „์ฒ˜๋ฆฌ ๋„๊ตฌ์— ๊ฐ€๊น๋‹ค.
ํ•œ๊ตญ์–ด ์ •๊ทœํ™”, ํ† ํฐํ™”, ํ’ˆ์‚ฌ ํƒœ๊น…, ์–ด๊ตฌ ์ถ”์ถœ ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, MeCab-ko๋‚˜ Kiwi, nori์ฒ˜๋Ÿผ ์ •๊ตํ•œ ํ˜•ํƒœ์†Œ ๋ถ„์„ ํ’ˆ์งˆ์„ ๊ธฐ๋Œ€ํ•˜๊ธฐ๋Š” ์–ด๋ ต๋‹ค.

์žฅ์ ์€ ์‚ฌ์šฉ์ด ์‰ฝ๊ณ  ๋น„๊ต์  ๊ฐ€๋ณ๋‹ค๋Š” ์ ์ด๋‹ค.
ํŠนํžˆ SNS ๋ฌธ์žฅ, ใ…‹ใ…‹/ใ…Žใ…Ž, ๋„์–ด์“ฐ๊ธฐ ์˜ค๋ฅ˜, ๊ตฌ์–ด์ฒด ํ‘œํ˜„ ๊ฐ™์€ ๋น„์ •ํ˜• ํ…์ŠคํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐ ๊ฐ•์ ์ด ์žˆ๋‹ค.

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




charabia

Rust ๊ตฌํ˜„์ฒด๋‹ค. ๊ฒ€์ƒ‰์„ ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค.
meilisearch์—์„œ ์ž๊ธฐ๋“ค ์“ฐ๋ ค๊ณ  ๋งŒ๋“ค์—ˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์ €๊ธฐ์„œ ๋งŽ์ด ๊ฐ–๋‹ค์“ฐ๋”๋ผ.

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

์žฅ์ ์€ ๋งค์šฐ ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๋ฉฐ, ๋‹ค๊ตญ์–ด๋ฅผ ๋ณ„๋„์˜ ๋ฌด๊ฑฐ์šด ํ˜•ํƒœ์†Œ ๋ถ„์„๊ธฐ ์—†์ด ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.
๋ฐ˜๋ฉด ํ’ˆ์‚ฌ ํƒœ๊น…, ์›ํ˜• ๋ณต์›, ์‚ฌ์šฉ์ž ์‚ฌ์ „, OOV ์ฒ˜๋ฆฌ ๋“ฑ ์ •๊ตํ•œ ํ•œ๊ตญ์–ด ํ˜•ํƒœ์†Œ ๋ถ„์„ ๊ธฐ๋Šฅ์€ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋”ฐ๋ผ์„œ ์ „๋ฌธ์ ์ธ ํ•œ๊ตญ์–ด ๋ถ„์„๋ณด๋‹ค๋Š” ๊ฒ€์ƒ‰ ์ธ๋ฑ์‹ฑ์ด๋‚˜ ๊ฒ€์ƒ‰์„ ์œ„ํ•œ ๊ฐ€๋ฒผ์šด ์ „์ฒ˜๋ฆฌ ์šฉ๋„์— ์ ํ•ฉํ•˜๋‹ค.



์ฐธ์กฐ
https://github.com/meilisearch/charabia
https://github.com/open-korean-text/open-korean-text
https://github.com/bab2min/kiwi
https://bab2min.tistory.com/682
https://datascienceschool.net/03%20machine%20learning/03.01.04%20soynlp.html