Update README.md
Browse files
README.md
CHANGED
|
@@ -13,6 +13,56 @@ tags:
|
|
| 13 |
- **vocab: 152,537개**(기존 bert 모델 vocab(119,548개)에 32,989개 vocab 추가)
|
| 14 |
|
| 15 |
## Usage (HuggingFace Transformers)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
- 평균 폴링(mean_pooling) 방식 사용. ([cls 폴링](https://huggingface.co/sentence-transformers/bert-base-nli-cls-token), [max 폴링](https://huggingface.co/sentence-transformers/bert-base-nli-max-tokens))
|
| 17 |
|
| 18 |
```python
|
|
@@ -54,7 +104,10 @@ cosine_scores = 1 - (paired_cosine_distances(sentence_embeddings[0].reshape(1,-1
|
|
| 54 |
|
| 55 |
print(f'*cosine_score:{cosine_scores[0]}')
|
| 56 |
```
|
| 57 |
-
|
|
|
|
|
|
|
|
|
|
| 58 |
## Training
|
| 59 |
|
| 60 |
**MLM(Masked Langeuage Model) 훈련**
|
|
|
|
| 13 |
- **vocab: 152,537개**(기존 bert 모델 vocab(119,548개)에 32,989개 vocab 추가)
|
| 14 |
|
| 15 |
## Usage (HuggingFace Transformers)
|
| 16 |
+
|
| 17 |
+
### 1. MASK 예시
|
| 18 |
+
```python
|
| 19 |
+
from transformers import AutoTokenizer, AutoModel, BertForMaskedLM
|
| 20 |
+
import torch
|
| 21 |
+
import torch.nn.functional as F
|
| 22 |
+
|
| 23 |
+
tokenizer = AutoTokenizer.from_pretrained('bongsoo/mbertV2.0', do_lower_case=False)
|
| 24 |
+
model = BertForMaskedLM.from_pretrained('bongsoo/mbertV2.0')
|
| 25 |
+
|
| 26 |
+
text = ['한국의 수도는 [MASK] 이다', '에펠탑은 [MASK]에 있다', '충무공 이순신은 [MASK]에 최고의 장수였다']
|
| 27 |
+
tokenized_input = tokenizer(text, max_length=128, truncation=True, padding='max_length', return_tensors='pt')
|
| 28 |
+
|
| 29 |
+
outputs = model(**tokenized_input)
|
| 30 |
+
logits = outputs.logits
|
| 31 |
+
|
| 32 |
+
mask_idx_list = []
|
| 33 |
+
for tokens in tokenized_input['input_ids'].tolist():
|
| 34 |
+
token_str = [tokenizer.convert_ids_to_tokens(s) for s in tokens]
|
| 35 |
+
|
| 36 |
+
# **위 token_str리스트에서 [MASK] 인덱스를 구함
|
| 37 |
+
# => **해당 [MASK] 안덱스 값 mask_idx 에서는 아래 출력하는데 사용됨
|
| 38 |
+
mask_idx = token_str.index('[MASK]')
|
| 39 |
+
mask_idx_list.append(mask_idx)
|
| 40 |
+
|
| 41 |
+
for idx, mask_idx in enumerate(mask_idx_list):
|
| 42 |
+
|
| 43 |
+
logits_pred=torch.argmax(F.softmax(logits[idx]), dim=1)
|
| 44 |
+
mask_logits_idx = int(logits_pred[mask_idx])
|
| 45 |
+
# [MASK]에 해당하는 token 구함
|
| 46 |
+
mask_logits_token = tokenizer.convert_ids_to_tokens(mask_logits_idx)
|
| 47 |
+
# 결과 출력
|
| 48 |
+
print('\n')
|
| 49 |
+
print('*Input: {}'.format(text[idx]))
|
| 50 |
+
print('*[MASK] : {} ({})'.format(mask_logits_token, mask_logits_idx))
|
| 51 |
+
```
|
| 52 |
+
- 결과
|
| 53 |
+
```
|
| 54 |
+
*Input: 한국의 수도는 [MASK] 이다
|
| 55 |
+
*[MASK] : 서울 (48253)
|
| 56 |
+
|
| 57 |
+
|
| 58 |
+
*Input: 에펠탑은 [MASK]에 있다
|
| 59 |
+
*[MASK] : 런던 (120350)
|
| 60 |
+
|
| 61 |
+
|
| 62 |
+
*Input: 충무공 이순신은 [MASK]에 최고의 장수였다
|
| 63 |
+
*[MASK] : 조선 (59906)
|
| 64 |
+
```
|
| 65 |
+
### 2. 임베딩 예시
|
| 66 |
- 평균 폴링(mean_pooling) 방식 사용. ([cls 폴링](https://huggingface.co/sentence-transformers/bert-base-nli-cls-token), [max 폴링](https://huggingface.co/sentence-transformers/bert-base-nli-max-tokens))
|
| 67 |
|
| 68 |
```python
|
|
|
|
| 104 |
|
| 105 |
print(f'*cosine_score:{cosine_scores[0]}')
|
| 106 |
```
|
| 107 |
+
- 결과
|
| 108 |
+
```
|
| 109 |
+
*cosine_score:0.5596463680267334
|
| 110 |
+
```
|
| 111 |
## Training
|
| 112 |
|
| 113 |
**MLM(Masked Langeuage Model) 훈련**
|