Skip to content

Commit cbeea06

Browse files
authored
fix: unk token for unigrams (#354)
1 parent 4f537d5 commit cbeea06

1 file changed

Lines changed: 15 additions & 5 deletions

File tree

‎model2vec/model.py‎

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import annotations
22

3+
import json
34
import math
45
import os
56
import warnings
@@ -67,11 +68,7 @@ def __init__(
6768
self.token_mapping: np.ndarray | None = token_mapping
6869

6970
self.tokenizer = tokenizer
70-
self.unk_token_id: int | None
71-
if hasattr(self.tokenizer.model, "unk_token") and self.tokenizer.model.unk_token is not None:
72-
self.unk_token_id = tokenizer.get_vocab()[self.tokenizer.model.unk_token]
73-
else:
74-
self.unk_token_id = None # pragma: no cover # Doesn't actually happen, but can happen.
71+
self.unk_token_id = _get_unk_token_id(self.tokenizer)
7572

7673
self.median_token_length = int(np.median([len(token) for token in self.tokens]))
7774
self.config = config or {}
@@ -559,3 +556,16 @@ def _loading_helper(
559556
quantize_to=quantize_to,
560557
dimensionality=dimensionality,
561558
)
559+
560+
561+
def _get_unk_token_id(tokenizer: Tokenizer) -> int | None:
562+
"""Get the unk token id."""
563+
model = tokenizer.model
564+
# Wordpiece + BPE + Word level
565+
if hasattr(model, "unk_token"):
566+
token = model.unk_token
567+
if token is None:
568+
return None
569+
return tokenizer.token_to_id(token)
570+
# Unigram
571+
return json.loads(tokenizer.to_str())["model"].get("unk_id")

0 commit comments

Comments
 (0)