๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ๏ธ ์ตœ์ข…ํ”„๋กœ์ ํŠธ/โœ๏ธ TIL

[ TIL ] ์ตœ์ข… ํ”„๋กœ์ ํŠธ_Day26

by carrot0911 2025. 3. 8.

์˜ค๋Š˜ ์ง„ํ–‰ํ•œ ๋‚ด์šฉ๋“ค ๐Ÿง 

ํ•œ๊ธ€ ํ˜•ํƒœ์†Œ ๋ถ„์„์„ ํ™œ์šฉํ•œ ์กฐํšŒ ๊ฐœ์„  + ์ž๋™ ์™„์„ฑ API ๋ถ„๋ฆฌํ•˜๊ธฐ

Nori ๋ถ„์„๊ธฐ & Nori Tokenizer
๊ฐœ๋…

๊ฐœ๋… Nori ๋ถ„์„๊ธฐ Nori Tokenizer
์„ค๋ช… Elasticsearch์—์„œ ์ œ๊ณตํ•˜๋Š” ํ•œ๊ธ€ ์ „์šฉ ํ˜•ํƒœ์†Œ ๋ถ„์„๊ธฐ ํ•œ๊ธ€์„ ํ˜•ํƒœ์†Œ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•˜๋Š” Tokenizer
์š”์•ฝ ํ•œ๊ธ€์„ ๋ถ„์„ํ•˜๋Š” ์™„์„ฑ๋œ ๋ถ„์„๊ธฐ (Analyzer) ํ˜•ํƒœ์†Œ ๋‹จ์œ„๋กœ ๋‹จ์–ด๋ฅผ ๋‚˜๋ˆ„๋Š” Tokenizer
์„ค์ • ๋ฐฉ์‹ analyzer: "nori" tokenizer: "nori_tokenizer"

Nori ๋ถ„์„๊ธฐ

ํ•œ๊ธ€ ํ…์ŠคํŠธ๋ฅผ ํ˜•ํƒœ์†Œ ๋‹จ์œ„๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค.

  • "๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž" โ†’ ["๋ฐฑ์—”๋“œ", "๊ฐœ๋ฐœ", "์ž"]

์–ด๋ฏธ, ์กฐ์‚ฌ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.

  • "๊ฐœ๋ฐœ์ž๊ฐ€" โ†’ ["๊ฐœ๋ฐœ", "์ž"]

์‚ฌ์šฉ์ž ์‚ฌ์ „ ์ถ”๊ฐ€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

  • ex) "AI๊ฐœ๋ฐœ์ž" โ†’ "AI", "๊ฐœ๋ฐœ์ž"๊ฐ€ ์•„๋‹Œ "AI๊ฐœ๋ฐœ์ž"๋กœ ์œ ์ง€ ๊ฐ€๋Šฅํ•˜๋‹ค.

Nori Toeknizer

ํ˜•ํƒœ์†Œ ๋‹จ์œ„๋กœ ๋‹จ์–ด๋ฅผ ๋‚˜๋ˆˆ๋‹ค.

  • "์ž๋ฐ” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž" โ†’ ["์ž๋ฐ”", "๋ฐฑ์—”๋“œ", "๊ฐœ๋ฐœ", "์ž"]

๋ณตํ•ฉ์–ด ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

  • mixed, discard, none ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•œ๋‹ค.

๊ธฐ์กด ๊ฒ€์ƒ‰ ๋ฐฉ์‹์˜ ํ•œ๊ณ„

๐Ÿ‘‰๐Ÿป ์ฑ„์šฉ ๊ณต๊ณ  ์ œ๋ชฉ: ๋ถ€๋ถ„ ๊ฒ€์ƒ‰(Ngram) + ์ž๋™ ์™„์„ฑ(Edge_Ngram) ๊ธฐ๋Šฅ์„ ์ ์šฉํ–ˆ๋‹ค.
ํ•˜์ง€๋งŒโ€ฆ.. ๋ถ€๋ถ„ ๊ฒ€์ƒ‰ + ์ž๋™ ์™„์„ฑ ๊ฒ€์ƒ‰์€ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ์ •ํ™•ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•ด์ฃผ์ง€ ์•Š์•˜๋‹คโ€ฆ

