【发布时间】:2023-01-13 12:47:59
【问题描述】:
据我了解,分词器所做的是,给定每个单词,只有当该词不在 tokeniser.get_vocab() 中时,分词器才会将该词分解为子词:
def checkModel(model):
tokenizer = AutoTokenizer.from_pretrained(model)
allList = []
for word in tokenizer.get_vocab():
word = word.lower()
tokens = tokenizer.tokenize(word)
try:
if word[0]!='#' and word[0]!='[' and tokens[0] != word:
allList.append((word, tokens))
print(word, tokens)
except:
continue
return allList
checkModel('bert-base-uncased')
# ideally should return an empty list
然而,我观察到的是,huggingface 上的一些模型会将单词分解成更小的部分,即使单词出现在词汇中也是如此。
checkModel('emilyalsentzer/Bio_ClinicalBERT')
output:
welles ['well', '##es']
lexington ['le', '##xing', '##ton']
palestinian ['pale', '##st', '##inian']
...
elisabeth ['el', '##isa', '##beth']
alexander ['ale', '##xa', '##nder']
appalachian ['app', '##ala', '##chia', '##n']
mitchell ['mit', '##chel', '##l']
...
4630 # tokens in vocab got broken down, not supposed to happen
我已经检查了这种行为的几个模型,想知道为什么会这样?
【问题讨论】:
标签: python python-3.x huggingface-transformers huggingface-tokenizers