社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

深度学习知识抽取:属性词、品牌词、物品词

机器学习AI算法工程 • 5 年前 • 2088 次点击  



向AI转型的程序员都关注了这个号👇👇👇

机器学习AI算法工程  公众号:datayx



序列标注任务是中文自然语言处理(NLP)领域在句子层面中的主要任务,在给定的文本序列上预测序列中需要作出标注的标签。常见的子任务有命名实体识别(NER)、Chunk提取以及词性标注(POS)等。序列标注任务在e成的主要应用有,简历解析时的字段切分、抽取工作经历(CV)和职位描述(JD)中的实体名词等。


更具体的任务有,在解析一段工作经历长文本的时候,我们希望提取其中的动宾组合来表示该应聘者之于此段工作经历的主要工作内容。以“ 了解市场情况  ,  进行一些项目的商务谈判 ”为例,HanLP分词器的结果为“ 了解市场情况  ,  进行一些项目的商务谈判 ”,此时可以提取的粗动宾组合有“了解- 情况 ”和“ 进行 - 谈判 ”,而我们更希望得到更加完整且意义更加丰富的宾语,因此需要将“市场 情况”合并为“市场情况”,将“商务 谈判”合并为“商务谈判”。因此,我们需要一个能够准确提取名词短语(Noun Pharse)的序列标注模型来克服NP字典召回不足的问题。

基础模型及扩展


很长一段时间,条件随机场(CRF)是序列标注任务的标准模型。CRF将句子中每个标记的一组特征作为输入,并学习预测完整句子的最佳标签序列。以命名实体识别为例,一些常见的特征有:标记本身、它的bi-gram和tri-gram、词性信息、chunk类型等。


目前主流的序列标注模型已经被神经网络所替代,基础的框架一般为循环神经网络(RNN)+CRF [1] 。这里我们使用双向RNN来提取序列中每一个标记的完整的过去和未来的上下文信息,而长短期记忆网络作为有效改进RNN梯度消失问题的网络已经成为RNN的标配。双向LSTM的层数一般设置为1-3层,也可以作为一个可调整的超参。



我们不再使用逐帧softmax的预测方法,而是将双向LSTM在每个时间步的输出作为CRF层的输入。CRF与softmax的最大差别在于,前者会学习各个预测标签之间的联系,比如“B-Chunk”的下一个标签必须是“I-Chunk”。






第一个改进方向是,探索词语内部的信息。以“工程师”这个词为例,可以拆解为“工”、“程”、“师”三个字符序列。通过叠加一层双向LSTM或者卷积网络(CNN)来提取词语内部序列的信息 [2] 。新的内部序列向量可以直接拼接在词向量后面,也可以通过attention的方式来决定词向量和内部序列向量的重要性程度,如下图右边所示。Attention方式通过学习权重系数z来获得全新的线性加权后的向量 



第二个改进方向是,基于字符粒度的输入,以其为基础输入的中文序列标注模型在很多论文中被证明是十分有效的。但是,只是使用字符信息往往是不够的,引入分词标记的信息能够大幅提升模型表现。另外,字符的bi-gram信息也是不错的补充信息。这里,我们将分词标签和字符bi-gram以同样的方式构建embedding的lookup表来获得对应的向量表示,与字符向量拼接在一起,组成综合的特征输入 .




另外,中文作为象形文字,较字母文字会有独有的形状特征 。如字形特征,或通过卷积网络来提取中文文字的图片信息。卷积后的向量表示即拼接在字符向量后。


中文的偏旁部首也是不错的特征,比如“钅”字旁表示该字符表示的是金属,来给予模型有效的字符信息。通过将每个中文字符映射成部首ID,随机初始化部首ID的词向量拼接在字符向量后面,来作为输入向量的补充。



一般的卷积网络也可以来尝试序列标注任务,但是卷积网络的特性决定它只能观察到N-gram的信息,无法考虑更远的上下文信息。而膨胀卷积 [6] 在保持参数个数不变的情况下增大了卷积核的感受野,同时它可以保证输出的特征映射(feature map)的大小保持不变。其中,亮黄色卷积核在最右边的膨胀卷积的视野为“法-工-程-师-职”,在中间的卷积网络需要再增加一层,才有5个字符的视野,但这样参数就变多了。同时,改善了卷积网络在提取序列特征时只能考虑局部窄视野的缺陷。



