๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ๐ŸŒฎ ๐Ÿ’ฌ
๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป/database

[MySQL] ๋‰ด์Šค ๊ธฐ์‚ฌ NER ๊ฒ€์ƒ‰ ๊ตฌ์กฐ ๊ฐœ์„ ๊ธฐ - ์„ฑ๋Šฅ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์˜ ๊ท ํ˜• ๋งž์ถ”๊ธฐ

by ๋ฐ”์ฟ„๋ฆฌ 2025. 7. 23.

 

์ตœ๊ทผ์— ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ์— ํˆฌ์ž…์ด ๋˜์—ˆ๋‹ค.

ํ˜ผ์ž 1,000์—ฌ๊ฐœ์˜ ์‚ฌ์ดํŠธ๋ฅผ ํฌ๋กค๋งํ•ด์•ผํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์–ด์•ผํ–ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ์— ๋ฐฐ์ •๋˜์—ˆ์„ ๋•Œ ๋„ˆ๋ฌด ๋„ˆ๋ฌด ๋งŽ์€ ๋ฒ”์œ„๋ฅผ ํ˜ผ์ž ์ง„ํ–‰ํ•ด์•ผํ•ด์„œ ๋ง‰๋ง‰ํ–ˆ์ง€๋งŒ

๋‚ด๊ฐ€ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ฃผ๋„์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š”๊ฒŒ ์–ผ๋งˆ๋‚˜ ํฐ ๊ธฐํšŒ์ธ๊ฐ€!

 

์ข‹์€ ๊ธฐํšŒ์ด๋‹ˆ ์• ์ •์„ ๊ฐ€์ง€๊ณ  ์ž˜ ์ง„ํ–‰ํ•ด๋ณด๋ คํ•œ๋‹ค.

์™„์ „ ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋Š” ์•„๋‹ˆ๊ณ , ์˜ˆ์ „์— ์ง„ํ–‰ํ–ˆ๋˜ ๊ฒƒ๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ ๋งจ๋•…๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์•ผํ–ˆ๋‹ค.

๊ทธ๋Ÿผ ๋” ์ข‹๋‹ค. ๊ฐœ์„ ํ•˜๊ณ  ์‹ถ์€ ๋ถ€๋ถ„๋“ค์ด ์žˆ์—ˆ๋‹ค.

 

์ฒ˜์Œ์œผ๋กœ ๋ฐ”๋กœ ๊ฐœ์„ ํ•˜๊ณ  ์‹ถ์€ ๋ถ€๋ถ„์€ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์ชฝ์ด์—ˆ๋‹ค.

 

๋ฌธ์ œ ์ƒํ™ฉ : ๋А๋ฆฐ NER ๊ฒ€์ƒ‰

ํฌ๋กค๋งํ•œ ๋‰ด์Šค ๊ธฐ์‚ฌ ๋ฐ์ดํ„ฐ๋ฅผ DB์— ์ €์žฅํ•˜๊ณ , ๊ฐ ๊ธฐ์‚ฌ๋ณ„๋กœ NER(Named Entity Recognition) ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ TEXT ์ปฌ๋Ÿผ์— ์ €์žฅํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

 

<์˜ˆ์‹œ ํ…Œ์ด๋ธ”>

→ ner์— ["ํ‚ค์›Œ๋“œ1", "ํ‚ค์›Œ๋“œ2", "ํ‚ค์›Œ๋“œ3", ...] ์ด๋ ‡๊ฒŒ ๋“ค์–ด๊ฐ€์žˆ์—ˆ๋‹ค.

 

์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • NER์„ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น NER์ด ํฌํ•จ๋œ ๊ธฐ์‚ฌ๋“ค์„ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•ด์•ผ ํ–ˆ๋Š”๋ฐ,

๋‹จ์ˆœํžˆ ์ „์ฒด ๊ธฐ์‚ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ณ  ํŒŒ์‹ฑํ•˜๋Š” ๋ฐฉ์‹์€ ์„ฑ๋Šฅ์ƒ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ด์—ˆ๋‹ค.

 

