๋ฐ์ง์ฌ CustomerNER
Contents
๋ฐ์ง์ฌ CustomerNERยถ
ํ๋ก์ ํธ ๊ฒฐ๊ณผ
1. ๋ฐ์ดํฐ์ ์์งยถ
์ ์ ์ํ์นผ๋ผ - ํฌ๋กค๋ง - ์๋ฃ
๊ฐ์ธ ์์ธ์ด ๊ธ
ํ ์คํธ๋ฅผ ์ํ 1๊ฑด ์์ง - ์๋ฃ
๋ ธ์ api ํ์ธ์ ํตํ ๋ค์ ์์ง - ์งํ์
ํ๊ตญ์ด ๋ง๋ญ์น - [x] ๊ฐ์ฑ ๋ญ์น ๋ฐ์ดํฐ - ๋ชฉ์ : ๋ฌธ์ฅ๊ณผ ๊ด๋ จ ๊ฐ์ ์ ํ์ตํ๊ธฐ ์ํ ์๋ฃ ์์ง - feature : HS~ ๋ก ์์๋๋ ๋ฌธ์ฅ ๋ฆฌ์คํธ - label : [โemotionโ][โtypeโ] ์ ๊ฐ
```jsx
{'profile': {'persona-id': 'Pro_03807',
'persona': {'persona-id': 'A02_G01_C01',
'human': ['A02', 'G01'],
'computer': ['C01']},
'emotion': {'emotion-id': 'S06_D02_E36',
'type': 'E36',
'situation': ['S06', 'D02']}},
'talk': {'id': {'profile-id': 'Pro_03807', 'talk-id': 'Pro_03807_00028'},
'content': {'HS01': '์ทจ์
์ ํ๋ค ํด๋ ๊ณผ์ฐ ์์ ์ ์ผ๋ก ๋์ ๋ฒ ์ ์์์ง ํ์๊ฐ์ด ๋ค์ด.',
'SS01': '์์ ์ ์ผ๋ก ๋์ ๋ฒ ์ ์์์ง ํ์๊ฐ์ด ๋๋๊ตฐ์. ์ด๋ค ์ ์์ ํ์๊ฐ์ด ๋์
จ๋์?',
'HS02': '๋ด๊ฐ ๋จ๋ค๋ณด๋ค ์ฌํ์ฑ์ด ์ข ๋จ์ด์ง๋ ๊ฒ ๊ฐ์.',
'SS02': '์ฌํ์ฑ์ด ๋ถ์กฑํ๋ค๊ณ ๋๋ผ์๋๊ตฐ์. ์ด๋ค ์ผ์ ํ๋ฉด ์ฌ์ฉ์๋์ด ๋ ํธ์ํ๊ฒ ํ ์ ์์๊น์?',
'HS03': '๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ๊ฐ์ดํ๋ ์ผ๋ณด๋ค๋ ํผ์์ ํ๋ ์ผ์ด ๋ ์ข์.',
'SS03': 'ํผ์์ ์งํํ ์ ์๋ ์ผ์ ๋ ์ ํธํ์๋๊ตฐ์.'}}},
{'profile': {'persona-id': 'Pro_03808',
'persona': {'persona-id': 'A02_G01_C01',
'human': ['A02', 'G01'],
'computer': ['C01']},
'emotion': {'emotion-id': 'S06_D02_E37',
'type': 'E37',
'situation': ['S06', 'D02']}},
'talk': {'id': {'profile-id': 'Pro_03808', 'talk-id': 'Pro_03808_00038'},
'content': {'HS01': '์ด๋ฒ ํ๋ ์ ํ
์ด์
๋ ๋ค๋ฅธ ๋ถ์๋ณด๋ค ๋ถ์งํ ๊ฒ ๊ฐ์ ๋ถ์ํด.',
'SS01': '์ด๋ฒ ํ๋ ์ ํ
์ด์
๋ ๋ถ์งํ ๊น ๋ด ๊ฑฑ์ ์ด๊ตฐ์. ์ด๋ค ์ ์์ ํนํ ๋ถ์ํ๊ฒ ๋๋ผ๋์?',
'HS02': 'ํ๋ ์ ํ
์ด์
๋ด์ฉ์ด ๋น์ฝํ ๊ฒ ๊ฐ์์ ๊ฑฑ์ ์ด์ผ.',
'SS02': '๋ฐํ ๋ด์ฉ์ด ๋น์ฝํ ๊น ๋ด ๊ฑฑ์ ์ค๋ฌ์ํ๋๊ตฐ์. ์ด๋ป๊ฒ ํ๋ฉด ๋ด์ฉ์ ๋ ๋ฐ์ ์ํฌ ์ ์์๊น์?',
'HS03': 'ํ์๋ค๊ณผ ํ ๋ฒ ๋ ํ์๋ฅผ ํด๋ด์ผ๊ฒ ์ด.',
'SS03': 'ํ์๋ค๊ณผ ํ์๋ฅผ ํ ๋ฒ ๋ ๊ฐ์ง ๊ณํ์ด๊ตฐ์.'}}},
```
2. ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌยถ
- ํ์ ๋ฐ์ดํฐ ์
ํํ
- ์์
- [https://github.com/kmounlp/NER/blob/master/๋ง๋ญ์น - ํํ์_๊ฐ์ฒด๋ช
/00002_NER.txt#L7](https://github.com/kmounlp/NER/blob/master/%EB%A7%90%EB%AD%89%EC%B9%98%20-%20%ED%98%95%ED%83%9C%EC%86%8C_%EA%B0%9C%EC%B2%B4%EB%AA%85/00002_NER.txt#L7)

- ์งํํ๊ณ ์ ํ๋ ์ ์ฒ๋ฆฌ
- ์ด๋ฒ ํ๋ ์ ํ
์ด์
๋ ๋ถ์งํ ๊น ๋ด ๊ฑฑ์ ์ด๊ตฐ์
```python
์ด๋ฒ O
ํ๋ ์ ํ
์ด์
๋ B-๊ฑฑ์
๋ถ์งํ ๊น O
๋ด O
๊ฑฑ์ ์ด๊ตฐ์ B-๊ฑฑ์
```
- ๊ฐ ๋ฌธ์ฅ๋ณ ๊ฐ์ ๊ณผ, ๋ฌธ์ฅ ๋ด โํ๊น
๋์โ๊ณผ ๋งค์นญ
- ๋ฌธ์ฅ๋ณ ๊ฐ์ : ๊ฐ์ ๋ผ๋ฒจ๋ง์ผ๋ก ์งํ
- ๋ฌธ์ฅ ๋ด ํ๊น
๋์ ์ ์ :
- ๋ฌธ์ฅ โ๋์ฌ(ROOT)โ ์ dependency parsing ์ ํ ๋ ์ฐ๊ฒฐ๋ ๋จ์ด ์ค'nsubj', 'obj','csubj','nmodโ, โcompoundโ ๋ง ์์ง
```python
{0: {'ํ๋ฅธ๋ค': ['๋์ด']},
1: {'ํ๋ฅด๊ณ ': ['์ค๊ธฐ๋ฅผ', '๋์ด', '๊ฐ์ด์', '๋ช
์น๋ฅผ', '์ง๋๊ณ ']},
2: {'ํ๊ณ ': ['์ ํ๊ธฐ๋ฅผ', '์ฐพ๊ธฐ']},
3: {'ํ์ง ์๋๋ค': ['ํธ๋ ์ ํ๊ธฐ๋', '๊ณต๊ฐ์']},
4: {'ํ์ง ์๋๋ค': ['์ฌ์ด์ฆ์', '์ถฉ์ ๊ตฌ๋ฉ์', '๊ตฌ๋ฉ์', '์ ์']},
5: {'๋ณธ๋ค': ['์ ํ๊ธฐ๋ฅผ', '์ ๋ค']},
6: {'๋์๊ฐ๋์ง': ['๋ฒํผ์', '์ฐ์ ๋ฒ', 'ํฌ์ด']},
7: {'๋ค์ด์ค๋์ง': ['๋นจ๊ฐ๋ถ์ด']},
```
3. ๋ชจ๋ธ๋งยถ
3-1. ๊ฐ์ฑ ๋ถ๋ฅ ๋ชจ๋ธยถ
- [**1์ฐจ]** 1๋ฒ ๋ฐ์ดํฐ๋ก 60๊ฐ ๋ผ๋ฒจ ๋ค์ค ๋ถ๋ฅ
```python
model_name = 'bert-base-multilingual-cased'
optimizer = optim.AdamW(model.parameters(), lr=0.001)
criterion = nn.CrossEntropyLoss()
model = model.to(device)
with tqdm(range(4)) as pbar:
for e in pbar:
loss_list = []
for batch in dl_train:
batch = {k : v.to(device) for k, v in batch.items()}
optimizer.zero_grad()
output = model(**batch)
loss = output.loss
loss_list.append(loss.item())
loss.backward()
optimizer.step()
pbar.set_postfix(avg_loss= np.mean(loss_list))
model.save_pretrained(f'../content/drive/MyDrive/2023/korean_data/model/sentimetal_classification_epoch{e}/')
```
- ๊ฒฐ๊ณผ : ์๋ ด์ด ๋์ง ์์ ํ์ต ์คํจ (4.11 ์์ค์ ์๋ ด)
- **[2์ฐจ]** NSMC ํ์ต๋ ๋ชจ๋ธ๋ก ๊ธ, ๋ถ์ ์ถ๋ก
```python
tokenizer = AutoTokenizer.from_pretrained("daekeun-ml/koelectra-small-v3-nsmc")
```
- ๊ฒฐ๊ณผ : ์ฌ์ ํ์ต๋ ๋ชจ๋ธ์ ๊ฒฝ์ฐ, ์๋์ ๊ฐ์ด ํ์
- ๋์ผ๋ก ์๋ณํ ๋ pos / neg ๊ฐ ์๋ ์ค๋ฆฝ์ ๋ฌธ์ฅ ํ์ธ
- ์ค๋ฆฝ์ผ๋ก ํ์ ๋์ด์ผ ํ (์์) ๋ฌธ์ฅ๋ค์ ์ค์ฝ์ด๋ ๋ฎ์ ์ํ

3-2. NER ํ๊ทธ ๋ชจ๋ธ
- Spacy ์ฌ์ฉ
- ๊ฒฐ๊ณผ : ์์ธ์ด์ ์ ์ฉํด๋ณผ ๋งํผ์ ๋จ์ด ๋ฆฌ์คํธ๋ ๋ถ์กฑํจ
- ํ๊ตญ์ด ๋ง๋ญ์น ๋ฑ์ ํ์ฉํ์ฌ entity ๊ฐ ํ๊น
๋ ๋์์ ์๋ฅผ ๋๋ ค์ผ ํ๋ค๋ ํ๋จ
```python
ํ ์ค 26 29 QT
ํ๋ฒ 24 26 QT
๋ ๋ฒ 35 38 QT
์ฃผ๋ง์ 11 14 DT
์ค๋ 0 2 DT
ํ๋ฃจ๋ 3 6 DT
์ฌ๋ฆ์ 23 26 DT
๋ด๋
์ 4 7 DT
```
- **Pytorch-BERT-CRF-NER ๋ฌธ์ ํ์ต**
- ๋งํฌ : https://github.com/eagle705/pytorch-bert-crf-ner
- (์งํ์ค)
4. (ํ์ฌ๊น์ง์ ) ๊ฒฐ๊ณผ :ยถ
- NER ์ ๋ฃ์ ์ ์๋ ์ด๊ธฐ ๋ฐ์ดํฐ์
๊ตฌ์ถ

- ์ฐธ๊ณ ์๋ฃ ๋ฐ์ดํฐ์
๊ณผ ๊ฐ์ ํํ๋ก ๋ณ๊ฒฝ

5. ํ์์์ ยถ
- 60๊ฐ ๊ฐ์ ๋ค์ค ๋ถ๋ฅ ๋ชจ๋ธ ํ์ต ํ ๋ฌธ์ฅ ๋ณ ์ถ๋ก
- ์ ์ 1๋ช
์ ์์ธ์ด ๊ธ ์ ์ฒด๋ฅผ ์์งํ์ฌ, ๋ฐ์ดํฐ์
๋ณ ๊ฐ์ ๋ฐ์ดํฐ์
์ผ๋ก ํ์ธํ๋