1 引言
BERT(Bidirectional Encoder Representations from Transformers)是一个以自监督方式在大型英语数据语料库上预训练的transformers模型。Transformers架构在论文《 Attention is All You Need 注意力是你所需要的》提出,其中编码器(encoder)对输入文本进行编码,解码器(decoder)对编码进行处理,以理解序列背后的上下文信息。堆栈中的每个编码器和解码器都使用一个注意力机制,将每个输入与其他输入一起处理,以权衡它们之间的相关性,并在解码器的帮助下生成输出序列。注意力机制能够动态地突出和理解输入文本的特征。
BERT模型基于Transformers架构,在BookCorpus上进行了预训练,该数据集由11,038本没有出版的书籍和英文维 基 百 科组成(不包括列表、表格和标题)。BERT的预训练有两个目标: (1) Masked Language Modeling (MLM): 掩蔽语言模拟(MLM)---取一个句子,模型随机掩蔽输入中15%的单词,然后通过模型运行整个掩蔽的句子预测掩蔽的单词。这与传统的递归神经网络RNN不同,RNN通常是一个接一个地看单词,或者与自回归模型GPT不同,GPT在内部屏蔽未来的标记, 而MLM允许模型学习句子的双向表示,这样的训练为需要双向语境的下游任务,如SQuAD奠定了坚实基础。程序为 geotech-fill-mask.py, 代表性例子:完形填空---遮蔽式语言模拟(Masked Language Modeling). (2) Next Sentence Prediction (NSP): 下一句预测(NSP)---模型在预训练期间将两个被掩盖的句子连接起来作为输入。作为随机变量, 有时它们对应于原文中彼此相邻的句子,有时则不是,然后该模型预测这两个句子是否彼此相接。
BERT模型可以用来提取对下游任务有用的特征, 是我们迄今为止使用最广泛的模型,这个笔记简要总结了目前BERT在我们工作中的应用,包括使用的工具及其技术。
2 主题模拟
主题模拟(Topic Modeling)是一种从大量非结构化文本中提取隐藏主题的技术,面临的挑战是如何提取出清晰、分离和有意义的高质量主题,这在很大程度上取决于文本预处理的质量和寻找最佳主题数量的策略,因此主题模拟在很大程度上是一门艺术。BERT在主题模拟方面表现突出,目前主要使用下述方法进行主题模拟:
(1) BERTopic---利用Transformers等模型嵌入,用UMAP来降低嵌入的维度; 用HDBSCAN对减少的嵌入进行聚类,并创建语义相似的文件群,用c-TF-IDF提取和减少主题,提高具有最大边际相关性的词汇连贯性。BERTopic默认的嵌入是sentence-transformers,默认的模型是paraphrase-MiniLM-L6-v2,也可以使用Spacy, Flair, Gensim, USE等嵌入模型。主要依赖的库:transformers, torch, sentence-transformers, 程序为 geotech-bertopic-topic-modeling.py,代表性例子:BERTopic(V0.9.0)主题模拟技术
(2) Top2Vec---Top2Vec不像BERTopic一样,可以任意选择预训练模型,目前它只内置了四种模型可供选择,默认的模型是Gensim的Doc2Vec, 另外三种模型是:
universal-sentence-encoder (USE)
universal-sentence-encoder-multilingual (USEM)
distiluse-base-multilingual-cased (DBMC)
USE和USEM依赖于Tensorflow,DBMC依赖于sentence-transforers模型, 由于我们的背景框架是Torch,因此目前只使用Doc2Vec和DBMC两个模型。在用GeotechSet数据集的测试中,发现DBMC得出的结果比Doc2Vec的结果好。BERTopic默认的数据集是paraphrase-MiniLM-L6-v2。程序为 geotech-top2vec-sentences.py,代表性例子:
主题模拟的艺术(The Art of Topic Modeling)---以Step-Path Failure为例
GeotechSet数据集主题模拟(Topic Modeling)
(3) sentence-transformers---SBERT使用sklearn的聚类算法也能产生主题模拟,程序为geotech-st-cluster.py,代表性例子:
3 问题对答
问题对答是信息检索和自然语言处理中的一项任务, 也是NLP中最难处理的一项内容, 该任务要求系统正确回答以人类自然语言提出的问题。在提取性问题解答方案中,通过提供一段文字,使用模型根据上下文来预 测 答 案在段落中的位置。这是一项非常具有挑战性的任务。在这个任务中,主要使用了三个数据集: 第一个数据集是mrm8488/bert-multi-cased-finetuned-xquadv1. 这个数据集是一个多语言预训练模型,由Google创建,并在XQuAD之类的数据上进行了微调,用于多语言(11种不同的语言)的问答任务。由于数据集基于SQuAD v1.1(SQuAD数据集包含大约15万个问题),所以数据中没有无法回答的问题, 以便模型可以专注于跨语言的转移。第二个数据集是bert-large-uncased-whole-word-masking-finetuned-squad,该数据集不区分字母大小写, 使用了屏蔽语言模拟masked language modeling (MLM) 目标对英语语言进行预训练。可以在问题回答管道中使用它,或者使用它来输出给定查询和上下文的原始结果。与其他BERT模型不同的是,这个模型使用了全词屏蔽Whole Word Masking技术进行训练。在这种情况下,一个词所对应的所有标记(tokens)都会被一次性屏蔽掉, 而整体屏蔽率保持不变。训练是相同的 -- 每个被屏蔽的WordPiece标记都是独立预测的。在预训练之后,这个模型在SQuAD数据集上用一个微调脚本进行了微调。第三个数据集是ktrapeznikov/albert-xlarge-v2-squad-v2。程序为 geotech-AutoModelForQuestionAnswering.py,代表性例子:
阅读理解回答问题(Question Answering)---一个更强的BERT预训练模型
Transformers之问题对答(Question Answering)
4 Longformer
上面的问题对答都使用了512个标记(token)序列, 当处理长文本超出这个限制时,就会发生错误,因而我们必须使用Longformer代替标准的Bert模型。Longformer在长文档任务中的表现优于其他大多数模型,可以明显减少内存和时间的复杂度。长文本的预训练模型使用valhalla/longformer-base-4096-finetuned-squadv1,这个模型基于SQuAD v1进行了微调, 可以处理最多4096个标记的序列。程序为 geotech-longtransformer-AutoModelForQuestionAnswering.py,代表性例子:
Longformer---回答问题长文本的Transformer
5 语义相似
迄今为止,发现SBERT是语义相似查询最好的方法,已经集成了几乎差不多所有验证可靠的Bert数据集。程序为 geotech-Sbert-similarity.py,代表性例子:
6 段落总结
Sentence-Transformers使用Lexrank库寻找文件中最核心的句子,这些中心句子用来构成文档总结。LexRank以基于图的句子中心性评分,是一种无监督的文本总结方法。其中心思想是,句子向读者 "推荐 "其他类似的句子。如果一个句子与其他许多句子非常相似,那么它将可能是一个非常重要的句子。这个句子的重要性也源于 "推荐 "它的句子的重要性。因此为了获得高排名并被放在摘要中,一个句子必须与许多句子相似,而这些句子又与其他许多句子相似。模型选用paraphrase-mpnet-base-v2,程序为 geotech-st-lexrank-summarization.py,代表性例子:
LaxRank抽取式文本总结(Text Summarization)
7 Zero Shot分类
另一种非常有趣的主题模拟技术称为零点文本分类(Zero Shot Text Classification),这种技术是根据用户指定的分类标签来判断一段文本是否属于这个类别。目前使用的是distilbert-base-uncased-mnli,该模型是uncased DistilBERT model在Multi-Genre Natural Language Inference (MNLI)上微调产生的。MNLI语料库包含大约433k个假设/前提对。它与SNLI语料库类似,但涵盖了一系列的口语和书面文本。程序为 geotech-zero-shot-classifier.py, 代表性例子:
零点文本分类(Zero Shot Text Classification)