์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ๋Š” ์ˆ˜์ฒœ ๊ฑด ์ˆ˜์ค€์ด์—ˆ๊ธฐ์— ๋ฌธ์ œ์—†์—ˆ์ง€๋งŒ, ์ˆ˜์‹ญ๋งŒ ๊ฑด ์ด์ƒ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋ฉด์„œ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.

 

1๏ธโƒฃ ์ฐจ ๊ฐœ์„ 

๊ฒ€์ƒ‰ ์†๋„ ํ–ฅ์ƒ์„ ์œ„ํ•ด ๋ณ„๋„์˜ NER → ๊ธฐ์‚ฌ ๋ฒˆํ˜ธ mapping ํ…Œ์ด๋ธ” ์ถ”๊ฐ€๋กœ ์ƒ์„ฑ

 

<์˜ˆ์‹œ ํ…Œ์ด๋ธ”>

๊ฐ NER ๋‹จ์œ„๋กœ ๊ธฐ์‚ฌ id ๋ฆฌ์ŠคํŠธ๋ฅผ ์ €์žฅํ•ด๋‘๊ณ , ์—ญ๋ฐฉํ–ฅ ์กฐํšŒ๋ฅผ ํ†ตํ•ด ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ๋†’์˜€๋‹ค.

 

๋ฌธ์ œ์ 

- ํฌ๋กค๋ง ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐฑ์‹ ๋˜๊ฑฐ๋‚˜ ๋กค๋ฐฑ๋  ๊ฒฝ์šฐ, ์–ด๋–ค NER-๊ธฐ์‚ฌ ๋งคํ•‘์ด ์˜ํ–ฅ์„ ๋ฐ›์•˜๋Š”์ง€ ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

- ๊ฒฐ๊ตญ, ์ „์ฒด ๋งคํ•‘ ํ…Œ์ด๋ธ”์„ ์‚ญ์ œ ํ›„ ์žฌ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์ž์ฃผ ๋ฐœ์ƒ

- ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ , ํฌ๋กค๋ง ํŒŒ์ดํ”„๋ผ์ธ๊ณผ DB๊ฐ€ ๊ธด๋ฐ€ํ•˜๊ฒŒ Coupling๋จ

 

2๏ธโƒฃ ์ฐจ ๊ฐœ์„ 

์ถ”๊ฐ€ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์ตœ๋Œ€ํ•œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์กฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์—†์„ ๊นŒ ๊ณ ๋ฏผ ..

๊ธฐ์กด ๊ธฐ์‚ฌ ํ…Œ์ด๋ธ”์— Generated ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•˜๊ณ , ์ด ์ปฌ๋Ÿผ์—๋Š” NER ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ€๊ณตํ•ด ๊ฒ€์ƒ‰ ์ตœ์ ํ™”์— ๋งž๊ฒŒ ์ €์žฅํ•˜๋„๋ก ํ–ˆ๋‹ค.

ํ•ด๋‹น ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด FULLTEXT INDEX๋ฅผ ์„ค์ •ํ•˜๊ณ ,
MATCH(ner_text) AGAINST('+ํ‚ค์›Œ๋“œ' IN BOOLEAN MODE) ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ด ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ์„ ํ–ˆ๋‹ค.

 

 

โญ๏ธ ํšจ๊ณผ

 

- ๋ณ„๋„์˜ ํ…Œ์ด๋ธ” ์—†์ด๋„ ๋น ๋ฅธ NER ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ ํ™•๋ณด

- ํฌ๋กค๋ง ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ๋กค๋ฐฑ๋˜๋Š” ๊ฒฝ์šฐ์—๋„ ๋งคํ•‘ ํ…Œ์ด๋ธ”์„ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์–ด ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ ์ ˆ๊ฐ

- ์ „์ฒด์ ์ธ ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ™”๋˜์–ด, ์ดํ›„ ๊ธฐ๋Šฅ ํ™•์žฅ์ด๋‚˜ ํฌ๋กค๋ง ํŒŒ์ดํ”„๋ผ์ธ ๋ณ€๊ฒฝ ์‹œ์—๋„ ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ ๊ฐ€๋Šฅ