实验结果

首先,我们需要准备训练语料。为了考验模型的真实水平,在构建验证集和测试集的时候,随机抽取了一部分名词短语,确保训练集中不存在包含这些名词短语的句子。另外,将工作经历根据有效的标点进行了短句分句,形成短序列来减小网络的规模,共230万句短句,平均词数为20。在字符级别模型的预处理中,将英文单词和连续数字视为单个字符。

本文采用的标签标注方案是BIOE,考虑到中文名词短语中心词靠后的特点,我们给予末尾词以End标记以作区分。标注的方式采用前期通过统计方法取得的名词短语字典对工作经历文本进行最大匹配标注,来获得大量略带噪音的训练数据。


度量标准有两个,一是准确率(Accuracy),即每个词或字的标签准确率;其二是Chunk的F1分数,即该Chunk是否被精准预测,Chunk的范围必须准确被提取。

各个模型的在验证集上的准确率和F1,如下表所示:



其中,字符输入拼接分词信息加bi-char加偏旁部首信息的模型最终取得了87.66的最佳性能。另外,词级别的模型中,使用预训练词向量且拼接通过LSTM提取词内部字符信息的模型取得最佳。中文序列标注任务采用本文类似模型框架的相关论文中提及的最佳的F1一般在93-95左右,我们的推测是真实简历的工作经历数据中存在的不少脏信息和字典标注样本的缺陷造成了这一差距,也因此我们后续在改进样本质量和引入预训练策略上还有不小改进空间。


知识的抽取和挖掘一直是Data Mining、Knowledge Graph等NLP子领域的重要问题,知识抽取的范围包括实体抽取、关系抽取、属性抽取等,本文主要介绍深度学习在苏宁小店商品标题上的应用,重点挖掘属性词、品牌词、物品词等和业务强相关的实体信息。

知识抽取任务按照文本结构可分为以下几类:

面向结构化数据的知识抽取:比如用D2R从结构化数据库中提取知识,其难点在于对复杂表数据的处理,包括嵌套表、多列、外键关联等;采用图映射的方式从链接数据中获取知识,难点在于数据的对齐。

面向半结构化的知识抽取:使用包装器从半结构化(比如网站)数据中获取知识,难点在于包装器的自动生成、更新与维护。

面向文本的知识抽取:与上面结构/半结构化方式不同,由于非结构文本的知识格式基本上没有固定的规则可寻,业界也缺乏能直接应用于中文的处理工具,所以本文采用深度学习方法,重点关注word embedding质量的角度,从随机初始化向量到主流预训练方法,去有效提升抽取结果的准确率和覆盖率。


B-LSTM+CRF模型

B-LSTM+CRF是2016年卡耐基梅隆大学和庞培法布拉大学NLP组提出的一种解决NER问题的网络架构,并经实验在4种语言(英语、德语、荷兰语、西班牙语)上表现亮眼,其中在德语和西班牙语上取得了SOA效果,所以本文将采用这种网络结构作为苏宁搜索知识抽取任务的关键模型之一,下面先简单介绍这种模型。

相关代码获取

关注微信公众号 datayx  然后回复  CRF  即可获取。

AI项目体验地址 https://loveai.tech



模型框架

模型数据的输入采用两种方案,两种不使用任何分词算法,采用BIO的标注方法直接以“字”为单位做序列标注,第二种采用业务自定义的标签集对分词后的word进行标注。利用苏宁搜索平台累积的业务词表对苏宁小店的商品标题做自动标注,经过运营的筛选和剔除,获取干净的数据集。

这里以第一种标注方法为例(ATT:属性词,BRA:品牌词,GOD:物品词),以小店商品标题为单位,将一个含有n个字的title(字的序列)记作:



***层:look-up 层,利用word2vec或随机初始化的embedding矩阵将title中的每个字 xi 由one-hot向量映射为低维稠密的字向量(character embedding)xi∈Rd ,d是embedding的维度。在输入下一层之前,设置dropout以缓解过拟合。

第二层:双向LSTM层,自动提取title特征。将一个title的各个字的char embedding序列 (x1,x2,...,xn) 作为双向LSTM各个时间步的输入,再将正向LSTM输出的隐状态序列



