[nlp] tokenizer加速:fast_tokenizer=True

   fast_tokenizer 是一个布尔值参数,用于指定是否使用快速的 tokenizer。在某些情况下,使用快速的 tokenizer 可以加快模型训练和推理速度。如果 fast_tokenizer 参数为 True,则会使用快速的 tokenizer;否则,将使用默认的 tokenizer。

        快速的 tokenizer 通常使用一些技巧来减少 tokenization 过程中的计算量,以便更快地处理文本数据。其中一种常见的技巧是使用字典或哈希表来存储单词,而不是使用字符串。这样可以避免在字符串中搜索和替换子字符串的操作,从而提高 tokenization 的速度。

        另外,快速的 tokenizer 还可以使用一些预处理技术,例如将单词转换为其基本形式(即去掉后缀或前缀),或者将多个连续的空格或标点符号合并为一个空格或标点符号。

        总之,快速的 tokenizer 通过使用一些优化技巧和预处理技术来减少计算量,从而提高 tokenization 的速度。

tokenizer = load_hf_tokenizer(args.model_name_or_path_baseline, fast_tokenizer=True)
def load_hf_tokenizer(model_name_or_path, fast_tokenizer=True):
    if os.path.exists(model_name_or_path):
        # Locally tokenizer loading has some issue, so we need to forc
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
import torch from transformers import BertTokenizer, BertModel # 加载Bert预训练模型和tokenizer model = BertModel.from_pretrained('bert-base-chinese') tokenizer = BertTokenizer.from_pretrained('bert-base-chinese') # 微博文本和种子词 text = '今天天气真好,心情非常愉快!' seeds = ['天气', '心情', '愉快'] # 将微博文本和种子词转换为Bert输入格式 inputs = tokenizer.encode_plus(text, add_special_tokens=True, return_tensors='pt') seed_inputs = tokenizer.encode_plus(seeds, add_special_tokens=True, return_tensors='pt', padding=True) # 使用Bert模型获取微博文本和种子词的词向量 with torch.no_grad(): text_embeddings = model(inputs['input_ids'], attention_mask=inputs['attention_mask'])[0] # [1, seq_len, hidden_size] seed_embeddings = model(seed_inputs['input_ids'], attention_mask=seed_inputs['attention_mask'])[0] # [batch_size, seq_len, hidden_size] # 计算种子词和微博文本中所有词语的余弦相似度 text_embeddings = text_embeddings.squeeze(0) # [seq_len, hidden_size] seed_embeddings = seed_embeddings.mean(dim=1) # [batch_size, hidden_size] -> [batch_size, 1, hidden_size] -> [batch_size, hidden_size] cosine_similarities = torch.matmul(text_embeddings, seed_embeddings.transpose(0, 1)) # [seq_len, batch_size] # 获取相似度最高的词语 similar_words = [] for i in range(len(seeds)): seed_similarities = cosine_similarities[:, i].tolist() max_sim_idx = seed_similarities.index(max(seed_similarities)) similar_word = tokenizer.convert_ids_to_tokens(inputs['input_ids'][0][max_sim_idx].item()) similar_words.append(similar_word) print(similar_words)
05-22
这段代码使用了BERT模型和tokenizer对微博文本和种子词进行编码,并计算它们之间的余弦相似度,从而获取微博文本中与种子词最相似的词语。具体的流程如下: 1. 加载Bert预训练模型和tokenizer: ``` model = BertModel.from_pretrained('bert-base-chinese') tokenizer = BertTokenizer.from_pretrained('bert-base-chinese') ``` 2. 定义微博文本和种子词: ``` text = '今天天气真好,心情非常愉快!' seeds = ['天气', '心情', '愉快'] ``` 3. 将微博文本和种子词转换为Bert输入格式: ``` inputs = tokenizer.encode_plus(text, add_special_tokens=True, return_tensors='pt') seed_inputs = tokenizer.encode_plus(seeds, add_special_tokens=True, return_tensors='pt', padding=True) ``` 4. 使用Bert模型获取微博文本和种子词的词向量: ``` with torch.no_grad(): text_embeddings = model(inputs['input_ids'], attention_mask=inputs['attention_mask'])[0] seed_embeddings = model(seed_inputs['input_ids'], attention_mask=seed_inputs['attention_mask'])[0] ``` 5. 计算种子词和微博文本中所有词语的余弦相似度: ``` cosine_similarities = torch.matmul(text_embeddings, seed_embeddings.transpose(0, 1)) ``` 6. 获取相似度最高的词语: ``` similar_words = [] for i in range(len(seeds)): seed_similarities = cosine_similarities[:, i].tolist() max_sim_idx = seed_similarities.index(max(seed_similarities)) similar_word = tokenizer.convert_ids_to_tokens(inputs['input_ids'][0][max_sim_idx].item()) similar_words.append(similar_word) ``` 7. 输出最相似的词语: ``` print(similar_words) ``` 该代码可以用于文本分类、文本相似度计算等NLP任务中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心心喵

喵喵(*^▽^*)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值