You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Hugging Face Tokenizer识别UNK Token并批量提取语料未知词

提取预训练Tokenizer未识别的未知Token方法

针对你需要找出语料中所有不在预训练Tokenizer词汇表中的字符串(即被标记为UNK的内容),可以通过以下方式高效实现,以Hugging Face Transformers库的Tokenizer为例:

核心思路

利用Tokenizer的分词结果和偏移映射(offset mapping)功能,精准定位被标记为未知token(UNK)的原始文本片段,批量收集并去重。

代码实现

from transformers import AutoTokenizer

# 加载你的预训练Tokenizer,替换为实际模型名
tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")

def collect_unknown_tokens(corpus, tokenizer):
    unknown_strings = set()
    unk_token = tokenizer.unk_token

    for text in corpus:
        # 获取分词结果及每个token对应的原始文本偏移量
        encoding = tokenizer(text, return_offsets_mapping=True, truncation=False)
        tokens = encoding.tokens()
        offsets = encoding["offset_mapping"]

        # 遍历分词结果,找出所有UNK对应的原始文本片段
        for tok, (start, end) in zip(tokens, offsets):
            if tok == unk_token and start != end:  # 排除空偏移的情况
                unknown_str = text[start:end]
                unknown_strings.add(unknown_str)
    
    return unknown_strings

# 示例使用:假设corpus是你的语料列表
# corpus = ["示例文本1包含未登录词", "示例文本2包含另一个未登录词"]
# unknown_tokens = collect_unknown_tokens(corpus, tokenizer)

补充说明

  1. 去重与筛选:收集到的未知字符串会自动通过集合去重,你还可以根据出现频率进一步筛选(比如只保留出现次数≥5的token),避免添加过多低频token增加模型负担。
  2. 添加新token并调整模型:得到目标token后,可通过以下步骤添加到Tokenizer并更新模型embedding:
new_tokens = list(unknown_strings)
# 向Tokenizer添加新token
tokenizer.add_tokens(new_tokens)
# 调整预训练模型的embedding层大小(需对应你的模型)
from transformers import AutoModelForSequenceClassification
model = AutoModelForSequenceClassification.from_pretrained("bert-base-chinese")
model.resize_token_embeddings(len(tokenizer))
  1. 其他场景适配:如果你的Tokenizer不是基于Hugging Face的,核心逻辑依然通用——只需找到分词后标记为UNK的结果,再映射回原始文本片段即可。

内容的提问来源于stack exchange,提问作者jupyter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 11:06:37