AI/NLP
[SentenceTransformer] special token 추가하기
체봄
2022. 5. 24. 18:55
공식 문서에서 위 방법을 제시하고 있다.
나의 경우 내 개인모델을 사용중인데 위 방법대로 하면 토크나이징은 잘 되나 model.encode() 코드 부분에서 에러가 났다.
(에러 메시지: torch.nn.modules.module.ModuleAttributeError: 'Transformer' object has no attribute 'encode')
그래서 아래 방법을 사용했다.
from sentence_transformers import SentenceTransformer, models
model = SentenceTransformer("MY MODEL")
tokens = ["TOK1", "TOK2"]
word_embedding_model = model._first_module()
word_embedding_model.tokenizer.add_tokens(tokens, special_tokens=True)
word_embedding_model.auto_model.resize_token_embeddings(len(word_embedding_model.tokenizer))
pooling_model = models.Pooling(word_embedding_model.get_word_embedding_dimension())
model = SentenceTransformer(modules=[word_embedding_model, pooling_model])
Tokenize된 결과는 아래 코드로 확인할 수 있다.
text = "텍스트를 입력하세요."
model.tokenizer.convert_ids_to_tokens(model.tokenize([text])["input_ids"][0])
반응형