vector - 如何将 BERT 词嵌入保存为 .vec,类似于 word2vec
问题描述
我想使用生成的 BERT 词嵌入作为在 Torchtext 中构建词汇的向量 我可以加载诸如 GloVe 或 word2vec 之类的向量,但我不知道如何将 BERT 中的词嵌入保存为 Torchtext 词汇可接受的格式
当我尝试这段代码时
txt_field.build_vocab(train, vectors=bertVec)
我收到此错误:
ValueError: Got input vectors of type <class 'torch.Tensor'>, expected str or Vectors object
解决方案
没有直接的方法可以为 BERT 嵌入创建词汇。
下面是原因:
- 如果您查看 Mikolv 或 GLOVE 的嵌入,就会发现只有在庞大的数据语料库上计算出的词嵌入。对于 Mikolov 的嵌入,您有大约 300 万个单词及其嵌入。然而,BERT 使用 word-piece 嵌入,其词汇中大约有 30K word-piece。
- 现在您可能会想到计算 word-piece 嵌入。是的,从技术上讲,您必须能够做到。但是,对于 BERT,你不能。这是因为,在 Mikolov 或 Glove 的情况下,嵌入向量仅基于单词,并且取决于在计算嵌入值时影响的上下文。但是,对于 BERT,嵌入基于 3 个因素:
- WORD(-piece) 嵌入,
- 位置嵌入和
- 段嵌入。
所以,同一个词“Hello”,可能会根据它出现在句子的哪个位置而有不同的嵌入,这是受位置嵌入的影响。
因此,使用 BERT 为单词构建词汇表可能是不可能的,因为相同的单词可能采用不同的嵌入。
推荐阅读
- angular - selectedOptions 未使用 ngModel 在 MatselectionList 上更新
- bean-validation - WebSphere Liberty beanValidation-2.0 特性定制消息包含不需要的字符串
- php - 将对象属性输出到 html 并将对象属性保存到文件的问题
- bootstrap-modal - Bootsrap 添加新用户功能未显示
- mql4 - 为什么在 MQL4 中值更改时显示标签编号不更改?
- cloud - IBM Cloud 未创建 Lite Plan 实例
- sql - REGEXP CONTAINS 来自拆分的字符串
- mongodb - 通过亚马逊网络服务自动化 mongo db 备份
- c# - 将本地 JSON 文件中的内容加载到包含 AngularJS 的 MVC 项目中
- javascript - 如何将数据从 AntD 表传递到 React 中的另一个组件?