-
๋ถ์คํธ์บ ํ AI Tech
NLP
ํธ๋์์ ๊ฐ์ต๋ level 2 ๋ํ -
Linking MRC and Retrieval: Open-domain Question Answering(ODQA)
Task.- ODQA: ์ง๋ฌธ์ด ๋ฐ๋ก ์ฃผ์ด์ง์ง ์์ ์ฑ๋ก ๋ฐฉ๋ํ World Knowledge์ ๊ธฐ๋ฐํ์ฌ ์ง์์๋ต
- ์ง๋ฌธ์ ๊ด๋ จ๋ ๋ฌธ์๋ฅผ ์ฐพ๋
retriever
์ ๋ฌธ์๋ฅผ ์ฝ๊ณ ์ ์ ํ ๋ต๋ณ์ ์ฐพ๊ฑฐ๋ ๋ง๋๋reader
์two-stage
๋ก ๊ตฌ์ฑ.
-
ํ์ต ๋ฐ์ดํฐ์ ์ 3,952๊ฐ, ๊ฒ์ฆ ๋ฐ์ดํฐ๋ 240๊ฐ, ํ ์คํธ ๋ฐ์ดํฐ๋ 600๊ฐ๋ก ํ ์คํธ ๋ฐ์ดํฐ ์ค 40%๋ง Public์ผ๋ก ๋ฐ์ ๋ํ ์ข ๋ฃ ํ Private ์ ์๊ฐ ๊ณต๊ฐ๋จ.
id
: ์ง๋ฌธ์ ๊ณ ์ idquestion
: ์ง๋ฌธanswers
: ๋ต๋ณ์ ๋ํ ์ ๋ณด, ํ๋์ ์ง๋ฌธ์ ํ๋์ ๋ต๋ณ๋ง ์กด์ฌ.answer_start
: ๋ต๋ณ์ ์์ ์์นtext
: ๋ต๋ณ์ ํ ์คํธ
context
: ๋ต๋ณ์ด ํฌํจ๋ ๋ฌธ์title
: ๋ฌธ์์ ์ ๋ชฉdocument_id
: ๋ฌธ์์ ๊ณ ์ id
-
Exact Match
,F1 Score
๋ฅผ ํตํ ํ๊ฐ.
- ํ๋ก์ ํธ ๊ธฐ๊ฐ(4์ฃผ) : 09.30(์) ~ 10.24(๋ชฉ)
- ์๋ฃ์กฐ์ฌ: 9.30(์) ~ 10.06(์ผ)
- ๊ฐ์ ์๊ฐ ๋ฐ ๊ณผ์ ์งํ: 10.01(ํ) ~ 10.10(๋ชฉ)
- ๋ฐ์ดํฐ EDA: 10.07(์) ~ 10.10(๋ชฉ)
- Sparse ๋ฐ Dense ๊ตฌํ: 10.11(๊ธ) ~ 10.13(์ผ)
- Sparse ๋ฐ Dense ๊ณ ๋ํ: 10.14(์) ~ 10.16(์)
- Re-ranking ์คํ ๋ฐ ํ์ดํผํ๋ผ๋ฏธํฐ ํ๋: 10.17(๋ชฉ) ~ 10.23(์)
- Reader ๊ตฌ์กฐ ์ค์ : 10.11(๊ธ) ~ 10.13(์ผ)
- Reader ์ฌ๊ตฌ์ฑ ๋ฐ ๋ฒ ์ด์ค๋ผ์ธ ์๋ฆฝ: 10.14(์) ~ 10.16(์)
- ๋ชจ๋ธ ๊ฒฐํฉ ๋ฐ LLM ์คํ: 10.17(๋ชฉ) ~ 10.21(์)
- ๋ชจ๋ธ ์ ์ ๋ฐ ํ์ดํผํ๋ผ๋ฏธํฐ ํ๋: 10.19(ํ ) ~ 10.23(์)
๊ฐ๊ฐ์ฐฌ | ์ด์ฑํธ | ์ค์น๋ฒ | ์ด์ํ | ์ ์ฑ์ | ์์ฌ๋ |
---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
@๊ฐ์ฐฌ | @์ฑํธ | @์น๋ฒ | @์ํ | @์ฑ์ | @์ฌ๋ |
๊ณ ๋ ํ ์์ ์ธ ๊ฐ์ฐฌ | ํผ์์๋ ์ง๋ฐฉ๋ฌ ์ฑํธ | ์ด์ ๋นผ์ผํ๋ ์น๋ฒ | ๊ท์ผ๋ฅ์ด ๋ง๋ด ์ํ | ์ผ๊ตฌ๋ฅผ ๋ณผ ์ ์๋ ์ฑ์ | ์ค๋ฆฌ๋ ๊ฝฅ๊ฝฅ ์ฌ๋ |
Project Manager, ํตํฉ ๊ด๋ฆฌ ๋ชจ๋, ๋ฆฌ๋์ ๋ฆฌ๋ | EDA, ๋ฐ์ดํฐ ๋ถํ, ๊ธฐํ ์คํ, ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ | Sparse ์๋ฒ ๋ฉ ๊ตฌํ, ๊ธฐ์ ์ง์, | ๋ชจ๋ํฐ๋ง ํด, ํ ์คํธ ์ฝ๋, ๋ชจ๋ธ ๊ฒฐํฉ ๋ฐ ์คํ | ํ ๋ฆฌ๋, retriever ํ์ฅ, Dense ์๋ฒ ๋ฉ ๊ตฌํ, Data ์ ์ | ๋ฐ์ดํฐ ์ /ํ์ฒ๋ฆฌ, ๋ชจ๋ธ ๊ฒฐํฉ ๋ฐ ์คํ |
๋ณธ ํ๋ก์ ํธ๋ ODQA ์์คํ ์ ๊ฐ๋ฐ์ ๋ชฉํ๋ก ํ์ฌ, Retrieval๊ณผ Reader ๋ชจ๋ธ๋ก ๊ตฌ์ฑ๋ ์์คํ ์ ๋จ๊ณ๋ณ๋ก ์ค๊ณํ๊ณ ๊ฐ๋ฐํ์์ต๋๋ค. ๊ฐ ํ์์ Dense/Sparse Embedding ๋ฐ ๋ฐ์ดํฐ ์ ์ , ์ ์ฒ๋ฆฌ, ํ๊ฐ ์งํ ์ค๊ณ, ์ํํธ์จ์ด ์ํคํ ์ฒ ์ค๊ณ ๋ฑ ํ๋ก์ ํธ ์ ๋ฐ์ ๊ฑธ์น ๊ฐ ์์๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๋๋์ด ๋ด๋นํ์์ผ๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ ์ ์ฐจ๋ก ํ๋ก์ ํธ๋ฅผ ์งํํ์์ต๋๋ค.
ํ๋ก์ ํธ ์ด๊ธฐ์ ํ์๋ค์ด ๋ถ์คํธ์บ ํ ์ฐธ๊ฐ ๋๊ธฐ์ ๊ฐ์์ ํ์ต ๋ชฉํ๋ฅผ ๊ณต์ ํ์์ต๋๋ค. ์ด ๊ณต์ ๋ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ํ ๋จ์ ๋ชฉํ๋ฅผ ์ค์ ํ์๊ณ , ๋ฆฌ๋๋ณด๋ ์์๋ณด๋ค๋ ODQA ์์คํ ์ ๊น์ ์ดํด๋ฅผ ์ค์ ์ผ๋ก ๋์์ต๋๋ค. ์ดํ, SMART ๋ชฉํ ์ค์ ๋ฐฉ์์ ๋์ ํ์ฌ ๊ตฌ์ฒด์ ์ด๊ณ ์คํ ๊ฐ๋ฅํ ๋ชฉํ๋ฅผ ์๋ฆฝํ์์ต๋๋ค.
์ด๋ฅผ ๋ฐํ์ผ๋ก ์ ์ฒด ํ๋ก์ ํธ๋ Retriever๊ณผ Reader๋ก ๊ตฌ๋ถํ์ฌ ํ์ ๊ตฌ์ฑํ์๊ณ , ๊ฐ ํ์ ๋ ๋ฆฝ์ ์ผ๋ก ์ต์ ํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ด๋ ๊ฒ์ ๋ชฉํ๋ก ์คํ๊ณผ ๊ฐ๋ฐ์ ์งํํ์์ต๋๋ค.
ํ๋ก์ ํธ ์์ ๋จ๊ณ์์ MRC(Machine Reading Comprehension) ํํ์ ๋ฐ์ดํฐ์ ์ ๋ํ EDA๋ฅผ ์ํํ์ฌ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ์ ํน์ฑ์ ๋ถ์ํ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์ ์ฃผ์ ๊ตฌ์ฑ ์์์ธ ์ง๋ฌธ, ์ ๋ต, ๋ฌธ๋งฅ์ ์ฐ๊ด์ฑ์ ํ์ ํ๊ณ , ๋ฐ์ดํฐ ์ ์ ๋ฐ ์ ์ฒ๋ฆฌ ํ์์ฑ์ ๋์ถํ์์ต๋๋ค.
๋ฐ์ดํฐ ์ ์ ๊ณผ์ ์์๋ ๋ถํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๊ณ , ๋ชจ๋ธ์ด ํ์ตํ๊ธฐ ์ ํฉํ ํ์์ผ๋ก ๋ฐ์ดํฐ์ ์ ๋ณํํ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ง๋ฌธ์ ํ๊ธ, ์์ด, ์ซ์๊ฐ ํผํฉ๋ ๊ฒฝ์ฐ๋ฅผ ๋ถ์ํ์ฌ ํ๊ธ์ด ์ ํ ํฌํจ๋์ง ์์ ๋ฌธ์๋ฅผ ์ ๊ฑฐํ๊ฑฐ๋ ํน์ ๋ฌธ์์ ์ฝ๋๋ก ์ถ์ ๋๋ ๋ฐ์ดํฐ ๋ฑ์ ํํฐ๋งํ์์ต๋๋ค.
๋ํ, KorQuAD์ ๊ฐ์ ์ถ๊ฐ ๋ฐ์ดํฐ์ ์ ํ์ฉํ์ฌ ๋ฐ์ดํฐ ์ฆ๊ฐ์ ์ํํ์์ผ๋ฉฐ, ์ง๋ฌธ์ ๋ช ์ฌ๋ฅผ ์ถ๊ฐํ๋ ๋ฑ ๋ค์ํ ์ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ์ ์ฉํ์์ต๋๋ค. ์ด๋ฌํ ๊ณผ์ ์ ๋ชจ๋ธ์ ์ฑ๋ฅ ๊ฐ์ ๊ณผ ๋ฐ์ดํฐ์ ํ์ง ํฅ์์ ์ค์ํ ์ญํ ์ ํ์์ต๋๋ค.
Retriever ๋ชจ๋ธ์ ์ค๊ณ๋ Sparse์ Dense Embedding ๋ฐฉ์์ ๋ชจ๋ ๊ณ ๋ คํ์์ต๋๋ค. Sparse Embedding์์๋ TF-IDF์ BM25๋ฅผ ์คํํ์๊ณ , ๋ค์ํ ํ๋ผ๋ฏธํฐ ์ค์ ๊ณผ ํ ํฌ๋์ด์ ์คํ์ ํตํด ์ฑ๋ฅ ์ต์ ํ๋ฅผ ๋๋ชจํ์์ต๋๋ค. BM25์ ์ฑ๋ฅ์ด ์ฐ์ํ๋ค๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก max_feature, n-gram, BM25์ k1๊ณผ b ํ๋ผ๋ฏธํฐ ๋ฑ์ ์กฐ์ ํ๋ฉฐ ์ต์ ์ ์กฐํฉ์ ์ฐพ์์ต๋๋ค.
Dense Embedding์์๋ BERT ๊ธฐ๋ฐ์ multilingual ๋ชจ๋ธ๊ณผ ํ๊ตญ์ด ์ ์ฉ ๋ชจ๋ธ์ ํ์ฉํ์๊ณ , ๋จ์ํ Dense Embedding๋ง์ผ๋ก๋ ์ฑ๋ฅ์ด ๋์ง ์๋ค๋ ์ ์ ์ธ์ํ์ฌ, Sparse ๋ชจ๋ธ์ ์์ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ Dense ๋ชจ๋ธ์ด ์ฌ๋ฐฐ์นํ๋ ๋ฐฉ๋ฒ์ ์คํํ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ต์ข ์ ์ผ๋ก๋ Sparse Embedding ๋จ์ผ ์ฌ์ฉ์ด ๋ ๋์ ์ฑ๋ฅ์ ๋ณด์ฌ ์ด๋ฅผ ์ต์ข ์ ํํ์์ต๋๋ค.
Reader ๋ชจ๋ธ์ ๋ค์ํ pre-trained ๋ชจ๋ธ์ ์คํํ์ฌ ์ต์ ์ ๋ชจ๋ธ์ ์ ํํ์์ต๋๋ค. ์ด ๊ณผ์ ์์ ๊ธฐ์กด ๋ฒ ์ด์ค๋ผ์ธ ์ฝ๋์ ๊ตฌ์กฐ์ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ์ฒด์งํฅ ์ค๊ณ๋ฅผ ๋์ ํ์ฌ ์ฝ๋์ ์ ์ง๋ณด์์ฑ๊ณผ ํ์ฅ์ฑ์ ๊ฐ์ ํ์์ต๋๋ค.
Reader ํด๋์ค๋ ํ์ต, ํ๊ฐ, ์์ธก ๋ฑ์ ์ญํ ์ ๋ถ๋ฆฌํ์ฌ ๋ชจ๋ํํ์๊ณ , ์ /ํ์ฒ๋ฆฌ ๋ชจ๋๊ณผ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ์ผ๊ด์ฑ์ ์ํด DataHandler
์ DataProcessor
ํด๋์ค๋ฅผ ์ค๊ณํ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ์ ๋ณํ๊ณผ ์ฒ๋ฆฌ๊ฐ ๋ณด๋ค ์ฝ๊ฒ ์ด๋ฃจ์ด์ง ์ ์๋๋ก ํ์์ต๋๋ค.
๊ฐ Embedding ๋ฐฉ์์ ๋ํด ๋ค์ํ ํ๋ผ๋ฏธํฐ์ ํ ํฌ๋์ด์ ์คํ์ ์ํํ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, BM25์ max_feature์ n-gram ์กฐํฉ, Dense ๋ชจ๋ธ์ negative sampling ๋น์จ ๋ฐ epoch ์ค์ ๋ฑ์ ์คํํ์์ผ๋ฉฐ, ์คํ ๊ฒฐ๊ณผ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ธฐ๋กํ์ฌ ๊ฐ ์ค์ ์ ์ฑ๋ฅ์ ๋ถ์ํ์์ต๋๋ค.
Sparse ๋ฐ Dense ๋ชจ๋ธ์ ์ฑ๋ฅ์ ํจ๊ณผ์ ์ผ๋ก ๋น๊ตํ ์ ์๋๋ก Retrieval ์ฑ๋ฅ ํ๊ฐ๋ฅผ ์ํ ๋ค์ํ ์งํ๋ฅผ ๋์
ํ์์ต๋๋ค. Exact Match(EM), F1 Score ์ธ์๋ Context in Retriever
, Reverse Ranking
, Linear Ranking
๋ฑ์ ํ์ฉํ์ฌ ๋ฌธ์ ๊ฒ์ ๋จ๊ณ์์์ ์ฑ๋ฅ์ ํ๊ฐํ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ชจ๋ธ์ด ์ฌ๋ฐ๋ฅธ ๋ฌธ๋งฅ์ ์ผ๋ง๋ ์ ์ถ์ถํ ์ ์๋์ง ํ์
ํ ์ ์์์ต๋๋ค.
ํ๋ก์ ํธ์ ํต์ฌ ์ฝ๋๋ค์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ๋ฅผ ํตํด ๊ตฌ์กฐํํ์์ต๋๋ค. ๋ชจ๋ธ์ ๋ชจ๋ํ๋ฅผ ํตํด ๋ค์ํ ๊ธฐ๋ฅ์ ๋ ๋ฆฝ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ํ๋ณดํ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ํด๋์ค๊ฐ ํ๋์ ์ฑ ์์ ๊ฐ๋๋ก ์ค๊ณํ์ฌ ์ ์ง๋ณด์๊ฐ ์ฝ๊ณ ํ์ฅ ๊ฐ๋ฅํ ์์คํ ์ ๊ตฌ์ถํ์์ต๋๋ค.
Reader ํด๋์ค๋ ๋ค์ํ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ๋ฐ ํ์ต ๋ชจ๋์ ํ์ฉํ ์ ์๋๋ก ์ฌ์ค๊ณ๋์๊ณ , ์ด๋ฅผ ํตํด ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ ๋ฐ ์คํ์ด ์ฉ์ดํด์ก์ต๋๋ค.
๋ฐ์ดํฐ ์ฆ๊ฐ์ ์ํด KorQuAD์ ๊ฐ์ ์ธ๋ถ ๋ฐ์ดํฐ์ ์ ํ์ฉํ์๊ณ , LLM์ ํ์ฉํ์ฌ ์ง๋ฌธ ์์ฑ ๋ฐ ๋ฐ์ดํฐ ์ด์์น ์ฒ๋ฆฌ ๋ฑ์ ์คํ์ ์ํํ์์ต๋๋ค. ์คํ ๊ณผ์ ์์ ์ง๋ฌธ ์์ฑ์ ํ์ง์ด ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ํ์ธํ์์ผ๋ฉฐ, ์ถํ ๊ฐ์ ์ ์ํ ๋ค์ํ ์ ๊ทผ ๋ฐฉ์์ ๋์ถํ์์ต๋๋ค.
ํ์ Retrieval๊ณผ Reader๋ก ๋๋์ด ๊ฐ ํ์ ์ญํ ์ ๋ช ํํ ํ์๊ณ , GitHub๋ฅผ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ์ฌ ํ์ ํ์์ต๋๋ค. GitHub flow ๋ฐฉ์์ ์ฑํํ์ฌ ๊ฐ์์ ์์ ๋ด์ฉ์ ๊ธฐ๋ฅ ๋จ์๋ก ๋ถ๋ฆฌํ๊ณ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ํตํด ํ์ง์ ๊ด๋ฆฌํ์์ต๋๋ค.
ํ๋ก์ ํธ ํ๋ฐ๋ถ์ ์งํ๋ ํ๊ณ ๋ฅผ ํตํด ๊ฐ ํ์์ ์์ ์ด ๋งก์๋ ๋ถ๋ถ์ ๋ํ ์ฑ๊ณผ์ ๊ฐ์ ๋ฐฉ์์ ๊ณต์ ํ์์ผ๋ฉฐ, ํฅํ ํ๋ก์ ํธ์์ ์ ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ๋ก ๊ณผ ํจ์จ์ ์ธ ํ์ ๋ฐฉ์์ ๋์ถํ์์ต๋๋ค.
์ต์ข ๋ฆฌ๋๋ณด๋์์ EM ๋ฐ F1 ์ ์ ๊ธฐ์ค์ผ๋ก ๋ชจ๋ธ์ ์ฑ๋ฅ์ ํ๊ฐํ์์ผ๋ฉฐ, Sparse Embedding์ ํ์ฉํ Retrieval ๋จ๊ณ๊ฐ ์ต์ข ์ ์ผ๋ก ๋์ ์ฑ๋ฅ์ ๋ณด์์ต๋๋ค. ๋ํ, ํ์ ํ์ ๊ฒฝํ๊ณผ ์ฝ๋ ๋ฆฌํฉํ ๋ง์ ํตํด ์ป์ ์ฑ๊ณผ๋ค์ ๋ฐํ์ผ๋ก ํ๋ก์ ํธ ์ ๋ฐ์ ๊ฑธ์น ์ฑ๊ณผ๋ฅผ ๋ถ์ํ๊ณ , ํฅํ ๊ฐ์ ํ ๋ถ๋ถ์ ๋์ถํ์์ต๋๋ค.
Public | Private | |
---|---|---|
EM | 45.4200% | 58.3500% |
F1 | 46.3900% | 56.9700% |
์ต์ข ๋ฑ์ | 16๋ฑ | 16๋ฑ |
- main.py๋ฅผ ์ฌ์ฉํ์ฌ ์คํ.
python main.py
- ์ด๋ ๋ฐ์ดํฐ ์ ๊ณผ ํ์ต๋ชจ๋ธ, ์ถ๋ก ํ์ผ์ ์ถ๋ ฅ ๊ฒฝ๋ก๋ 'src/config/path_config.py'์ ์ ์ฅ๋์ด ์๋ค.
data_path = "./data/"
wiki_path = "./data/filtered_wiki.json"
train_data = "./data/train_dataset"
test_data = "./data/test_dataset"
outputs = "./outputs"
- ๋ํ 'src/utils/arguments.py'์ model_args.model_name_or_path๋ฅผ ์์ ํด ํ์ต์ ์ฌ์ฉ๋๋ ๋ชจ๋ธ์ ์์ ํ ์ ์์ผ๋ฉฐ, training_args๋ฅผ ์์ ํด ํ์ดํผํ๋ผ๋ฏธํฐ๋ฅผ ์กฐ์ ๊ฐ๋ฅํ๋ค.
- ํ๊ฐ/์ถ๋ก ๊ฒฐ๊ณผ๋ OUTPUT_PATH์ ์ ์ฅ๋๋ค.
๋ณธ ํ๋ก์ ํธ์์ ์ฌ์ฉ๋ ์ฃผ์ ๊ธฐ์ ๊ณผ ๋๊ตฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Python: ํ๋ก์ ํธ์ ์ฃผ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก, ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐ ๋ชจ๋ธ ๊ตฌํ์ ํ์ฉ.
- Hugging Face Transformers: ๋ค์ํ NLP ๋ชจ๋ธ์ ํ์ต ๋ฐ ์ถ๋ก ์ ์ํ ํ๋ ์์ํฌ. Reader ๋ชจ๋ธ ๊ตฌํ์ ์ฌ์ฉ.
- Scikit-learn: Sparse Embedding ๋ฐ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ ์คํ์์ ์ฌ์ฉ๋ ํ์ด์ฌ ๋จธ์ ๋ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
- PyTorch: Dense Embedding ๋ชจ๋ธ์ ํ์ต ๋ฐ ํ๋์ ์ํ ์ฃผ์ ๋ฅ๋ฌ๋ ํ๋ ์์ํฌ.
- LangChain & Ollama: LLM์ ํ์ฉํ ๋ฐ์ดํฐ ์ด์์น ํ์ง ๋ฐ ์ง๋ฌธ ์์ฑ ์คํ์ ์ฌ์ฉ.
- Jupyter Notebook: EDA, ๋ฐ์ดํฐ ๋ถ์, ์คํ ๊ฒฐ๊ณผ ์๊ฐํ์ ํ์ฉ.
- GitHub: ์ฝ๋ ๋ฒ์ ๊ด๋ฆฌ ๋ฐ ํ์ . GitHub Flow๋ฅผ ํตํด ๊ธฐ๋ฅ ๋จ์๋ก ๋ธ๋์น๋ฅผ ๊ด๋ฆฌํ๊ณ , ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ์งํ.
- Notion: ํ ํ์๋ก, ์คํ ๊ฒฐ๊ณผ ๊ธฐ๋ก, ํ๋ก์ ํธ ์งํ ์ํฉ ๋ฌธ์ํ์ ์ฌ์ฉ.
- Slack & Zoom: ํ์ ๊ฐ์ ์ํํ ์ปค๋ฎค๋์ผ์ด์ ๋ฐ ํ์ ํ์ ๋๊ตฌ.
- pre-commit: ์ฝ๋ ํ์ง ์ ์ง์ ์๋ํ๋ ๊ฒ์ฌ๋ฅผ ์ํด ์ฌ์ฉ. ์ฝ๋ ์คํ์ผ ๊ฒ์ฌ, ํฌ๋งทํ , ์ ์ ๋ถ์ ๋ฑ์ Git ์ปค๋ฐ ๋จ๊ณ์์ ์คํํ์ฌ ์ผ๊ด์ฑ์ ์ ์ง.
- GPU (NVIDIA V100): Dense Embedding ๋ชจ๋ธ ํ์ต ๋ฐ Reader ๋ชจ๋ธ ํ๋์ ์ํด ์ฌ์ฉ.
- V100 ์๋ฒ: ์ฃผ๋ก ํ๋ จ๊ณผ ๋๊ท๋ชจ ์คํ์ ์ํํ๋ฉฐ, ์ ํ๋ ์์ ๋ด์์ ํจ์จ์ ์ธ ์์ ํ์ฉ์ ์ํ ๋ฐฐ์น ์คํ ์งํ.
- Python 3.8: ๋ชจ๋ ์ฝ๋ ๊ตฌํ์ ๊ธฐ๋ณธ ํ๊ฒฝ.
- PyTorch 1.10: Dense Embedding๊ณผ Reader ๋ชจ๋ธ ๊ตฌํ์ ์ฌ์ฉ.
- Hugging Face Datasets & Tokenizers: ๋ฐ์ดํฐ ๋ก๋ ๋ฐ ์ ์ฒ๋ฆฌ, ํ ํฌ๋์ด์ง ๋๊ตฌ.
ํ๋ก์ ํธ์ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ด ์ค๊ณ๋์์ต๋๋ค.
โโโ data_analysis
โ โโโ manual_data_analysis.ipynb
โ โโโ outlier_handling_with_LLM.ipynb
โโโ src
โ โโโ config
โ โ โโโ key_names.py
โ โ โโโ path_config.py
โ โ โโโ reader_configuration.py
โ โโโ main.py
โ โโโ reader
โ โ โโโ add_nouns.py
โ โ โโโ aug_korquad.py
โ โ โโโ LLM_reader.ipynb
โ โ โโโ data_controller
โ โ โ โโโ data_handler.py
โ โ โ โโโ data_processor.py
โ โ โ โโโ postprocess_qa.py
โ โ โโโ generate_q.py
โ โ โโโ model
โ โ โโโ huggingface_manager.py
โ โ โโโ reader.py
โ โ โโโ result_saver.py
โ โ โโโ trainer_manager.py
โ โ โโโ trainer_qa.py
โ โโโ retriever
โ โ โโโ embedding
โ โ โ โโโ bm25.py
โ โ โ โโโ sklearn_tfidf.py
โ โ โ โโโ sparse_embedding.py
โ โ โ โโโ tfidf.py
โ โ โโโ retrieval
โ โ โ โโโ dense_retrieval.py
โ โ โ โโโ sparse_retrieval.py
โ โ โโโ retriever.py
โ โ โโโ score
โ โ โ โโโ ranking.py
โ โ โ โโโ rerank.py
โ โ โโโ similarity
โ โ โโโ similarity.py
โ โโโ utils
โ โโโ argument_validator.py
โ โโโ arguments.py
โ โโโ context_into_articles.py
โ โโโ context_into_sentences.py
โ โโโ log
โ โ โโโ logger.py
โ โโโ monitoring
โ โ โโโ bert_visualizer.py
โ โ โโโ monitoring_tool.py
โ โโโ seed.py
โ โโโ timer.py
โ โโโ tokenizer_checker.py
โ โโโ tokenizer_validator.py
โโโ test
โโโ conftest.py
โโโ test_data_handler.py
โโโ test_data_postprocessor.py
โโโ test_data_preprocessor.py
โโโ test_model.py
๋ค์ํ Sparse ๋ฐ Dense Embedding ๊ธฐ๋ฒ์ ์ฑ๋ฅ ๋น๊ต ์คํ ๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ์ต๋๋ค.
Model | Top-K | context_in_retriever | Reverse Rank | Linear Score |
---|---|---|---|---|
BM25 (max_feature=200K) | 10 | 0.82490 | 0.47262 | 0.74090 |
TF-IDF (max_feature=100K) | 5 | 0.67055 | 0.33891 | 0.57221 |
Dense Embedding (BERT) | 10 | 0.19680 | - | - |
์ ํ๋ ์ฃผ์ ์คํ ๊ฒฐ๊ณผ์ ์์ฝ๋ณธ์ด๋ฉฐ, ๊ฐ ์คํ์ ํ๋ผ๋ฏธํฐ ์ค์ ๊ณผ ๊ฒฐ๊ณผ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ํตํด ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ์์ต๋๋ค. ์ด๋ฅผ ํตํด Sparse Embedding์ ์ฐ์ํ ์ฑ๋ฅ์ ๋ฐํ์ผ๋ก ์ต์ข ๋ชจ๋ธ์ BM25 ๊ธฐ๋ฐ์ Retrieval ์์คํ ์ ์ฑํํ์์ต๋๋ค.
Reader ๋ชจ๋ธ์ ์ฑ๋ฅ์ ์ฌ๋ฌ pre-trained ๋ชจ๋ธ๊ณผ์ ๋น๊ต๋ฅผ ํตํด ์ต์ ์ ๋ชจ๋ธ์ ์ ์ ํ์์ต๋๋ค.
Pre-trained Model | EM Score | F1 Score |
---|---|---|
klue/roberta-base | 62.5 | 71.1069 |
monologg/koelectra-base-v3 | 61.25 | 69.2452 |
microsoft/deberta-v3-base | 46.25 | 54.1471 |
klue/bert-base | 53.75 | 62.3042 |
์ต์ข
์ ์ผ๋ก klue/roberta-base
๋ชจ๋ธ์ด ์ต์ ์ ์ฑ๋ฅ์ ๋ณด์ฌ์ฃผ์์ผ๋ฉฐ, ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ถ๊ฐ์ ์ธ ํ์ดํผํ๋ผ๋ฏธํฐ ํ๋์ ์งํํ์์ต๋๋ค.
- BM25 ์๊ณ ๋ฆฌ์ฆ: Stephen E. Robertson, Karen Sparck Jones, "Relevance weighting of search terms," Journal of the American Society for Information Science, 1976.
- Dense Passage Retrieval: Vladimir Karpukhin et al., "Dense Passage Retrieval for Open-Domain Question Answering," arXiv, 2020.
- BERT: Jacob Devlin et al., "BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding," arXiv, 2019.
- Hugging Face Documentation: Hugging Face Docs
- LangChain: LangChain Official Website
๋ณธ Appendix๋ ํ๋ก์ ํธ์ ์ ๋ฐ์ ์ธ ๊ตฌ์ฑ, ์คํ ํ๊ฒฝ, ๊ธฐ์ ์คํ, ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ ๊ด๋ฆฌ ๋ฐฉ์์ ์ดํดํ๋ ๋ฐ ๋์์ ์ฃผ๊ธฐ ์ํด ์์ฑ๋์์ต๋๋ค. ๊ฐ ์์๋ ์คํ์ ์ฌํ ๊ฐ๋ฅ์ฑ์ ๋์ด๊ณ , ํฅํ ํ๋ก์ ํธ์์ ์ฐธ์กฐํ ์ ์๋๋ก ์ฒด๊ณ์ ์ผ๋ก ๊ธฐ๋กํ์์ต๋๋ค.