NLP-transformer-分词库用法

参考文档: https://blog.csdn.net/orangerfun/article/details/124089467

1 pip install transformer

2 下载专有的vocab.txt词典

  这个词典用于 把 单词-> id -> 词向量

  https://github.com/google-research/bert

  

3 实例化分词实例

1 from transformers import BertTokenizer
2 import torch
3
4 token = r"vocab.txt"
5
6 bert_tokenizer = BertTokenizer(vocab_file=token)

4 分词任务

# 1 分词任务
res = bert_tokenizer.tokenize("山海关总兵官吴三桂")
print(res) ['山', '海', '关', '总', '兵', '官', '吴', '三', '桂']

5 转为id

# 2 转化为id
# 接受一个词或字列表
idres = bert_tokenizer.convert_tokens_to_ids("山海关总兵官吴三桂")
print(idres)
idres = bert_tokenizer.convert_tokens_to_ids(res)
print(idres)
# 一个字时候是否是准的? 准确id
idres = bert_tokenizer.convert_tokens_to_ids("山")
print(idres)

6 转文字

# id转字
wordres = bert_tokenizer.convert_ids_to_tokens([2255, 3862, 1068, 2600, 1070, 2135, 1426, 676, 3424])
# 可以成功转为对应汉字
print(wordres)
# 来看看 前面误操作的 100 能转为什么
wordres = bert_tokenizer.convert_ids_to_tokens(100)
print(wordres)

7 使用回调函数 实现批量等工程级别操作

  • text: 需要被编码的文本,可以是一维或二维list        最好是一维的
  • padding: 是否需要padding,可选如下几个值
  • truncation: 是否要进行截断
    True or 'longest_first',保留由max_length指定的长度,或者当max_length没有指定时,截取保留模型最大能接受的长度,对于sentence pair,截取长度最大的句子
    False or 'do_not_truncate (default) 不截取
    only_first,截取到max_length, 但是只截取sentence pair中的第一个句子
    'only_second',同理,只截取pair中第二个句子
    max_length,句子最大长度,和padding及truncation相关

合理动态padding问题

注意 :因为需要添加 句子头和尾

['[CLS]', '我', '爱', '北', '京', '天', '[SEP]']

[101, 2769, 4263, 1266,  776, 1921,  102]
所以如果最大长度max_length,句子最大长度 设置为7的话, 注意5个位置来存实际的内容。

当max_length=10时候,填充为

{'input_ids': tensor([[ 101, 2769, 4263, 1266, 776, 1921, 2128, 7305, 102, 0],
[ 101, 2408, 1767, 1391, 4156, 7883, 102, 0, 0, 0]]),      在 标志位后面添加000

本质: 输出为 输入model的长度 词列表。

最大长度max_length即输入model的最大长度。

examples = [["我爱北京天安门", "广场吃炸鸡"],["苏德战争","俄罗"]]
res = bert_tokenizer(examples,
padding="max_length",
truncation=True,
max_length=10,
return_tensors="pt",
return_length=True)
print(res) {'input_ids': tensor([[ 101, 2769, 4263, 1266, 776, 102, 2408, 1767, 1391, 102],
[ 101, 5722, 2548, 2773, 751, 102, 915, 5384, 102, 0]]), 'token_type_ids': tensor([[0, 0, 0, 0, 0, 0, 1, 1, 1, 1],
[0, 0, 0, 0, 0, 0, 1, 1, 1, 0]]), 'length': tensor([10, 9]), 'attention_mask': tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 0]])}

