NLP 人造言语解决 把握BERT 从初级到初级的综合指南
1. 什么是BERT?
在始终开展的人造言语解决 (NLP) 畛域,一项名为 BERT 的打破性翻新曾经产生,扭转了游戏规定。BERT 代表 Bidirectional Encoder Representations from Transformers,不只仅是机器学习术语陆地中的另一个首字母缩略词。它代表了机器了解言语形式的转变,使它们能够了解使人类交流丰盛而无心义的盘根错节的纤细差异和高低文依赖相关。
2. 为什么BERT很关键?
构想一句话:“她拉小提琴的时刻很美丽。传统的言语模型会从左到右解决这个句子,有或者疏忽了小提琴(“violin”)自身会影响整个句子的解释这一关键理想。但是BERT的机制能够了解关键消息,单词的高低文相关在派生意义方面起着关键作用。它抓住了双向性的实质,使其能够思考围绕每个单词的完整高低文,从而彻底扭转了言语了解的准确性和深度。
3. BERT是如何上班的?
BERT的外围是由一个弱小的神经网络架构(称为 Transformers)提供支持的。这种架构驳回了一种称为自我留意的机制,准许 BERT 依据其高低文(包含前后)来掂量每个单词的关键性。这种高低文感知使BERT能够生成高低文的单词嵌入,这些单词嵌入是思考单词在句子中的含意的示意。这相似于BERT阅读和从新阅读句子以深化了解每个单词的作用。
思考这句话:“The 'lead' singer will 'lead' the band.”传统模型或者会为“lead”这个词的歧义而苦苦挣扎。但是,BERT 毫不费劲地域分第一个 “lead” 是名词,而第二个 “lead” 是动词,展现了它在消弭言语结构歧义方面的实力。
4. BERT预解决逻辑
Tokenization:将文本分红无心义的块
构想一下,您正在教 BERT 阅读一本书。你不会一次性交出整本书;你会把它分红句子和段落。雷同,BERT 须要将文本合成为更小的单元,称为标志。但这里有一个转机点:BERT 经常使用 WordPiece Token。它将单词拆分红更小的局部,例如将 “running” 转换为 “run” 和 “ning”。这有助于解决辣手的单词,并确保 BERT 不会在不相熟的单词中迷失方向。
原文:“ChatGPT is fascinating”。WordPiece Token: [“chat”, “##G”, “##PT”, “is”, “fascinating”, “.”]
Input Formatting:为 BERT 提供高低文
BERT 能了解高低文。咱们以 BERT 可以了解的形式解决tokens。咱们在句子之间减少不凡标志,如 [CLS](代表分类),[SEP](代表分别)。咱们还调配了segment embeddings来通知 BERT 哪些token属于哪个句子。
原文: “ChatGPT is fascinating.”Formatted Tokens: [“[CLS]”, “Chat”, “##G”, “##PT”, “is”, “fascinating”, “.”, “[SEP]”]
Masked Language Model (MLM) 指标:BERT 高低文了解
BERT 的秘诀在于它能够了解双向高低文。在训练环节中,一些单词在句子中被覆盖(交流为 [MASK]),BERT 学会从高低文中预测这些单词。这有助于 BERT 把握单词在之前和之后如何相互关联。
原文:“The cat is on the mat.”Masked Sentence: “The [MASK] is on the mat.”
经常使用 Hugging Face Transformer 启动分词
from transformers import BertTokenizertokenizer = BertTokenizer.from_pretrained('bert-base-uncased')text = "BERT preprocessing is essential."tokens = tokenizer.tokenize(text)print(tokens)
5. 针对特定义务微调 BERT
BERT 有不同的格调,如 BERT-base、BERT-large 等。这些变体具备不同的模型大小和复杂性。选用取决于义务要求和您领有的资源。较大的模型或者功能更好,但它们也须要更多的计算才干。咱们微调 BERT 的义务称为 “下游义务”。包含心情剖析、命名实体识别等。微调触及经常使用特定于义务的数据降级 BERT 的权重。有助于 BERT 专一于这些义务,且好处就是不须要从头开局。
例如便捷经常使用 BERT 启动文本分类
from transformers import BertForSequenceClassification, BertTokenizerimport torchtokenizer = BertTokenizer.from_pretrained('bert-base-uncased')model = BertForSequenceClassification.from_pretrained('bert-base-uncased')text = "This movie was amazing!"inputs = tokenizer(text, return_tensors='pt')outputs = model(**inputs)predictions = torch.argmax(outputs.logits, dim=1)print(predictions)
6. BERT的留意力机制
Self-Attention: BERT对关键消息的把控
构想一下,怎样极速阅读一本书并高亮最关键的那些单词。关于 BERT,这种解决形式叫做自留意力机制,它会检查句子中的每个单词,并依据它们的关键性选择应该对其余单词给予多少关注。这样,BERT 可以专一于相关单词,即使它们在句子中相距很远。
Multi-Head Attention: 多个留意力协同
BERT 不只仅依赖于一个观念,它经常使用多个“头”的留意力。将这些 heads 构想成不同的专家,专一于句子的各个方面。这种多头方法协助 BERT 捕捉单词之间的不同相关,使其了解更丰盛、更准确。
可视化留意力权重
import torchfrom transformers import BertModel, BertTokenizertokenizer = BertTokenizer.from_pretrained('bert-base-uncased')model = BertModel.from_pretrained('bert-base-uncased')text = "BERT's attention mechanism is fascinating."inputs = tokenizer(text, return_tensors='pt', padding=True, truncatinotallow=True)outputs = model(**inputs, output_attentinotallow=True)attention_weights = outputs.attentionsprint(attention_weights)
7. BERT的训练环节
BERT从预训练开局,从少量的文本数据中学习。构想一下,向 BERT 展现数百万个句子,并让它预测缺失的单词。这个练习有助于 BERT 建设对言语形式和相关的松软了解。在预训练时期,BERT 会获取一些单词被覆盖(暗藏)的句子。而后,它尝试依据周围的高低文预测这些掩码词。这就像填空游戏,经过猜出缺失的单词,BERT 了解单词如何相互关联,从而取得其高低文的Embedding相关。BERT不只能了解单词;它抓住了句子的生成方向。在 NSP 指标中,BERT经过训练来预测文本对中的一个句子能否紧跟下一个句子。这有助于BERT了解句子之间的逻辑咨询,使其成为了解段落和较长文本的巨匠。
8. BERT Embeddings
BERT 的弱小之处在于它能够以一种在特定高低文中捕捉其含意的形式示意单词。
Word Embeddings vs. Contextual Word Embeddings
Word Embeddings比拟经常出现,但BERT经过高低文了解更进一步生成Contextual Word Embeddings。BERT不是每个单词只要一个含意,而是依据句子中的高低文为同一单词创立不同的embedding。这样,每个单词的示意都愈加巧妙,并遭到周围内容的影响。
WordPiece Tokenization:更好解决复杂词汇
BERT 的词汇就像一个由称为子词的小块组成的拼图。它经常使用 WordPiece分词将单词合成为这些子词。这关于解决长而复杂的单词以及解决以前从未见过的单词特意有用。
Positional Encodings: 疏导句子结构
因为 BERT 以双向形式读取单词,因此它须要知道每个单词在句子中的位置。位置编码被减少到Embedding中,以使 BERT 具备这种空间感知才干。这样,BERT 不只知道单词的含意,还知道它们在句子中的位置。
经常使用 Hugging Face Transformer 提取单词嵌入
from transformers import BertTokenizer, BertModelimport torchtokenizer = BertTokenizer.from_pretrained('bert-base-uncased')model = BertModel.from_pretrained('bert-base-uncased')text = "BERT embeddings are fascinating."inputs = tokenizer(text, return_tensors='pt', padding=True, truncatinotallow=True, add_special_tokens=True)outputs = model(**inputs)word_embeddings = outputs.last_hidden_stateprint(word_embeddings)
本文转载自,作者: