笔者参加“英特尔创新大师杯”深度学习挑战赛目前位列第15名,先将方案给出,欢迎批评指正,如有想上车参赛的同学请私信联系,另外提供代码和模型预测文件。
人类的活动离不开位置,从空间上可以表征为坐标,从文本上表征为通讯地址。通讯地址广泛存在于电商物流、政府登记、金融交通等领域。对通讯地址的分析、聚合服务已经是一项重要基础服务,支撑着诸多互联网场景,比如地图搜索、电商物流分析等。实际应用中,地址文本存在写法自由、缺省别名多、地域性强等特点,对地址的解析、归一和匹配等都造成困难。针对这些难点,阿里达摩院机器智能技术团队联合CCKS2021大会举办此次地址评测任务。该评测包含中文NLP的2个子任务,分别是:地址要素解析、地址相关性任务。
地址是日常生活中一种重要的文本信息,诸多场景需要登记地址,如电商购物、外卖配送、人口普查、水电气开户等。常见的地址一般包含以下几类信息:
行政区划信息,如省、市、县、乡镇信息;
路网信息,如路名,路号,道路设施等;
详细地址信息,如POI (兴趣点)、楼栋号、户室号等;
非地址信息,如补充说明,误输入等;
地址要素解析是将地址文本拆分成独立语义的要素,并对这些要素进行类型识别的过程。地址要素解析与地址相关性共同构成了中文地址处理两大核心任务,具有很大的商业价值。目前中文地址领域缺少标准的评测和数据集,这次我们将开放较大规模的标注语料,希望和社区共同推动地址文本处理领域的发展。
中文地址要素解析任务的目标即将一条地址分解为上述几个部分的详细标签,如:
输入:浙江省杭州市余杭区五常街道文一西路969号淘宝城5号楼,放前台
输出:Province=浙江省 city=杭州市 district=余杭区 town=五常街道 road=文一西路road_number=969号 poi=淘宝城 house_number=5号楼 other=,放前台
(详细的标签体系及标注规范将随标注数据一起公布)
我们通过将输出结果与人工标注的集合进行比较来分别计算每一种元素准确率(Precision),召回率(Recall)和F-1分值(F-1 score),并采用Micro-F1作为最终排名指标。
具体计算过程如下所示(以元素T为例):
给定一条地址输入(n),此地址中有x个T元素:
G_n={g_1,g_2,g_3…g_x},系统输出标注结果中有y个T元素如下:P_n={p_1,p_2,p_3…p_y},则实体标注的准确率定义如下:
实体标注的召回率定义如下:
实体标注的F1值定义如下:
其中N为整个测试集。
BERT 全称为Bidirectional Encoder Representation from Transformers(来自Transformers的双向编码表示),谷歌发表的发的论文Pre-traning of Deep Bidirectional Transformers for Language Understanding中提出的一个面向自然语言处理任务的无监督预训练语言模型。是近年来自然语言处理领域公认的里程碑模型。
BERT的创新在于Transformer Decoder(包含Masked Multi-Head Attention)作为提取器,并使用与之配套的掩码训练方法。虽然使用了双编码使得BERT不具有文本生成能力,但BERT在对输入文本的编码过程中,利用了每个词的所有上下文信息,与只能使用前序信息提取语义的单向编码器相比,BERT的语义信息提取能力更强。
下面距离说明单向编码与双向编码在语义理解上的差异
今天天气很差,我们不得不取消户外运动。
将句子中的某个字或者词“挖”走,句子变为
今天天气很{},我们不得不取消户外运动。
分别从单向编码(如GPT)和双向编码(如BERT )的角度来考虑“{}”中应该填什么词。单向编码只会使用“今天天气很”这5个字的信息来推断“{}”的字或词,以人类的经验与智慧,使用概率最大的词应该是:“好”“不错”“差”“糟糕”,而这些词可以被划分为截然不同的两类。
通过这个例子我们可以直观地感觉到,不考虑模型的复杂度和训练数据量,双向编码与单向编码相比,可以利用更多的上下文信息来辅助当前的语义判断。在语义理解能力上,采用双向编码的方式是最科学的,而BERT的成功很大程度上有此决定。
BERT的结构
参数
L L L:Transformer blocks;
H H H:hidden size;
A A A:self-attention heads;
: _{ }: BERTBASE: L=12, H=768, A=12, Total Parameters=110
_{ } BERTLARGE: L=24, H=1024, A=16, Total Parameters=340
无监督预训练深度双向语言模型
(1) Token Embeddings是词向量,第一个单词是CLS标志,可以用于之后的分类任务Segment (2) Embeddings用来区别两种句子,因为预训练不光做LM还要做以两个句子为输入的分类任务(3) Position Embeddings和之前文章中的Transformer不一样,不是三角函数而是学习出来的.
本文主要简略介绍个人参赛至今为止的进展和经验,另外提供更详细的方案解读和代码。想上车的小伙伴请私信联系,后续将继续更新进展和尝试更多模型参数。