NLP-transformer-分词库用法的更多相关文章

  1. [NLP]Transformer模型解析

    简介[2] Attention Is All You Need是2017年google提出来的一篇论文,论文里提出了一个新的模型,叫Transformer,这个结构广泛应用于NLP各大领域,是目前比较 ...

  2. 13.深度学习(词嵌入)与自然语言处理--HanLP实现

    笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP 13. 深度学习与自然语言处理 13.1 传统方法的局限 前面已经讲过了隐马尔可夫 ...

  3. [NLP] 相对位置编码(一) Relative Position Representatitons (RPR) - Transformer

    对于Transformer模型的positional encoding,最初在Attention is all you need的文章中提出的是进行绝对位置编码,之后Shaw在2018年的文章中提出了 ...

  4. NLP学习(5)----attention/ self-attention/ seq2seq/ transformer

    目录: 1. 前提 2. attention (1)为什么使用attention (2)attention的定义以及四种相似度计算方式 (3)attention类型(scaled dot-produc ...

  5. NLP与深度学习(四)Transformer模型

    1. Transformer模型 在Attention机制被提出后的第3年,2017年又有一篇影响力巨大的论文由Google提出,它就是著名的Attention Is All You Need[1]. ...

  6. 中文分词库及NLP介绍,jieba,gensim的一些介绍

    六款中文分词软件介绍: https://blog.csdn.net/u010883226/article/details/80731583 里面有jieba, pyltp什么的.另外下面这个博客有不少 ...

  7. [NLP] REFORMER: THE EFFICIENT TRANSFORMER

    1.现状 (1) 模型层数加深 (2) 模型参数量变大 (3) 难以训练 (4) 难以fine-tune 2. 单层参数量和占用内存分析 层 参数设置 参数量与占用内存 1 layer 0.5Bill ...

  8. NLP入门学习中关于分词库HanLP导入使用教程

    大家好,时隔多年再次打开我的博客园写下自己的经验和学习总结,开园三年多,文章数少得可怜,一方面自己技术水平局限,另一方面是自己确实想放弃写博客.由于毕业工作的原因,经常性的加班以及仅剩下少的可怜的休息 ...

  9. NLP之基于Transformer的句子翻译

    Transformer 目录 Transformer 1.理论 1.1 Model Structure 1.2 Multi-Head Attention & Scaled Dot-Produc ...

  10. [NLP] The Annotated Transformer 代码修正

    1. RuntimeError: "exp" not implemented for 'torch.LongTensor' class PositionalEncoding(nn. ...

随机推荐

  1. 置顶TOP

    HTML <a href="javascript:void(0)" class="go-top" @click="goTop"> ...

  2. 轻量级CI/CD发布部署环境搭建及使用_04_docker安装nexus3

    轻量级CI/CD发布部署环境搭建及使用_04_配置宿主机的环境:jdk.maven.node.pythod2 尽自己的绵薄之力,为开源技术分享添砖加瓦   1,搜索nexus3 docker sear ...

  3. Python基础语法复习笔记(一):字符串

    python基础复习笔记 个人主页:JoJo的数据分析历险记 个人介绍:小编大四统计在读,目前保研到统计学top3高校继续攻读统计研究生 如果文章对你有帮助,欢迎关注.点赞.收藏.订阅专栏 本专栏主要 ...

  4. vue框架3

    js的几种循环方式 1.v-for可以循环的变量 <!DOCTYPE html> <html lang="en"> <head> <met ...

  5. 面向对象基础之基础—控制台C#模拟银行ATM存取操作实例

    c#控制台应用程序ATM银行操作实例.主要介绍了设计的方法:使用的类介绍:具体的运行界面:程序代码.代码直接写在一起放在Programm.cs中,拷贝可直接运行. 一.设计 1.原则上采用三层:(1) ...

  6. 在TMOS系统中添加按键检测功能

    目录 TMOS系统中自带有按键检测轮询功能,默认100ms检测一次,在debug时很有帮助.不过在需要低功耗休眠的前提下,检测按键需要频繁唤醒,影响功耗,故多数BLE的工程都没有用到这个功能.代码贴在 ...

  7. 《CSOL大灾变》开发记录——武器购买逻辑开发

    上次完成了武器购买界面设计,这次来完成武器购买逻辑与武器选择逻辑. 武器购买逻辑分为两个部分,一个部分是GUI部分的逻辑,也就是购买菜单,一个是武器游戏数据更新的逻辑,也就是实际中玩家获取武器的逻辑开 ...

  8. react-router V6踩坑

    useRoutes() may be used only in the context of a <Router> component.需要将BrowserRouter放到外层,放到APP ...

  9. QT控件使用--QPlainTextEdit

    QPlainTextEdit是一个多行文本编辑器,用于显示和编辑多行简单文本. 一些常用的函数有: appendPlainText(const QString) 向 PlainTextEdit 组件添 ...

  10. Excel条件格式的应用

    一.突出单元格规则 大于/小于/等于/包含/发生日期/重复值 发生日期(自定义)通常通过辅助单元格进行:选中单元格区域,条件格式-新建规则-选择规则类型(使用公式确定要设置的单元格),设置内容如下 二 ...