手机网站自动跳转代码,wordpress getterm,中国网站建设世界排名,国外建设网站用的是什么软件最近接触文本处理#xff0c;查询了一些资料#xff0c;记录一下中文文本编码的处理方法吧。 先下载模型和词表#xff1a;bert-base-chinese镜像下载 如下图示#xff0c;下载好的以下文件均存放在 bert-base-chinese 文件夹下 1. 词编码嵌入简介 按我通俗的… 最近接触文本处理查询了一些资料记录一下中文文本编码的处理方法吧。 先下载模型和词表bert-base-chinese镜像下载 如下图示下载好的以下文件均存放在 bert-base-chinese 文件夹下 1. 词编码嵌入简介 按我通俗的理解就是文本要进入模型得编码成数字的形式那么怎么给定数字的形式呢不能随便给一个数字吧此时就需要一个词表该表中有很多很多的字每个字都有在该表中唯一的位置每个字编码时采用其在词表中的位置。 下载文件中的 vocab.txt 就是已经设定好的词表打开看看 2. 词编码嵌入实现 利用transformers库中的BertTokenizer实现分词编码实例化一个tokenizer载入预先下载好的词表调用encode函数进行编码encode函数有5个常用参数 ①text 需要编码的文本 ②add_special_tokens 是否添加特殊token即CLS分类token和SEP分隔token ③max_length 文本的最大长度根据需要处理的最长文本长度设置 ④pad_to_max_length 是否填充到最大长度以0补位 ⑤return_tensors 返回的tensor类型有4种为 [‘pt’, ‘tf’, ‘np’, ‘jax’] 分别代表 pytorch tensor、tensorflow tensor、int32数组形式和 jax tensor
from transformers import BertTokenizerbert_name ./bert-base-chinese
tokenizer BertTokenizer.from_pretrained(bert_name)
text 一念月落一念身错一念关山难涉过。棋逢过客执子者不问因果。
input_ids tokenizer.encode(text,add_special_tokensTrue,max_length128,pad_to_max_lengthTrue,return_tensorspt)
print(text:\n, text)
print(text字符数:, len(text))
print(input_ids:\n, input_ids)
print(input_ids大小:, input_ids.size())输出为
text:一念月落一念身错一念关山难涉过。棋逢过客执子者不问因果。
text字符数: 31
input_ids:tensor([[ 101, 671, 2573, 3299, 5862, 8024, 671, 2573, 6716, 7231, 8024, 671,2573, 1068, 2255, 7410, 3868, 6814, 511, 3470, 6864, 6814, 2145, 8024,2809, 2094, 5442, 679, 7309, 1728, 3362, 511, 102, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0]])
input_ids大小: torch.Size([1, 128])查看一下tokenizer的信息 可以看到整个词表的大小为21128个字共有5种特殊token标记 [PAD]: 填充标记编码为0 [UNK]: 未知字符标记即该字不在所定义的词表中编码为100 [CLS]: 分类标记蕴含整个文本的含义编码为101 [SEP]: 分隔字符标记用于断开两句话编码为102 [MASK]: 掩码标记该字被遮挡编码为103 测试一下这些特殊token
from transformers import BertTokenizerbert_name ./bert-base-chinese
tokenizer BertTokenizer.from_pretrained(bert_name)
text [CLS]一念月落一念身错[SEP]一念关山难涉过。[MASK]逢过客执子者不问因果。[PAD][PAD][PAD],檒檒
input_ids tokenizer.encode(text,add_special_tokensFalse,max_length128,pad_to_max_lengthFalse,return_tensorspt)
print(text:\n, text)
print(text字符数:, len(text))
print(input_ids:\n, input_ids)
print(input_ids大小:, input_ids.size())输出为
text:[CLS]一念月落一念身错[SEP]一念关山难涉过。[MASK]逢过客执子者不问因果。[PAD][PAD][PAD],檒檒
text字符数: 64
input_ids:tensor([[ 101, 671, 2573, 3299, 5862, 8024, 671, 2573, 6716, 7231, 8024, 102,671, 2573, 1068, 2255, 7410, 3868, 6814, 511, 103, 6864, 6814, 2145,8024, 2809, 2094, 5442, 679, 7309, 1728, 3362, 511, 0, 0, 0,117, 100, 100]])
input_ids大小: torch.Size([1, 39])也可以利用tokenize函数直接实现分词并采用convert_tokens_to_ids函数和convert_ids_to_tokens函数实现词与编码的相互转换
from transformers import BertTokenizerbert_name ./bert-base-chinese
tokenizer BertTokenizer.from_pretrained(bert_name)
text 一念月落一念身错一念关山难涉过。棋逢过客执子者不问因果。
tokens tokenizer.tokenize(text)
input_ids tokenizer.convert_tokens_to_ids(tokens)
tokenxx tokenizer.convert_ids_to_tokens(input_ids)print(中文分词:\n, tokens)
print(分词--编码:\n, input_ids)
print(编码--分词:\n, tokenxx)输出为
中文分词:[一, 念, 月, 落, , 一, 念, 身, 错, , 一, 念, 关, 山, 难, 涉, 过, 。, 棋, 逢, 过, 客, , 执, 子, 者, 不, 问, 因, 果, 。]
分词--编码:[671, 2573, 3299, 5862, 8024, 671, 2573, 6716, 7231, 8024, 671, 2573, 1068, 2255, 7410, 3868, 6814, 511, 3470, 6864, 6814, 2145, 8024, 2809, 2094, 5442, 679, 7309, 1728, 3362, 511]
编码--分词:[一, 念, 月, 落, , 一, 念, 身, 错, , 一, 念, 关, 山, 难, 涉, 过, 。, 棋, 逢, 过, 客, , 执, 子, 者, 不, 问, 因, 果, 。]除了BertTokenizer还有AutoTokenizer也是常用的分词类使用方法与BertTokenizer类似可以参考这篇文章了解不同的Tokenizer。