๋ณธ ๋ํ์ ๋ชฉํ๋ STS ๋ฐ์ดํฐ ์ ์ ํ์ฉํด ๋ ๋ฌธ์ฅ์ ์ ์ฌ๋๋ฅผ ์ธก์ ํ๋ AI ๋ชจ๋ธ์ ๊ตฌ์ถํ๋ ๊ฒ์ผ๋ก, [๋ ๊ฐ์ ๋ฌธ์ฅ๊ณผ ID, ์ ์ฌ๋ ์ ๋ณด๊ฐ ๋ด๊ธด CSV]๋ฅผ ์ ๋ ฅ๋ฐ์ [๋ฌธ์ฅ ์์ ๋ํ ID, ์ ์ฌ๋ ์ ์๊ฐ ๋ด๊ธด CSV]๋ฅผ ์ถ๋ ฅํ์ฌ ํผ์ด์จ ์๊ด๊ณ์๋ฅผ ํตํด ํ๊ฐํ๋ค.
STS๋ ๋ฌธ์ฅ ๊ฐ์ ์๋ฏธ์ ์ ์ฌ์ฑ์ ํ๋จํ๋ ๊ธฐ์ ๋ก, ๋ค์ํ ์์ฉ ๋ถ์ผ์์ ์ค์ํ ์ญํ ์ ํ๋ค. ์๋ฅผ ๋ค์ด, โ๊ฒฐ์ ๋ ์ด๋์์ ํ๋์?โ์ โ๊ณ์ฐํ๋ ๊ณณ์ ์ด๋์ธ๊ฐ์?โ์ ๊ฐ์ด ์๋ก ๋ค๋ฅด๊ฒ ํํ๋์์ง๋ง ๊ฐ์ ์๋ฏธ๋ฅผ ๋ด๊ณ ์๋ ๋ฌธ์ฅ๋ค์ ์๋ณํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ์ด๋ฅผ ํตํด ์ง๋ฌธ-๋ต๋ณ ์์คํ , ๋ฌธ์ฅ ์์ฝ, ์ฑ๋ด์ ์ง๋ฌธ ์ ์, ์ค๋ณต ๋ฌธ์ฅ ํ์ง ๋ฑ ๋ค์ํ ์ค์ ์ํฉ์ ์ ์ฉํ ์ ์๋ ๋ฅ๋ ฅ์ ํค์ธ ์ ์๋ค. ํ๋ก์ ํธ์ ๋ชฉํ๋ STS ๋ฐ์ดํฐ์ ์ ํ์ฉํด ๋ ๋ฌธ์ฅ์ ์ ์ฌ๋๋ฅผ ์ธก์ ํ๋ AI ๋ชจ๋ธ์ ๊ตฌ์ถํ์ฌ, 0~5 ์ฌ์ด์ ์ ์ฌ๋ ์ ์ ์์ธก์ ์งํํ๋ค.
์ด์ง์ธ | ๊ตฌ๋ค์ฐ | ์ค์์ข | ์ด๋ฏผ์ | ์ดํํจ | ์ฅ์์ |
---|---|---|---|---|---|
์ฑ๋ช | ์ญํ |
---|---|
์ด์ง์ธ | ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ - EDA(Easy Data Augmentation), Back Translation |
๊ตฌ๋ค์ฐ | GitHub ์ฐ๊ฒฐ, ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ aggregation, ์ ํฉํ ๋ชจ๋ธ ํ์ ๋ฐ ์ ์ฉ |
์ค์์ข | ๋ฐ์ดํฐ ๋ถ์, ๋ชจ๋ธ Ensemble, ์ ํฉํ ๋ชจ๋ธ ํ์ ๋ฐ ์ ์ฉ |
์ด๋ฏผ์ | Loss function ์ ํฉ๋ ํ๋จ, ์ ํฉํ ๋ชจ๋ธ ํ์ ๋ฐ ์ ์ฉ |
์ดํํจ | ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ - ๋ง์ถค๋ฒ ๊ต์ ๋ฐ ๋ฌธ์ฅ ๋ค๋ฌ๊ธฐ, Optimizer๋ณ ๋ชจ๋ธ ์คํ ๋ฐ ๋น๊ต ๋ถ์ |
์ฅ์์ | ํ๋ก์ ํธ ๊ธฐ์ด ์ค์ , Wandb ๋์ , ์ ํฉํ ๋ชจ๋ธ ํ์ ๋ฐ ์ ์ฉ |
- ํ ๊ตฌ์ฑ ๋ฐ ์ปดํจํ
ํ๊ฒฝ
- 6์ธ 1ํ, ์ธ๋น V100 ์๋ฒ๋ฅผ VSCode์ SSH๋ก ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉ
- ํ์ ํ๊ฒฝ
- ์์ฌ์ํต
- ๋ฒ์ ์ ๋ณด
- transformers==4.35.2 pytorch-lightning==2.1.2 pandas==2.1.3 wandb deep-translator==1.11.4
๋ฐ์ดํฐ | ์ฌ์ฉ ๋ฐ์ดํฐ์ | ๋ชฉ์ | ๊ตฌ์ฑ |
---|---|---|---|
ํ์ต ๋ฐ์ดํฐ | ํ๋ จ ๋ฐ์ดํฐ(train.csv) ๋ฐ ๊ฒ์ฆ ๋ฐ์ดํฐ(dev.csv) | ํ์ต ๋ฐ์ดํฐ์ ์ ๊ธฐ๋ฐํ ๋ชจ๋ธ(model.pt) ์์ฑ | ์์ธ(index) ๋ฌธ์ฅ ์ถ์ฒ(source) ๋น๊ตํ ๋ฌธ์ฅ(sentence_1, sentence_2) 0.0~5.0๊น์ง์ ์ฐ๊ด๋(label) ์ฐ๊ด๋๋ฅผ binaryํ๊ฒ ๋ํ๋ธ ๊ฐ(binary_level) |
ํ๊ฐ ๋ฐ์ดํฐ | ํ๊ฐ ๋ฐ์ดํฐ(test.csv) | ํ์ต ๋ฐ์ดํฐ ๋ฐ ๋ชจ๋ธ์ ๊ธฐ๋ฐํ ๋ ๋ฌธ์ฅ ๊ฐ ์ฐ๊ด๋(label) ์์ธก | ์์ธ(index) ๋ฌธ์ฅ ์ถ์ฒ(source) ๋น๊ตํ ๋ฌธ์ฅ(sentence_1, sentence_2) |
.
|-- README.md
|-- code
| |-- __pycache__
| |-- inference.py
| |-- lightning_logs
| |-- model
| |-- requirements.txt
| |-- train.py
| `-- wandb
|-- config
| |-- config.py
| `-- config.yaml
|-- data
| |-- dev.csv
| |-- output
| |-- sample_submission.csv
| |-- test.csv
| `-- train.csv
`-- data_preprocessing
|-- __pycache__
|-- back_translation.py
|-- down_sampling.py
|-- eda.py
|-- grammar_check.py
|-- main.py
`-- wordnet.pickle
- ๋ค์ด๋ฒ ๋ง์ถค๋ฒ ๊ฒ์ฌ๊ธฐ๊ฐ ์
๋ฐ์ดํธ๋์ด ํจํค์ง ์ฐจ์์์
passportKey
์callback
๋ณ์๋ฅผ ์ ๊ณตํด์ผ ํ์ง๋ง, py-hanspell ํจํค์ง๊ฐ ์ ๋ฐ์ดํธ๋์ง ์์ ๋ฐ์ํ ๋ฌธ์
-
.../lib/python3.10/site-packages/hanspell/spell_checker.py
๋ถ๋ถ์Ctrl
+ ํด๋ฆญํ์ฌ ํจํค์ง ํ์ผ ๋ค์ด๊ฐ๊ธฐ -
๋ค์ด๋ฒ ๋ง์ถค๋ฒ ๊ฒ์ฌ๊ธฐ์์
passportKey
,_callback
๋ณ์๊ฐ์ copyํ๊ธฐ -
spell_checker.py
ํจํค์ง ํ์ผ ์์ ํ๊ธฐ- ๊ฐ๋ฐ์ ํด์ ์ง์ํ๋ ๋ธ๋ผ์ฐ์ (์: Chrome)๋ก ๋ค์ด๋ฒ ๋ง์ถค๋ฒ ๊ฒ์ฌ๊ธฐ ๋งํฌ์ ์ ์ํ ํ
F12
๋ฒํผ ๋๋ฌ ๊ฐ๋ฐ์ ํด ๋ค์ด๊ฐ๊ธฐ - ๊ฐ๋ฐ์ ํด์์
Network
์ฑ๋ ๋ฒํผ ํด๋ฆญํ๊ธฐ - ๋ง์ถค๋ฒ ๊ฒ์ฌ๊ธฐ์ ์๋ฌด ๋ฌธ๊ตฌ๋ฅผ ๋ฃ๊ณ
Network
์ฑ๋ ์ฐฝ์ "spell" ๊ฒ์ํ๊ธฐ SpellerProxy?โฆ
๋ณ์๋ฅผ ํด๋ฆญํ์ฌHeader
์ฑ๋์RequestURL
๋ณ์๋ฅผ ํ์ธํ๊ธฐRequestURL
๋ณ์์์passportKey
๋ฐ_callback
๋ณ์๊ฐ์ ๋ณต์ฌํ๊ธฐ ์ฌ๊ธฐ์๋passportKey=db951c57dce59ab5bda4148db8a11fe7e1277e6a
,_callback=jQuery112407861628390335917_1702639286516
๋ผ ๋์ด.spell_checker.py
๋ก ๋์๊ฐ ์๋์ ๊ฐ์ด ์์ ํ๊ธฐ- ์์ ์
... data = json.loads(r.text) ... payload = {'q': text, 'color_blindness': '0' } ...
- ์์ ํ
... import re json_data = re.search(r'\((.*)\)', r.text).group(1) data = json.loads(json_data) ... payload = {'passportKey': 'curl๊ฐ copyํ๊ธฐ', '_callback': 'curl๊ฐ copyํ๊ธฐ', 'q': text, 'color_blindness': '0' } ...
- ์์ ์
- ๊ฐ๋ฐ์ ํด์ ์ง์ํ๋ ๋ธ๋ผ์ฐ์ (์: Chrome)๋ก ๋ค์ด๋ฒ ๋ง์ถค๋ฒ ๊ฒ์ฌ๊ธฐ ๋งํฌ์ ์ ์ํ ํ