在测试 bert 模型期间分配权重

如何解决在测试 bert 模型期间分配权重

我有一个基本的概念性疑问。当我在句子上训练 bert 模型时说:

Train: "went to get loan from bank" 
Test :"received education loan from bank"

测试句子如何为每个标记分配权重,因为我没有通过准确的句子进行测试,并且稍微添加了一些像“教育”这样的词,这会稍微改变上下文

假设在我的模型中没有训练这样的上下文,在我进一步微调之前如何为我的 bert 中的每个标记分配权重

如果我对我的问题感到困惑,简单地说,我试图了解如果未经过训练的上下文发生轻微变化,则在测试期间如何分配权重。

解决方法

token 的向量表示(记住 token != word)存储在嵌入层中。当我们加载 'bert-base-uncased' 模型时,我们可以看到它“知道”了 30522 个标记,并且每个标记的向量表示由 768 个元素组成:

from transformers import BertModel
bert= BertModel.from_pretrained('bert-base-uncased')
print(bert.embeddings.word_embeddings)

输出:

Embedding(30522,768,padding_idx=0)

这个嵌入层不知道任何字符串,但知道 id。例如,id 101 的向量表示为:

print(bert.embeddings.word_embeddings.weight[101])

输出:

tensor([ 1.3630e-02,-2.6490e-02,-2.3503e-02,-7.7876e-03,8.5892e-03,-7.6645e-03,-9.8808e-03,6.0184e-03,4.6921e-03,-3.0984e-02,1.8883e-02,-6.0093e-03,-1.6652e-02,1.1684e-02,-3.6245e-02,8.3482e-03,-1.2112e-03,1.0322e-02,1.6692e-02,-3.0354e-02,...
         5.4162e-03,-3.0037e-02,8.6773e-03,-1.7942e-03,6.6826e-03,-1.1929e-02,-1.4076e-02,1.6709e-02,1.6860e-03,-3.3842e-03,8.6805e-03,7.1340e-03,1.5147e-02],grad_fn=<SelectBackward>)

BERT 无法处理“已知”ID 之外的所有内容。要回答您的问题,我们需要查看将字符串映射到 id 的组件。该组件称为标记器。有不同的标记化 approaches。 BERT 使用 WordPiece 分词器,它是一种子字算法。该算法将所有无法从其词汇表中创建的内容替换为词汇表的一部分未知标记(原始实现中的[UNK],id:100 ).

请查看以下小示例,其中从头开始训练 WordPiece 分词器以确认该行为:

from tokenizers import BertWordPieceTokenizer
path ='file_with_your_trainings_sentence.txt'
tokenizer = BertWordPieceTokenizer()
tokenizer.train(files=path,vocab_size=30000,special_tokens=['[UNK]','[SEP]','[PAD]','[CLS]','[MASK]'])
otrain = tokenizer.encode("went to get loan from bank")
otest =  tokenizer.encode("received education loan from bank")

print('Vocabulary size: {}'.format(tokenizer.get_vocab_size()))
print('Train tokens: {}'.format(otrain.tokens))
print('Test tokens: {}'.format(otest.tokens))

输出:

Vocabulary size: 27
Train tokens: ['w','##e','##n','##t','t','##o','g','l','##an','f','##r','##m','b','##k']
Test tokens: ['[UNK]','[UNK]','##k']

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-