当前位置: 首页 > 科技观察

深度学习在苏宁知识抽取领域的尝试与实践

时间:2023-03-17 21:41:17 科技观察

【.com原稿】背景近年来,随着海量数据的积累、计算能力的提升和算法模型的革新,无论是学术界还是学术界,业界,深度学习在NLP领域受到越来越多的关注和应用,并取得了很多可喜的成果。知识抽取与挖掘一直是数据挖掘、知识图谱等NLP子领域的重要课题。知识抽取的范围包括实体抽取、关系抽取、属性抽取等。本文主要介绍深度学习在苏宁小店商品标题上的应用。重点挖掘属性词、品牌词、商品词等与业务强相关的实体信息。知识抽取任务根据文本结构可分为以下几类:结构化数据的知识抽取:例如使用D2R从结构化数据库中抽取知识,难点在于复杂表数据的处理,包括嵌套表、多表列、外键关联等;使用图映射从关联数据中获取知识,难点在于数据的对齐。半结构化知识抽取:使用包装器从半结构化(如网站)数据中获取知识,难点在于包装器的自动生成、更新和维护。面向文本的知识抽取:与上述结构化/半结构化方法不同,由于非结构化文本的知识格式基本没有固定规律可寻,业界缺乏可以直接应用于中文的处理工具,本文采用深度学习方法,关注词嵌入的质量,从随机初始化向量到主流的预训练方法,有效提高提取结果的准确率和覆盖率。B-LSTM+CRF模型B-LSTM+CRF是卡内基梅隆大学和庞培法布拉大学的NLP组于2016年提出的解决NER问题的网络架构,并经过4种语言测试(英语,德语,荷兰语)),Spanish),并在德语和西班牙语中实现了SOA效果,因此本文将使用该网络结构作为苏宁搜索知识抽取任务的关键模型之一。下面简单介绍一下这个模型。modelframe模型数据的输入采用两种方案,第一种不使用任何分词算法,采用BIO标注方式直接以“词”为单位标注序列,第二种采用业务定义的标签集对词进行分词对词进行标注。利用苏宁搜索平台积累的商户词汇,对苏宁小店的商品标题进行自动标注,经过运营筛选剔除后得到干净的数据集。这里以第一种标注方式为例(ATT:attributeword,BRA:brandword,GOD:itemword),以店铺商品的title为单位,记录一个包含n个字符的title(词序列)as:其中xi代表title的第i个词在词典中的id,暂时不考虑预训练,然后可以得到每个词的one-hotvector,维度为字典的大小。***层:查找层,使用word2vec或者随机初始化的embedding矩阵将title中的每个词xi从one-hotvector映射到低维稠密词向量(characterembedding)xi∈Rd,d是embedding方面。在进入下一层之前,设置dropout来缓解过拟合。第二层:双向LSTM层,自动提取标题特征。一个title的每个单词的charembedding序列(x1,x2,...,xn)作为双向LSTM每个时间步的输入,然后前向LSTM输出的隐藏状态序列和输出将反向LSTM在每个位置的隐藏状态根据位置进行拼接,得到完整的隐藏状态序列。为隐藏层的输出设置dropout后,连接一个线性层将隐藏状态向量从m维映射到k维。k为标签集的标签号,从而得到自动提取的标题特征记为矩阵P=(p1,p2,...,pn)∈Rn×k。pi∈Rk的每个维度pij都可以看作是将词xi分类到第j个标签的评分值。如果对P进行Softmax,相当于对每个位置独立分类k个类别。但是这样标记每个位置的时候,标记的信息是不能用的,所以接下来会接一个CRF层进行标记。第三层:CRF层,用于title-level的序列标注。CRF层的参数是一个(k+2)×(k+2)的矩阵A,Aij表示从第i个标签到第j个标签的迁移分数,然后可以在标记位置时使用之前标记过的标签。如果记录一个标签序列y=(y1,y2,...,yn),其长度等于标题长度,那么模型将整个标题x的标签标记为序列y的打分函数:(公式1)可以看出整个序列每个位置的得分等于每个位置得分的总和,每个位置的得分由两部分得到,一部分由LSTM输出的pi决定,另一部分由CRF的传递矩阵A决定。更进一步,可以利用Softmax得到归一化概率:(公式2)模型训练时,最大化log-likelihoodfunction,下式给出训练样本(x,y)的log-likelihood:(公式3)模型在预测过程中使用动态规划的维特比算法求解***路径,从而得到每个词的预测标签:(公式4)CRF层约束规则自B-LSTM的输出是每个单元的一个标签分数,我们可以选择分数最高的作为单元的标签。例如,对于单元w0,“I-BRA”的最高得分为1.5,因此我们可以选择“I-BRA”作为w0的预测标签。同理,我们可以得到其他token的标签,w1:“B-BRA”,w2:“O”,w3:“B-GOD”,w4:“O”。虽然我们可以简单地通过B-LSTM得到标题中每个token的标签,但是并不能保证每次都预测正确。例如,在上面的例子中,标签序列是“I-BRAB-BRA”,这显然是错误的。CRF层连接到神经网络的输出层(重点是利用标签转移概率)进行句子级别的标签预测,使得标注过程不再是每个token的独立分类。B-LSTM计算每个词每个标签的概率,CRF层引入序列的转移概率,最后计算出loss反馈给网络。因此,在上图中CRF的作用下,可以根据转移概率做出序列。调整。CRF层可以对预测标签添加一些约束,以保证预测标签符合规则。这些约束可以在训练数据的训练过程中通过CRF层自动学习。例如:1.标题中的第一个单词总是以标签“B-”或“O”而不是“I-”开头;2、标签“B-label1I-label2I-label3I-...”,label1,label2,label3应该属于同一类型的实体。比如“B-BRAI-BRA”是合法的序列,但是“B-BRAI-GOD”是非法的标签序列;3.标签序列“OI-label”不合法。实体标签的***标签应该是“B-”,而不是“I-”,换句话说,有效的标签序列应该是“OB-label”。有了上述自动学习的约束规则,标签序列预测出现非法序列的概率将大大降低。实验效果论文[1]基于语料库CoNLL-2003,在四种语言(英语、德语、荷兰语、西班牙语)中表现良好,其中在德语和西班牙语中实现了SOA效果。在苏宁小店商品标题标注语料库上,我们进行了随机初始向量与word2vec预训练的对比实验。实验一的方法比较粗糙。我们以“词”为单位,对非数字和字母字符进行one-hot。通过查找层编码得到字符的低维稠密编码,将所有数字和字母的编码分别固化;实验2对非数字和字母的字符采用word2vec预训练编码方式;考虑到商品标题中的数字和字母英文字母对编码的重要性,实验三对实验二稍作修改,同时训练字母和数字的词向量;实验四舍弃了实验三中基于字符的编码方式,根据分词后的token重新标注为模型Input,下表为实验结果(N表示字母和数字不区分编码,Y为相反):从上面的实验可以看出,将每个字母和数字看成一个与汉字同义的字符,提高了F1值。有更大的作用。我们也可以知道要从商店中提取的实体信息结构。字母和数字是属性词和品牌词的重要组成部分。例如:1000g洗衣粉,“1000g”是需要提取的属性词;HUAWEIp20手机壳,“HUAWEI”是需要提取的品牌词。Word2vec对分词后的token进行预训练后,模型的准确率得到进一步提升。可以看出,word比char包含更丰富的语义,有助于模型参数的正确拟合。ELMO上面B-LSTM+CRF输入的wordembedding是通过随机化或者word2vec训练得到的。这样得到的embedding质量不高,包含的隐藏特征非常有限,无法解决单词的多义性,比如“apple”,如果apple前面是eating、biting等可食用动词,那么apple代表一种fruit,也就是我们需要抽取的itemword。如果是“某款苹果手机”,或者标题中包含256g、gold等属性词,Apple就是我们需要提取的品牌词。由于word2vec模型的学习目标是预测词的出现概率,这种从海量语料库中学习到的词的通用语义信息不能直接应用于定制业务的匹配场景。ELMO由AllenNLP于2018年出品,被评为NAACL年度最佳论文。它的主要贡献是经过训练的词嵌入结合了丰富的句法和语义特征。作者将其添加到下游任务中。在六大挑战中SOA的效果在革命性的NLP任务中得到了实现。从官网给出的效果来看,基本是在原来SOA的基础上提升了2~4个百分点。模型框架及原理下面结合模型和源码的角度来分析一下这个神奇的模型。由于传统的NLP语言模型是一种单向概率模型,只使用前向词来预测下一个词,比如预测第k个词,表示如下:(公式5)所以这个模型的缺点很明显,就是不可能使用预测词右侧的信息,尤其是在完形填空、阅读理解、机器翻译等需要考虑上下文的??领域。还需要考虑单词的上下文信息等信息。只考虑右边信息的语言模型公式如下:(公式6)ELMO的创新点在于采用了双层B-LSTM模型,同时考虑了左右两边的信息,上面的将公式5和6合并为目标函数:(公式7)通过最大化上述似然函数,得到模型的参数。其中,表示模型初始化输入的token表示,分别表示前向和后向隐藏层的token表示,表示前向和后向的softmax参数,用于调整隐藏层的比例表示。当将训练数据输入到这个网络中时,经过一定次数的迭代训练,我们可以得到每个隐藏层的嵌入和初始标记。下面的k代表第k个token,j代表网络的层数:(公式8)以上是一个token的三层embedding综合表达。为了获得最终的嵌入,我们需要调整每个隐藏层(包括初始输入,作为第0层)在最终嵌入中的比例。论文中给出了这个公式:(公式9)其中,sj是一个与任务相关的权重,由softmax函数归一化得到。从源码可以看出,如果ELMO只用于生成词向量,不与下游任务结合使用,这里的任务指的是上面公式7的语言模型任务,而sj只是简单的推导出来“改进的”语言模型任务。接受培训。如果与下游任务结合使用,则由两者共同训练。根据论文,第一个隐藏层的embedding可以获得更多的语法特征,第二个隐藏层的embedding可以获得更多的语义特征,所以当下游任务是部分句法分析的任务时,会学到更多的s1,反之,如果下游任务偏向于语义分析,则s2相对较大。如何使用从是否使用预训练模型来看,ELMO有两种使用方式。第一种是直接使用官方的预训练模型,它给我们提供了预训练的模型参数,并给出了超参数(官方的预训练模型是基于10亿个英文token词的新闻语料,迭代训练103GTX1080s上的时间长达2周)。而我们的任务是中文对话数据的NER问题,我们不能直接使用它提供的好的模型,但是我们不妨看看官方的几种使用其预训练模型的方法:第一种是使用动态字符输入法来训练你的语料库,这种方法更通用但成本更高。它的好处是可以在一定程度上减少未注册词的影响。二是提前训练和缓存一些上下文无关的、没有歧义的词,这样你在使用的时候就不需要重复训练了。这种方法比1便宜,但是需要提前指定这些词。三是把你所有的语料,比如爬取的新闻数据,收集的对话数据等,都喂给ELMO,把训练好的***词向量和中间隐层词向量都存起来,等到下游的任务去就行了需要的时候直接加载。我觉得这个方法一开始比较费力,但是因为embedding可以复用,可以为以后的任务节省很多时间。当在下游任务中使用这些embeddings和预装训练时一样,只是做一个动态加权。上面介绍了使用预训练模型的方法。归根结底是在原有模型的基础上对模型参数进行微调,从而间接微调输出embedding,使输出embedding更符合当前上下文的语义。第二种方式从是否使用预训练模型来看:自然我们不直接使用预训练模型,那么我们需要从头开始训练所有的参数,这是非常昂贵的,但是如果我们想useELMOtogetChineseembedding,这个工作是必须做的,步骤如下:具体处理可以参考哈尔滨工业大学的博文(HowtouseELMowordvectorsforChinese)。实验结果说了这么多,EMLO解决了多义问题了吗?请看下图中作者的实验(论文[2]):Glove基于其embedding找到的最接近的其他词大部分集中在sportsfield,这显然是因为包含playin的句子中sportsfields的数量训练数据明显占优;而使用ELMO,根据上下文动态调整的embedding不仅可以找到对应的具有相同语义的“表演”句子,而且还可以保证找到的句子中play对应的词性也是相同的,这超出了预期。同样,在我们的苏宁小店商品标题知识抽取任务中,底层的预训练方式由上面实验4中的word2vec改为ELMO。对于同样的训练数据,通过实验得到的F1值略有提升,但不是很明显。下图采样了10万个苏宁小店的商品标题,统计了每个文字的字符数,大部分集中在10到20个字符之间。可能这种短文本包含的句法和语义信息是有限的,ELMO相对Word2vec学到的附加特征也有限。ELMO有什么缺点吗?明明有!由于ELMO的特征提取器使用了老牌的LSTM,其特征提取能力远弱于新贵Transformer,双层B-LSTM拼接方式的双向融合特征融合能力有偏。弱,所以这个模型架构还是有一些缺点,所以下面尝试使用18年大火的BERT架构作为底层wordembedding的encoder。BERTBERT是谷歌2018年的大作,在11个NLP任务上都取得了SOA效果,几乎可以说横扫各种动物。BERT的主要创新是提出MLM(MaskLanguageMode),同时加入预测句子的子任务,让Transformer实现双向编码。Transformer是谷歌在2017年的论文《Attention is all you need》中提出的一种新的编解码模型,该模型创新性地提出了一种self-attention机制,可以提取更多的语义信息,同时克服了传统RNN无法进行并行计算的问题。现在已经受到工业界和学术界的青睐,正在逐步取代RNN和CNN。和其他传统模型。自注意力机制使用查询向量Q、键向量K和值向量V来获取当前token与其他token之间的相关性,并且每个token根据这种相关性自适应地集成到其他token的表示中,使用formula表示如下:(Formula10)类似于CNN中的多核卷积运算。论文中也使用了多头机制,因为每个头都会将一个令牌与其他令牌相关联。这种关联或多或少强或弱,mutil-head通过拼接每个head的输出并乘以联合模型训练的权重矩阵,有效地扩展了模型关注不同位置的能力。(公式11)论文《Attention is all you need》主要验证了Transformer在机器翻译方面的良好表现。与本文训练词嵌入的目标不同,机器翻译是一项有监督的任务。在给定的双语语料下,模型的输入是一个完整的待翻译句子,句子中的每个token并行参与编码,词向量训练是无监督任务,往往使用传统的NLP语言模型最大化语言模型的似然性,从而得到每个Token表示,只考虑单向的token信息。说到使用transformer进行词向量训练,就不得不提到OpenAI在2018年提出的论文《Improving Language Understanding by Generative Pre-Training》(简称GPT),但它在无监督预训练阶段仍然采用了单向语言模型,并且经过训练的词嵌入当然会损失很多精度。近日,基于GPT的扩展,openAI公布了一种新的通用NLP模型——GPT-2,无需预训练即可完成多种不同的任务,并取得了不错的效果。我们一直在关注这一点。言归正传,bert摒弃了传统的单向语言模型,创新性地提出了MLM语言模型,类似于word2vec中的CBOW模型。它利用窗口中的上下文来预测中心词,并引入了预测文本下一句的子任务,有效地解决了细粒度的预测词任务无法很好编码到句子级别的问题。从头开始训练BERT的成本非常高。幸好谷歌开源了中文预训练模型参数,所以本文直接使用商店的商品标题语料库对预训练模型进行微调。数据按照one-hot进行预处理后馈送到BertModel,再将模型输出的sequenceembedding传递给下游的B-LSTM+CRF。最终标注结果比实验三(word2vec+word+Y)高出2.002%,足以说明BERT的强大。总结一下深度学习强大的参数拟合能力,省去了很多繁琐的特征工程工作。本文介绍了几种常见的预训练方法,阐述了算法的基本原理,并将其应用于苏宁小店的商品标题知识抽取任务。苏宁搜索团队在NER、关系抽取、事件抽取、共指消解等知识挖掘子任务上有很多尝试和实践。限于篇幅,本文不作介绍。欢迎读者关注后续文章分享。参考文献1.LampleG、BallesterosM、SubramanianS等。命名实体识别的神经结构[J]。arXiv预印本arXiv:1603.01360,2016.2,PetersME,NeumannM,IyyerM,etal.深度语境化词表征[J].arXiv预印本arXiv:1802.05365,2018.3、DevlinJ,ChangMW,LeeK,etal.伯特:用于语言理解的深度双向变换器的预训练[J]。arXiv预印本arXiv:1810.020108。,https://github.com/allenai/bilm-tf5,https://allennlp.org/elmo6,张俊林。FromWordEmbeddingtoBertModel-自然语言处理预训练技术发展史7、DL4NLP-SequenceLabeling:BiLSTM-CRFmodelforcharacter-basedChinesenamedentityrecognition8、简书御风知行。BiLSTM模型9中CRF层的工作原理,TheAnnotatedTransformer10,RadfordA,NarasimhanK,SalimansT,等。通过生成式预训练提高语言理解能力[J].作者简介陆建新,苏宁搜索研发中心算法工程师。主要从事语义理解、知识图谱、对话系统的研究与开发。在机器学习和深度学习方面有丰富的实践经验。李春生,苏宁易购搜索技术总监,负责产品、智能、搜索技术线架构设计和核心技术规划。在搜索领域拥有多年的实战经验。从0到1打造了苏宁易购搜索平台,从业7年多。精通搜索架构设计和性能优化。同时,在机器学习、大数据等领域具有丰富的搜索场景化应用经验。孙鹏飞,苏宁易购搜索算法团队负责人,专注于自然语言处理、搜索排名、智能问答等领域的研究。带领团队从零开始构建搜索排名系统、个性化系统、智能搜索系统、防作弊系统。具有丰富的产品算法优化和工程应用实践经验。【原创稿件,合作网站转载请注明原作者和出处为.com】