NLP系列(8)_用可视化解构BERT,从上亿参数中提取出的6种直观模式

大数据文摘联合百度NLP出品
审校:百度NLP、龙心尘
编译:Andy,张驰
来源:towardsdatascience.com
https://blog.csdn.net/longxinchen_ml/article/details/89036531

编者按: 深度神经网络的超强有效性一直让人疑惑。经典论文《可视化与理解CNN》(Visualizing and Understanding Convolutional Networks)解释了在图像领域中CNN从低层到高层不断学习出图像的边缘、转角、组合、局部、整体信息的过程,一定层面论证了深度学习的有效性。另一方面,传统的NLP神经网络却并不是那么深,而bert的出现直接将NLP的神经网络加到12层以上。
那么如何理解各层学到了怎样的信息?
本文作者Jesse Vig通过可视化工具对此进行了非常有意义的探究。文章分两部分,第一部分介绍bert中的6种模式,第二部分介绍其底层细节。

正文:

可视化BERT之一

在BERT错综复杂的注意力网络中,出现了一些直观的模式。

2018年是自然语言处理领域的转折之年,一系列深度学习模型在智能问答、情感分类等多种NLP 任务上取得了最佳结果。特别是最近谷歌的BERT ,成为了一种“以一当十的模型”,在各种任务上都取得了的极佳的表现。
BERT主要建立在两个核心思想上,这两个思想都包含了NLP 最新进展:(1)Transformer 的架构(2)无监督学习预训练。
Transformer 是一种序列模型,它舍弃了 RNN 的顺序结构,转而采用了一种完全基于注意力的方法。这在经典论文 《Attention Is All You Need》中有具体介绍。
BERT 同时也要经过预训练。它的权重预先通过两个无监督任务学习到。这两个任务是:遮蔽语言模型(masked language model,MLM)和下句一句预测(next sentence prediction)。
因此,对于每个新任务,BERT 不需要从头开始训练。相反,只要在预训练的权重上进行微调(fine-tuning)就行。有关BERT的更多详细信息,可以参考文章《图解BERT》。

BERT是一只多头怪

Bert不像传统的注意力模型那样只使用一个平坦的注意力机制。相反,BERT 使用了多层次的注意力(12或24层,具体取决于模型),并在每一层中包含多个(12或16)注意力“头”。由于模型权重不在层之间共享,因此一个BERT 模型就能有效地包含多达24 x 16 = 384个不同的注意力机制。

可视化BERT

由于BERT 的复杂性,所以很难直观地了解其内部权重的含义。而且一般来说,深度学习模型也是饱受诟病的黑箱结构。所以大家开发了各种可视化工具来辅助理解。
可我却没有找到一个工具能够解释BERT 的注意力模式,来告诉我们它到底在学什么。幸运的是,Tensor2Tensor有一个很好的工具,可用于可视化Transformer 模型中的注意力模式。因此我修改了一下,直接用在BERT的一个pytorch版本上。修改后的界面如下所示。你可以直接在这个Colab notebook (https://colab.research.google.com/drive/1vlOJ1lhdujVjfH857hvYKIdKPTD9Kid8)里运行,或在Github 上找到源码。(https://github.com/jessevig/bertviz)。

这个工具将注意力看做不同的连线,它们用来连接被更新

  • 9
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自然语言处理提取关键词可以使用jieba分词库,匹配可以使用正则表达式或者简单的字符串匹配方式。以下是一个示例代码: ```python import jieba import re # 定义需要匹配的字段和关键词 fields = ['title', 'content', 'tag'] keywords_dict = { 'title': ['Python', '机器学习'], 'content': ['NLP', '自然语言处理'], 'tag': ['技术', '编程'] } # 分词并提取关键词 def extract_keywords(text): words = jieba.lcut(text) keywords = [] for word in words: if len(word) > 1 and word not in stopwords: keywords.append(word) return keywords # 匹配关键词 def match_keywords(keywords): matched_fields = [] for field, field_keywords in keywords_dict.items(): for keyword in field_keywords: if keyword in keywords: matched_fields.append(field) break return matched_fields # 示例文章 article = { 'title': 'Python机器学习入门', 'content': '本文介绍Python的机器学习和自然语言处理相关内容', 'tag': '编程,技术,Python' } # 提取关键词并匹配 keywords = extract_keywords(article['title'] + article['content'] + article['tag']) matched_fields = match_keywords(keywords) # 输匹配结果 for field in fields: if field in matched_fields: print(f"{field} 匹配成功!") else: print(f"{field} 匹配失败!") ``` 上述代码,首先定义需要匹配的字段和关键词,然后通过`extract_keywords()`函数使用jieba分词库提取文章的关键词。接着,使用`match_keywords()`函数匹配关键词并返回匹配成功的字段列表。最后,根据匹配结果输相应的信息。 需要注意的是,以上代码仅为示例,实际应用需要根据具体情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值