首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Tensorflow bert标记化未知词

在TensorFlow中使用BERT模型时,处理未知词(OOV,Out-Of-Vocabulary)是一个常见的问题

  1. 使用WordPiece Tokenization:

BERT默认使用WordPiece分词器,它可以将单词分解为子词。这种方法有助于处理未知词,因为它可以将未知词分解为已知的子词。要使用WordPiece分词器,请确保在预处理数据时使用tokenizers库。

代码语言:javascript
复制
from tokenizers import BertWordPieceTokenizer

tokenizer = BertWordPieceTokenizer('bert-base-uncased-vocab.txt')
tokens = tokenizer.encode("Hello, world!")
  1. 使用Masked Language Model (MLM):

BERT模型在预训练阶段使用了Masked Language Model任务,该任务要求模型预测被遮盖的单词。因此,在处理未知词时,可以使用MLM来预测这些词。

代码语言:javascript
复制
import tensorflow as tf
from transformers import BertTokenizer, TFBertForMaskedLM

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = TFBertForMaskedLM.from_pretrained('bert-base-uncased')

text = "Hello, [MASK]!"
inputs = tokenizer(text, return_tensors="tf")
outputs = model(inputs)
predictions = tf.argmax(outputs.logits, axis=-1)
predicted_token = tokenizer.decode(predictions[0][0])
  1. 使用字符级别的嵌入:

另一种处理未知词的方法是使用字符级别的嵌入。这种方法将每个字符视为一个标记,而不是将单词分解为子词。这有助于处理未知词,因为即使单词不在词汇表中,其字符仍然可以在嵌入空间中表示。

代码语言:javascript
复制
import tensorflow as tf
from tensorflow.keras.layers import Embedding, LSTM, Dense

vocab_size = 1000
embedding_dim = 16
max_length = 100

inputs = tf.keras.Input(shape=(max_length,))
embedding_layer = Embedding(vocab_size, embedding_dim, input_length=max_length)(inputs)
lstm_layer = LSTM(64)(embedding_layer)
outputs = Dense(vocab_size, activation='softmax')(lstm_layer)

model = tf.keras.Model(inputs=inputs, outputs=outputs)

总之,在TensorFlow中使用BERT模型处理未知词时,可以尝试使用WordPiece分词器、Masked Language Model或字符级别的嵌入。这些方法可以帮助您更好地处理未知词,从而提高模型的性能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

精通 Transformers(一)

BERT 或任何其他基于 Transformer 的架构使用子标记的主要原因是这些标记器处理未知标记的能力。 BERT 还使用位置编码来确保将标记的位置提供给模型。...另一方面,使用 WordPiece 作为标记器会产生子标记,作为序列输入之前可以有较少的标记之后,大小会增加,因为标记器会将分解为子,如果在预训练语料库中没有看到它们常见。...几乎所有的 Transformer 模型都利用子标记来降低维度,不仅编码训练中未见过的罕见(或未知)单词,而且还为每个单词分配一个唯一的标识符。...标记依赖于这样一个思想,即包括罕见单词或未知单词在内的每个单词都可以分解为在训练语料库中广泛出现的有意义的较小块。...最近,一些先进的子标记算法,如 BPE,已成为 Transformer 架构的一个组成部分。这些现代标记过程由两个阶段组成:预标记阶段只是使用空格或语言相关的规则将输入分割为标记

25900
  • GitHub超3万星:Transformer 3发布,BERT被一分为二

    ---- 【新智元导读】GitHub超3万星,Transformer更新到第三版,BERT被一分为二,Trainer从类转为方法,还有全新的tokenizer API、TensorFlow改进以及增强的文档和教程...tokenizer 现在可以接受预标记的输入。 现在,所有的Rust tokenizers都像slow tokenizers一样被全面测试了。...一个新类 AddedToken ,用来对添加的标记,在标记过程中的行为,进行更精细的控制。...特别是用户可以控制(1)在标记过程中,标记周围的左右空格是否会被移除(2)标记是否会在另一个中被识别,以及(3)标记是否会以标准的形式被识别(例如,如果标记器使用小写字母)。...BERT for Resource-Limited Devices 》中的MobileBERT被添加到PyTorch和TensorFlow的库中。

    1.7K40

    【人工智能】Transformers之Pipeline(十三):填充蒙版(fill-mask)

    在MLM任务中,模型被训练来预测输入句子中被遮蔽的;而在NSP任务中,模型需要判断两个句子是否是连续的文本序列。 ‌...个性推荐系统:在内容推荐中,理解用户查询或上下文后,填充特定的关键来优化推荐内容。 翻译与多语言处理:在机器翻译中,通过上下文预测单词,有助于提高翻译的准确性和自然性。...对于 PyTorch,这需要从PreTrainedModel继承;对于 TensorFlow,这需要从TFPreTrainedModel继承。...如果提供的目标不在模型词汇表中,则它们将被标记,并使用第一个生成的标记(带有警告,并且可能会更慢)。...如果提供的目标不在模型词汇表中,则它们将被标记,并使用第一个生成的标记(带有警告,并且可能会更慢)。 top_k(int,可选)——传递时,覆盖要返回的预测数量。

    20410

    BERT中的向量指南,非常的全面,非常的干货

    为什么要使用BERT的嵌入? 在本教程中,我们将使用BERT从文本数据中提取特征,即单词和句子的嵌入向量。我们可以用这些和句子的嵌入向量做什么?...,但通常会让我们忽略关于tensorflow的内容,此处的目的是BERT!)...,所以我们需要: 句子的开始([CLS])和分隔/结尾([SEP])的特别标记 符合BERT中使用的固定词汇表的标记 BERT‘s tokenizer中的token id 掩码id,...因此,我们没有将“embeddings”和词汇表之外的每个单词分配给一个重载的未知词汇表标记,而是将其拆分为子单词标记[‘ em ‘、’ ##bed ‘、’ ##ding ‘、’ ##s ‘],这些标记将保留原单词的一些上下文含义...注意到BERT的不同层编码非常不同的信息,可以部分地证明这一点,因此适当的池策略将根据应用的不同而改变,因为不同的层编码不同的信息。

    2.4K11

    【NLP】用于序列标注问题的条件随机场(Conditional Random Field, CRF)

    机器学习最重要的任务,是根据一些已观察到的证据(例如训练样本)来对感兴趣的未知变量(例如类别标记)进行估计和推测。 概率模型提供这样一种描述的框架,将学习任务归结于计算变量的概率分布。...它表示输入句子中,第i个,取某个标记的概率。...举个例子,假如输入的句子是“Mark Watney visit Mars”, 相应的label是[B-PER,E-PER,O,S-LOC],则P(1,“B-PER”)表示的是第一个标记是B-PER的概率...它代表的是整个序列从一个标记转化到下一个标记的损失值。它用每一项值从self.trans矩阵中取得。它最开始是按照我们初始的方式初始的,然后会随着训练的过程优化。...总结 条件随机场(CRF)在现今NLP中序列标记任务中是不可或缺的存在。太多的实现基于此,例如LSTM+CRF,CNN+CRF,BERT+CRF。因此,这是一个必须要深入理解和吃透的模型。

    1.4K20

    手把手教你用BERT进行多标签文本分类

    Google Research最近公开了BERTtensorflow部署代码,并发布了以下预训练模型: BERT-Base, Uncased: 12层,768个隐藏单元,自注意力的 head数为12...input_ids:标记文本的数字id列表 input_mask:对于真实标记将设置为1,对于填充标记将设置为0 segment_ids:对于我们的情况,这将被设置为全1的列表 label_ids:文本的...one-hot编码标签 标记(Tokenisation) BERT-Base,uncased模型使用包含30,522个单词的词汇表。...标记过程涉及将输入文本拆分为词汇表中可用的标记列表。为了处理不在词汇表中的单词,BERT使用一种称为基于双字节编码(BPE,Byte-Pair Encoding)的WordPiece标记技术。...这种方法将不在词汇表之中的一步步分解成子。因为子是词汇表的一部分,模型已经学习了这些子在上下文中的表示,并且该词的上下文仅仅是子的上下文的组合,因此这个就可以由一组子词表示。

    1.9K30

    使用BERTTensorFlow构建多标签文本分类器

    例如,“ bank ” 一在“ bank account ”和“ bank of the river.”中具有相同的无上下文表示。” 相反,上下文模型生成基于句子中其他单词的每个单词的表示。...pip install bert-tensorflow 下载预先训练的BERT模型:这些是权重和其他必要文件,用于表示BERT在预训练中学到的信息。需要选择想要的BERT预训练重量。...标记 标记涉及将输入文本分解为单个单词。为此,第一步是创建tokenizer对象。...可以采取两种方式: 1.直接来自tensorflow-hub 2.从手动下载的文件: 运用 BERT_INIT_CHKPNT & BERT_VOCAB files 创建标记生成器后,就可以使用它了。...此方法添加了BERT用于识别句子开始和结束的特殊“CLS”和“SEP”标记。它还为每个输入添加“index”和“segment”标记。因此根据BERT格式输入的所有工作都由此函数完成。

    10.5K41

    GPT、BERT、XLM、GPT-2、BART…你都掌握了吗?一文总结文本生成必备经典模型(二)

    收录实现数量:6支持框架:TensorFlow BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding...将所有的结构输入转换为标记序列,由预训练模型处理,然后是线性+softmax层 GPT-1由12层Transformer Decoder的变体组成,称其为变体,是因为与原始的Transformer...BERT输入表示。输入嵌入是标记嵌入、分割嵌入和位置嵌入的总和。...平台收录 BERT 共 6 个模型实现资源,支持的主流框架包含 TensorFlow 等。 项目 SOTA!平台项目详情页 BERT‍‍‍ 前往 SOTA!...目前的大规模语言模型包括预处理步骤,如小写字母、标记和词汇外标记,这些步骤限制了可建模字符串的空间。

    94320

    独家 | 谷歌发布NLP最先进预训练模型:开源BERT

    由于NLP是一个具有许多不同任务的多样领域,因此大多数针对特定任务的数据集仅包含了几千到几十万个人为标记的训练示例。...在我们公布的源码中包括了在Tensorflow上构建的一系列语言表示模型。...与先前最先进的上下文预训练方法相比,BERT神经网络架构的可视如下所示。箭头表示从一层到下一层的信息流。顶部的绿色框表示每个输入的最终语境表示: ?...这些任务中人工标记的训练数据的数量范围从2,500个到400,000个,BERT大大提高了所有这些数据的最新准确度: ?...可以在下面链接中找到开源TensorFlow实现和预训练BERT模型的介绍: https://goo.gl/language/bert 或者,您也可以通过Colab开始使用BERT,对应的notebook

    86640

    斯坦福NLP课程 | 第13讲 - 基于上下文的表征与NLP预训练模型(ELMo, transformer)

    引言 [基于上下文的嵌入(ELMo,transformer,BERT)] 授课计划 [授课计划] Reflections on word representations / 向量知识回顾 Pre-ELMo...:早期] POS和NER两种表征体系 11个窗,100个隐层神经元,在12w上训练7周 [预训练的向量:当前 (2014年 -)] 我们可以随机初始向量,并根据我们自己的下游任务训练它们 但在绝大多数情况下...,使用预训练向量是有帮助的,因为它们本身是自带信息的 (我们可以在更大体量的预训练语料上训练得到它们) 1.3 未知向量应用建议 [带向量的未知提示] 简单且常见的解决方案: 训练时:词汇表...5) 都映射为 ,为其训练一个向量 运行时:使用 代替词汇表之外的 OOV 问题: 没有办法区分不同 UNK words,无论是身份还是意义 [未知向量应用建议...1.7 标签语言模型 (Tag LM ) [标签语言模型 (Tag LM ) ] 步骤3:在序列标记模型中同时使用单词嵌入和 LM 嵌入 步骤2:为输入序列中的每个标记准备单词嵌入和 LM 嵌入 步骤

    86451

    做项目一定用得到的NLP资源【分类版】

    - Entity and Relation Extraction Based on TensorFlow and BERT 基于TensorFlowBERT的管道式实体及关系抽取,2019语言与智能技术竞赛信息抽取任务解决方案...github 中文关键短语抽取工具 github bert 用于中文命名实体识别 tensorflow版本 github bert-Kashgari 基于 keras 的封装分类标注框架 Kashgari...资源名(Name) 描述(Description) 链接 Scattertext 文本可视(python) github whatlies向量交互可视 spacy工具 PySS3面向可解释AI...、命名实体识别、向量空间分析、文本可视等 github nlpgnn图神经网络自然语言处理工具箱 github Macadam 以Tensorflow(Keras)和bert4keras为基础,专注于文本分类...BERT及两份阅读理解数据、ConvLab:开源多域端到端对话系统平台、中文自然语言处理数据集、基于最新版本rasa搭建的对话系统、基于TensorFlowBERT的管道式实体及关系抽取、一个小型的证券知识图谱

    2K40

    流水的NLP铁打的NER:命名实体识别实践与探索

    这里就可以直接接一层全连接与softmax,输出结果了;如果用CRF的话,需要把 c 输入到 CRF 层中,经过 CRF 一通专业缜密的计算,它来决定最终的结果 这里说一下用于表示序列标注结果的 BIO 标记法...序列标注里标记法有很多,最主要的还是 BIO 与 BIOES 这两种。B 就是标记某个实体词的开始,I 表示某个实体词的中间,E 表示某个实体词的结束,S 表示这个实体词仅包含当前这一个字。...但是有一个小小的缺点,就是官方实现的 crf_log_likelihood 里某个未知的角落有个 stack 操作,会悄悄地吃掉很多的内存。如果 V 较大,内存占用量会极高,训练时间极长。...,就取实体最后一个对应的分类结果,作为实体类型。...具体代码就不放了,感兴趣可以上 git 看 从结果上看,增加了级别特征后,提升很明显 ? 很可惜,我还没有找到把级别特征结合到 BERT 中的方法。

    6.1K10

    预训练BERT,官方代码发布前他们是这样用TensorFlow解决的

    本文介绍的两个 BERT 实现项目分别基于 TensorFlow 和 Keras,其中基于 TensorFlow 的项目会使用中等数据集与其它技巧降低计算力,并发现使用 TextCNN 代替 Transformer...而基于 Keras 的项目尝试使用预训练的 OpenAI Transformer 作为初始权重,并以较小的计算力重新训练 BERT 预训练模型,再将该预训练的 BERT 应用到不同任务。...BERT 简介 BERT 的全称是基于 Transformer 的双向编码器表征,其中「双向」表示模型在处理某一个时,它能同时利用前面的和后面的两部分信息。...这种「双向」的来源在于 BERT 与传统语言模型不同,它不是在给定所有前面的条件下预测最可能的当前,而是随机遮掩一些,并利用所有没被遮掩的进行预测。...但是现在的官方实现与预训练模型仍然没有放出来,因此有开发者利用 OpenAI 预训练的 Transformer 作为初始参数,并训练新的 BERT 预训练模型,这种方式大大降低了计算力需求。

    92720

    向量(2)--从ELMo到Bert

    前言 上一篇文章,我们介绍向量(1)--从word2vec到ELMo,关注的角度是从静态的向量到动态的向量(该篇属于旧闻新写,构思的时候还没出现Bert等跨时代的思想)......从2013年出现的word2vec到如今的Bert,一个显著的转变是:从仅仅预训练向量来初始NLP模型的第一层发展到预训练整个NLP模型,预训练关注的不再仅仅是单个词汇信息,而是还有句子级别的信息,...代表: Bert 缺点: 在输入侧引入[Mask]标记,导致预训练阶段和Fine-tuning阶段不一致的问题,因为Fine-tuning阶段是看不到[Mask]标记的。...融合双语言模型 同时融合自回归语言模型+自编码语言模型的特点,抛弃[Mask]标记。...-n liuchaunfeng_python3 python=3.5 pip install tensorflow==1.10.1 #远程-服务器端 pip install bert-serving-server

    1.5K20

    美团BERT的探索和实践 | CSDN原力计划

    向量的效果主要取决于训练语料的大小,很多NLP任务中有限的标注语料不足以训练出足够好的向量,通常使用跟当前任务无关的大规模未标注语料进行向量预训练,因此预训练的另一个好处是能增强模型的泛能力。...目前,大部分NLP深度学习任务中都会使用预训练好的向量(如Word2Vec[9]和GloVe[10]等)进行网络初始(而非随机初始),从而加快网络的收敛速度。...Masked Language Model(MLM) 通过随机掩盖一些(替换为统一标记符[MASK]),然后预测这些被遮盖的来训练双向语言模型,并且使每个的表征参考上下文信息。...性能损失远小于TensorFlow,且训练速度可达到标准分布式TensorFlow的近两倍。...MT-BERT模型的轻量化和小型 MT-BERT模型在各个NLU任务上取得了惊人的效果,由于其复杂的网络结构和庞大的参数量,在真实工业场景下上线面临很大的挑战。

    75110

    美团BERT的探索和实践

    向量的效果主要取决于训练语料的大小,很多NLP任务中有限的标注语料不足以训练出足够好的向量,通常使用跟当前任务无关的大规模未标注语料进行向量预训练,因此预训练的另一个好处是能增强模型的泛能力。...目前,大部分NLP深度学习任务中都会使用预训练好的向量(如Word2Vec[9]和GloVe[10]等)进行网络初始(而非随机初始),从而加快网络的收敛速度。...Masked Language Model(MLM) 通过随机掩盖一些(替换为统一标记符[MASK]),然后预测这些被遮盖的来训练双向语言模型,并且使每个的表征参考上下文信息。...性能损失远小于TensorFlow,且训练速度可达到标准分布式TensorFlow的近两倍。...MT-BERT模型的轻量化和小型 MT-BERT模型在各个NLU任务上取得了惊人的效果,由于其复杂的网络结构和庞大的参数量,在真实工业场景下上线面临很大的挑战。

    4.2K3673
    领券