"์นด๋“œ"๋กœ ๊ฒ€์ƒ‰ํ•œ ๊ฒฐ๊ณผ

  • ๋ถ€๋ถ„ ๊ฒ€์ƒ‰(Ngram) ์ ์šฉ โ†’ ์นด๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์ž๋™ ์™„์„ฑ(Edge-Ngram) ์ ์šฉ โ†’ ์นด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์นด๋“œ, ์นด์นด์˜ค ๋“ฑ์ด ์ž๋™ ์™„์„ฑ๋œ๋‹ค.

์ œ๋ชฉ์— ์นด๋“œ๊ฐ€ ๋“ค์–ด๊ฐ„ ์ฑ„์šฉ ๊ณต๊ณ ๋ฅผ ์›ํ–ˆ์ง€๋งŒ ์ž๋™ ์™„์„ฑ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ๊ณผ ํ•ฉ์ณ์ ธ์„œ ์นด ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ฑ„์šฉ ๊ณต๊ณ ๋„ ํ•จ๊ป˜ ์ฐพ์•„์˜ค๊ฒŒ ๋˜๋Š” ์ผ์ด ๋ฐœ์ƒํ–ˆ๋‹ค.


๊ธฐ์กด ์กฐํšŒ ๋ฐฉ์‹ ๊ฐœ์„ 

๐Ÿ‘‰๐Ÿป ์ฑ„์šฉ ๊ณต๊ณ  ์ œ๋ชฉ: ํ•œ๊ธ€ ํ˜•ํƒœ์†Œ ๊ฒ€์ƒ‰(Nori) + ์ž๋™ ์™„์„ฑ(Edge-Ngram) ๊ธฐ๋Šฅ
๐Ÿ‘‰๐Ÿป ์ฑ„์šฉ ๊ณต๊ณ  ํšŒ์‚ฌ๋ช…: ํ•œ๊ธ€ ํ˜•ํƒœ์†Œ ๊ฒ€์ƒ‰(Nori) + ์ž๋™ ์™„์„ฑ(Edge-Ngram) ๊ธฐ๋Šฅ
๐Ÿ‘‰๐Ÿป ์ฑ„์šฉ ๊ณต๊ณ  ์ž๊ฒฉ ์š”๊ฑด: ์ž๋™ ์™„์„ฑ(Edge-Ngram) ๊ธฐ๋Šฅ
์ด์ œ ํšŒ์‚ฌ๋ช…๊ณผ ์ œ๋ชฉ ํ•„๋“œ์— nori_analyzer๋ฅผ ์ ์šฉํ•ด์„œ ์˜๋ฏธ ๊ธฐ๋ฐ˜์˜ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.

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

ํ•œ๊ธ€ ํ˜•ํƒœ์†Œ ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ

์œ„์˜ ์ฟผ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ํ•œ๊ธ€ ํ˜•ํƒœ์†Œ๋กœ ๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅ ์‹œ ์ •ํ™•ํ•˜๊ฒŒ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

"์นด๋“œ"๋กœ ๊ฒ€์ƒ‰ํ•œ ๊ฒฐ๊ณผ

์นด๋“œ๊ฐ€ ํฌํ•จ๋œ ์ฑ„์šฉ ๊ณต๊ณ ๋งŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค!!!

 

์ฃผ๋ง ๊ณ„ํš โฐ

  • ๋ชจ์˜ ๋ฉด์ ‘ ๋Œ€์ฒด ์˜์ƒ ์ดฌ์˜ํ•˜๊ธฐ (์ผ์š”์ผ 21์‹œ๊นŒ์ง€)
  • ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… ์ •๋ฆฌํ•˜๊ธฐ
  • ํ‚ค์›Œ๋“œ ์ธ๋ฑ์Šค ์ ์šฉํ•ด๋ณด๊ธฐ

+ Elasticsearch ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ์ž‘์„ฑํ•ด๋ณด๊ธฐ
+ ์ถ”๊ฐ€ ๊ณ„ํš์ด ๋” ์ƒ๊ธธ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค ~_~