tokenizer.batch_encode_plus

注释是输出

tokenizer = BertTokenizer.from_pretrained('C:\\Users\\lgy\\Desktop\\fsdownload\\bert-base-uncased')
print(tokenizer.mask_token) # [MASK]
print(tokenizer.convert_tokens_to_ids('a')) # 1037
print(tokenizer.convert_ids_to_tokens(1037)) # a

string = "test batch encode plus"
strings = [string,string]
tokens = tokenizer.tokenize(string)
print(tokens)#['test', 'batch', 'en', '##code', 'plus']
out = tokenizer.batch_encode_plus(strings,max_length=10,padding='max_length',truncation='longest_first')#长的截,短的补
print(out)# {'input_ids': [[101, 3231, 14108, 4372, 16044, 4606, 102, 0, 0, 0], [101, 3231, 14108, 4372, 16044, 4606, 102, 0, 0, 0]], 'token_type_ids': [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]], 'attention_mask': [[1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [1, 1, 1, 1, 1, 1, 1, 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
import torchfrom transformers import BertTokenizer, BertModel# 加载Bert预训练模型和tokenizermodel = 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, seq_len, 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) 上述修改后的代码输出全是['[CLS]', '[CLS]', '[CLS]'],这不是我想要的结果啊,我想要的是微博文本的词语和种子词很相似的所有词语,而不是bert自动添加的特殊标记符,该怎么办
05-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值