对隐层的输出设置dropout后,再外接一个线性层,将隐状态向量从 m 维映射到 k 维,k 是标注集的标签数,从而得到自动提取的title特征,记作矩阵 P=(p1,p2,...,pn)∈Rn×k 。可以把 pi∈Rk的每一维 pij 都视作将字 xi 分类到第 j 个标签的打分值,如果再对 P 进行Softmax的话,就相当于对各个位置独立进行 k 类分类。但是这样对各个位置进行标注时无法利用已经标注过的信息,所以接下来将接入一个CRF层来进行标注。

第三层:CRF层,进行title级的序列标注。CRF层的参数是一个(k+2)×(k+2)的矩阵A ,Aij表示的是从第 i 个标签到第 j 个标签的转移得分,进而在为一个位置进行标注的时候可以利用此前已经标注过的标签。如果记一个长度等于title长度的标签序列 y=(y1,y2,...,yn) ,那么模型将整个title x 的标签标注为序列 y 的打分函数为:(公式1)




CRF层约束性规则

由于B-LSTM的输出为单元的每一个标签分值,我们可以挑选分值***的一个作为该单元的标签。例如,对于单元w0,“I-BRA”有***分值 1.5,因此我们可以挑选“I-BRA”作为w0的预测标签。同理,我们可以得到其他token的标签,w1:“B-BRA”,w2:“O” ,w3:“B-GOD”,w4:“O”。



虽然单纯的通过B-LSTM我们可以得到title中每个token的标签,但是不能保证标签每次都是预测正确的。例如,上图中的例子,标签序列是“I-BRA B-BRA”很显然是错误的。



在神经网络的输出层接入CRF层(重点是利用标签转移概率)来做句子级别的标签预测,使得标注过程不再是对各个token独立分类。B-LSTM计算出的是每个词的各标签概率,而CRF层引入序列的转移概率,最终计算出loss反馈回网络,所以上图在CRF的作用下,序列能根据转移概率做出符合常理的调整。

CRF层可以为***预测的标签添加一些约束来保证预测的标签是符合规则的,这些约束可以在训练数据训练过程中,通过CRF层自动学习到。

比如:

1、title中***个词总是以标签“B-” 或 “O”开始,而不是“I-”;

2、标签“B-label1 I-label2 I-label3 I-…”,label1, label2, label3应该属于同一类实体。例如,“B-BRA I-BRA” 是合法的序列, 但是“B-BRA I-GOD” 是非法标签序列;

3、标签序列“O I-label” 是非法的.实体标签的***标签应该是 “B-” ,而非 “I-”, 换句话说,有效的标签序列应该是“O B-label”。

有了以上自动学习到的约束规则,标签序列预测中非法序列出现的概率将会显著降低。


实验效果

论文[1]基于语料CoNLL-2003,在4种语言(英语、德语、荷兰语、西班牙语)上表现亮眼,其中在德语和西班牙语上取得了SOA效果。

在苏宁小店商品标题标注语料上,我们进行了随机初始向量和word2vec预训练的对比实验,实验1的方式比较粗糙,我们以“字”为单位,对非数字和字母的字符进行one-hot编码并经过look-up层获得字符的低维稠密编码,所有数字和字母的编码分别被固化;实验2对非数字和字母的字符采用word2vec预训练的编码方式;考虑到商品title中的数字和英文字母对编码的重要性,实验3对实验2稍加改造,同时训练出字母、数字的字向量;实验4舍弃实验3中基于character的编码方式,按照分词后的token重新标注后作为模型的输入,下表展示了实验结果(N表示未对字母与数字进行区分编码,Y相反):



从上面的实验可知,将每个字母与数字视为和汉字相同意义的字符后对F1值的提升有较大作用。从小店实际要提取的实体信息结构我们也可以知道,字母和数字是属性词、品牌词的重要构成部分,比如:1000g的洗衣粉,“1000g”是需要提取的属性词;HUAWEI p20手机套,“HUAWEI”是需要提取的品牌词。Word2vec对分词后的token进行预训练后,模型的准确率又得到了进一步提升,由此可见,word相对于char包含的语义更丰富,有助于模型参数的正确拟合。


