对于接下来三篇文章,我们的目标是构建两个NLP应用示例任务,文本分类和命名实体识别(NER
),通过迁移来自大型高性能预训练的基于Transformer的语言模型的知识来实现。
下面张图展示了典型的 BERT 应用流程:先使用大规模无标签文本预训练语言模型,再迁移到有标签的下游任务上进行微调,从而快速构建高质量 NLP 应用,比如文本分类和命名实体识别。
这一篇文章,我们先来探索本节课程中项目所使用的数据集和标注信息。深入了解这些数据的目的是提供一个清晰的模型输入视角,同时也让你了解未来在构建自己的数据集时可以如何组织结构。
1 语料库标注数据
NCBI-disease 语料库是一个在疾病提及和疾病概念级别上进行了完整标注的数据集,旨在为生物医学NLP社区提供研究资源。 它包含了793条PubMed摘要的语料数据,由14位标注者人工注释。
这些注释以HTML风格的标签插入到摘要文本中,并遵循明确的标注规则。标注内容是命名疾病实体,这些信息可以用于微调语言模型,以识别未来摘要中提到的疾病,无论这些疾病是否出现在原始训练集中。
下面是语料库中一条带标注的摘要示例:
10021369 Identification of APC2, a homologue of the <category="Modifier">adenomatous polyposis coli tumour</category> suppressor . The <category="Modifier">adenomatous polyposis coli ( APC ) tumour</category>-suppressor protein controls the Wnt signalling pathway by forming a complex with glycogen synthase kinase 3beta ( GSK-3beta ) , axin / conductin and betacatenin . Complex formation induces the rapid degradation of betacatenin . In <category="Modifier">colon carcinoma</category> cells , loss of APC leads to the accumulation of betacatenin in the nucleus , where it binds to and activates the Tcf-4 transcription factor ( reviewed in [ 1 ] [ 2 ] ) . Here , we report the identification and genomic structure of APC homologues . Mammalian APC2 , which closely resembles APC in overall domain structure , was functionally analyzed and shown to contain two SAMP domains , both of which are required for binding to conductin . Like APC , APC2 regulates the formation of active betacatenin-Tcf complexes , as demonstrated using transient transcriptional activation assays in APC - / - <category="Modifier">colon carcinoma</category> cells . Human APC2 maps to chromosome 19p13 . 3 . APC and APC2 may therefore have comparable functions in development and <category="SpecificDisease">cancer</category> .
在这个示例中,我们可以看到以下标签:
<category="Modifier">adenomatous polyposis coli tumour</category>
<category="Modifier">adenomatous polyposis coli ( APC ) tumour</category>
<category="Modifier">colon carcinoma</category>
<category="Modifier">colon carcinoma</category>
<category="SpecificDisease">cancer</category>
在我们这里,我们将任何被标注为category
(例如Modifier
、Specific Disease
等)的内容,统一视为“疾病”。
我们从此语料库中衍生出了两个数据集:一个用于文本分类,另一个用于命名实体识别。文本分类数据集将摘要按照三类疾病进行标注;命名实体识别数据集则为每个词标记是否属于疾病。
- 数据集下载地址:NCBI医学语料库
2 文本分类数据集
文本分类任务的目标是根据文本内容对其进行分类。典型应用包括情感分析(两类)和主题分类(多类)。为了理解我们需要什么样的数据集,首先得明确我们要问的问题。
情感分析
例如,如果我们正在分析电影评论,我们的问题可能是: 给定一句评论,情感是正面的还是负面的?
在这种分析中,我们对单个句子进行判断,仅包含两个类别:positive
和negative
。训练集中的每一句话都必须标注为其中之一。情感分析在企业中被广泛应用,用于识别客户对产品、品牌或服务的看法。
多类别分析
在我们的多类文本分类项目中,我们要提出的问题是: 给定一段医学疾病摘要,这段摘要是关于癌症、神经系统疾病,还是其他?
在我们的案例中,我们处理的是整篇摘要,而不是句子。我们识别了三类标签:cancer
、neurological
和other
。为了本实验的简化演示,摘要会依据其中提到的疾病所属类别进行标注。数据以.tsv
格式存储,类似.csv
,但用制表符(tab
)分隔列。
执行下方代码查看数据集的 .tsv
文件列表。
# 设置文本分类数据所在路径
TC_DATA_DIR = './data/NCBI_tc-3/'
# 列出该路径下的所有文件
!ls -lh $TC_DATA_DIR
输出如下:
我们可以通过pd.read_csv()
函数将.tsv
文件读入pandas
的DataFrame
对象中,并指定tab
为分隔符。.head()
用来显示前5行。每一行包括一条小写的摘要文本及其对应的标签。其中cancer
、neurological
和other
三类对应的标签值为 0、1、2。
import pandas as pd
# 列里的字符串内容完整显示,不会被截断
pd.options.display.max_colwidth = None
# 加载训练数据并显示前五行
train_df = pd.read_csv(TC_DATA_DIR + 'train.tsv', sep='\t')
train_df.head()
输出如下:
3 命名实体识别数据集
在命名实体识别(NER
)任务中,我们提出的问题是: 给定一段医学摘要句子,其中提到了哪些疾病? 这里我们的数据输入是句子,而标注则是疾病实体在句中的精确位置。下面是该数据集的相关信息。
# 设置 NER 数据路径并列出文件
NER_DATA_DIR = './data/NCBI_ner-3/'
!ls -lh $NER_DATA_DIR
输出如下:
NER 任务需要两个文件:一个是文本句子,另一个是标签文件。查看样本:
# 查看训练文本文件的前几行
!head $NER_DATA_DIR/text_train.txt
输出如下:
# 查看训练标签文件的前几行
!head $NER_DATA_DIR/labels_train.txt
输出如下:
IOB 标注法
我们可以看到,摘要被划分为句子,句子又被解析为单词,并标注了对应的标签,源自原始语料库中的HTML风格标签。
NER数据中的句子与标签采用的是inside, outside, beginning (IOB)
标注法。空格分隔的任意项都算一个词,包括标点。如下是第一句话的标注示例:
回顾原始语料标签如下:
Identification of APC2, a homologue of the <category="Modifier">adenomatous polyposis coli tumour</category> suppressor .
被标注文本的起始词adenomatous
使用了B(beginning
)标签;其余部分如polyposis coli tumour
使用 I(inside
)标签;其他未包含在实体内的词标注为O(outside
)。
4 总结
这篇文章主要探索了用于文本分类和命名实体识别任务的两个数据集结构。通过具体示例,我们了解了:
- 文本分类任务中,每条文本会被标注为某一类疾病(癌症、神经系统疾病或其他)
- NER任务中,每个词都被标注为 I、O或B,以识别医学文献中的疾病实体。
掌握了数据结构,就为后续构建BERT模型打下了坚实基础。下一篇文章,我们将正式进入模型构建部分,并了解如何使用NVIDIA NeMo工具包。