BERT

BERT是google在2018年的代表作,其在11项NLP任务中取得SOA效果,几乎可以说是横扫各种牛马蛇神。BERT的主要创新在于提出了MLM(Mask Language Mode),并同时融入了预测句子的子任务,使Transformer可以实现双向编码。

Transformer是17年谷歌在论文《Attention is all you need》中提出的一种新的编解码模型。模型创新性的提出了self-attention机制,在克服传统RNN无法并行计算问题的同时,还能抽取到更多的语义信息,现在已经得到了工业界和学术界的青睐并有逐渐替代RNN、CNN等传统模型的趋势。

Self-attention机制利用查询向量Q、键向量K和值向量V获得了当前token和其他每个token的相关度,每个token根据这种相关度都自适应的融入了其他token的representation,用公式表示如下:(公式10)



论文《Attention is all you need》主要验证了Transformer在机器翻译中的良好表现,和本文训练word embedding的目标不一样,机器翻译是一个监督型任务,在给定的双语语料下,模型的输入是一个完整待翻译sentence,sentence中的每个token都并行参与编码,而词向量训练是一个无监督任务,常常使用传统NLP语言模型去***化语言模型的极大似然,从而得到每个token的representation,它仅仅考虑单向的token信息。说到使用transformer进行词向量训练就不得不提2018年OpenAI提出的论文《Improving Language Understanding by Generative Pre-Training》(简称GPT),但其在非监督预训练阶段使用的仍然是单向的语言模型,训练出的word embedding固然损失了许多精度。



最近openAI基于GPT的扩展又公布了新的通用NLP模型—GPT-2,无需预训练就能完成多种不同任务且取得良好结果,这个我们保持关注。言归正传,bert抛弃了传统的单向语言模型,创新性的提出了MLM语言模型,类似于word2vec中的CBOW模型,利用窗口内的上下文来预测中心词,同时引入预测下一句文本的子任务,有效解决了预测单词这种细粒度任务不能很好编码到句子层级的问题。

BERT从头训练的代价十分高昂,好在google开源了中文的预训练模型参数,所以本文直接用小店的商品标题语料对预训练好的模型进行fine-tune。



数据按照one-hot预处理好后喂给BertModel,再将模型输出的sequence embedding传入下游的B-LSTM+CRF,最终的标注结果相对实验3(word2vec+字+Y)提升2.002%,足以说明BERT的强大。

总结

深度学习较强的参数拟合能力,省去了许多繁琐的特征工程工作。本文介绍了几种常见的预训练方式,阐述了算法的基本原理并应用于苏宁小店商品标题的知识抽取任务。


阅读过本文的人还看了以下文章:


分享《深度学习入门:基于Python的理论与实现》高清中文版PDF+源代码


《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码


《深度学习之pytorch》pdf+附书源码


李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材


笔记、代码清晰易懂!李航《统计学习方法》最新资源全套!


《神经网络与深度学习》最新2018版中英PDF+源码


将机器学习模型部署为REST API


FashionAI服装属性标签图像识别Top1-5方案分享


重要开源!CNN-RNN-CTC 实现手写汉字识别


yolo3 检测出图像中的不规则汉字


同样是机器学习算法工程师,你的面试为什么过不了?


前海征信大数据算法:风险概率预测


【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类


VGG16迁移学习,实现医学图像识别分类工程项目


特征工程(一)


特征工程(二) :文本数据的展开、过滤和分块


特征工程(三):特征缩放,从词袋到 TF-IDF


特征工程(四): 类别特征


特征工程(五): PCA 降维


特征工程(六): 非线性特征提取和模型堆叠


特征工程(七):图像特征提取和深度学习


如何利用全新的决策树集成级联结构gcForest做特征工程并打分?


Machine Learning Yearning 中文翻译稿


蚂蚁金服2018秋招-算法工程师(共四面)通过


全球AI挑战-场景分类的比赛源码(多模型融合)


斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)


python+flask搭建CNN在线识别手写中文网站


中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程


不断更新资源

深度学习、机器学习、数据分析、python

 搜索公众号添加: datayx  

长按图片,识别二维码,点关注


AI项目体验

https://loveai.tech





Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/39597
 
2088 次点击