如何解决 90% 的 NLP 问题:分步指南

译 / 星与

文本数据无处不在

不管您是一家老牌公司仍是在推出一项初创服务,您都能够一向运用文本数据来验证,改进和扩展产品的功能。从文本数据中提取意义和进行学习的科学是被称为自然语言处理(NLP)。

NLP每天都会发生令人兴奋的新成果。与数多家公司协作之后@ C u & S ~,Insight团队发现一些频频呈现的首要的实际运用场景。

  • 辨认不同的用户群(例如,猜想客户丢掉、终身价值、产品w 9 H偏好)
  • 精确地检R U Z ^ ) o测和提取不同类别的反响(正面和负面点评/定见,提取特定特点,如衣服尺度/合身度…)
  • 猜想文本的目的(例如恳求根本协助、紧急问题)

尽管网上有许多NLP_ i ? u E @ E y论文和教J A ? u b ; r程,但咱们发现很难找到怎么从一开端就有用处理这些问题的辅导方针和技巧。

这篇文章的作用

在每年进行的很多项目和罗致的p { ; , n R建议和经历之后,咱们写了这篇文章来解说怎么构建机器学习处理方案来处理上述问题1 0 P P R O $ q &。咱( y z M y们将从最简略的可行办法开端,然后继续讨论更纤细的处理方案,如特征工程、词d J C g % H Z向量和深度。阅览之后你应该能够:

  • 搜集、预备和检查数据
  • 建立简略的模型开端,必要时过渡到深度学习
  • 解说并了解你的模型,以保证你确实获取到了有用的信息而不是噪声

咱们写这篇文章作为一个按部就班的指南;它也能够作为一个高效办法的概述辅导。除此之外这篇文章还附有一个互动笔记本(ipython notebook),演示和运用一切这些技能。请自由运用运转这些代码进行实践!

Step 1:搜集数据

示例数据源

每一个机器学习问题都是从数据开端的,比方电子邮件、帖子或推特的列表。文本信息的常见来源包括:

  • 产品谈论(亚马逊、Yelp和各种运用商店)
  • 用户原创内容(Tweets、Facebook帖子、StackOverflow问题)
  • 问题处理(用户诉E N ! j C b 9求、相关票证、聊天日志)

“交际媒体上的灾祸(Disasters on So, . B ccialE ? e – c { Media)”数据集

在本文中,咱们将运用Fip { =gure Eight大方供给的数据集,~ & W s = n %称为“交际媒体上的灾祸”,其中:

奉献者检查了10000多条经过各o ) 8 0 e W种搜索的推文,如l B . 3 : tN ) j T f ! o燃烧”、“隔离”和“紊乱”,然后辨认这些推文是否指灾祸事情(而不是用这个词恶作剧或电影谈论或其他非灾祸性的东西)。

咱们的使命是检测哪些tweet是关于灾祸性事情的,而不是无关的电影谈论。| b D [ c J为什么?一个可进行运用的场景是,向执法人员通报紧急情况,而疏忽对最近亚当桑德勒电影的谈论。这项使命的一个特殊挑战是,这两类内容都包括用于查找tweets的相同要害词词,因此咱们必须运用更纤细的差异来差异它们。

在这篇文章的接下来的部分,咱们将把关于灾祸的tweets称为“灾祸”,将关于其他: K e H p任何事情的tweets称为“无关”。

数据符号

咱们现已符号了数据,因此咱们知道哪些tweets属于哪些类别。正如Richard Socher在概述的,找到和符号满意的G t ! F数据来练习模型一般比试图优化杂乱的无监督办法更快、更简略、本钱更低。

Step 2:清洗数据

咱们遵从的榜首条规则是:“你的模型不会比你的数据更好。”

数据科学家的一项要害技能是知道下一步是处理模型仍是数_ f }据。一个好的经历法则是先看数据,然后再整理它。一个干净的数据集将答应模型学习有意义的特征,而不是过度适应不相关的噪声。

下面是用于整理数据的检查表:(有关详细信息,请参见代码):

  1. 删去一切不相关的字符,如任何非字母、数字、中文的字符
  2. 令牌化(Tokenize):将文本分割成独自的词语
  3. 删去不相关的词,例如twittl t a ~er中的“@”或ur
  4. 将一切字符转换为小写,以便将“hello”、“c } x q ; fhello”和“hello”等词语视为相同的意义
  5. 考虑将拼写过错或重复拼写的单词组转成一个表明(例如“c@ e d E lool“/”kewl“/”cooA x Xol“)
  6. 考虑引理化(lemmatization)(将“am”、“are”和“is”之类的词简化为比如“be”之类的常见办法)

在遵从这些过程并检查其他过错数据之后,咱们就能够开端运用干净的符号数据来练习模型了!, O o q H [ J

Step 3:找到一个好的数据表明办法

机器学习模型以数值为输入。例如,处理图画的模型采用表明每个色彩通道 x f s中每个像素强度的矩阵。

如何解决 90% 的 NLP 问题:分步指南

咱们的数据集是一个语句调集,因此为了让咱们的算法从数据中提取形式,咱们首要需求找到一种办法,让咱们的算法能够了解的办法来表明它,即转换为一个数字调集的表明: ] a 6

词袋模型(Bag of Words)

表明计算机文本的一种自然办法是将每个字符独自编码为一个数字(例如ASC| = nII)。假如咱们将这个简略的表明办法输入到分类器中,它将不得不依据咱们的数据从头学习单词的结构,这关于大多数数据集来说是不可能的。咱们需求用更高层次的办法。

例如,咱们能够构建数据会集一切词O N p [ (语的词表,并相关每个词语` V . W ,的唯一索引。然后,每个语句都被表明为一个列表,它的长度与咱们词表中不同单词的数量相同。在这个列表中的每个索引处,咱们符号给定单词在语句中呈现的次数。这被称为词袋模型(彻底疏忽了语句中单词的次序)。如下所示。

如何解决 90% 的 NLP 问题:分步指南

词袋模型表明语句。图中语句在左面D I u ` i,表明在右边。向量中的每个索引表明一个特定的词。

+ L – T G B & p H– H ^ 1嵌入(embeddings; 6 s ] v b j)可视化

在“交际媒体灾祸”的比如中,咱们的词表中大约有20000个单词,这意味着每一个语句都将被表明为长度为20000的向量。向量中首要包括‘0’,由于每个语句只呈现词表中一小部分词语。

为了检查咱们的嵌入是否捕获了与咱们的问题相关的信息(即tweets是x $ ) } N A j S R否与灾祸有关),最好将它们可视化,并检查不同类之间的分隔是否良好。由于词Y . 2汇表一般十分巨大,不可能在20000维中可视化数据,因此主成分分析(PP U $ `CA)等技能将有助于将数据投影到二维。如下面这张图。

如何解决 90% 的 NLP 问题:分步指南

这两个类看起来并没有很好地别g 9 6 ~离,这E b ; |可能是咱们嵌入的办法导致的一个特征,也可能仅仅咱们维度缩减导致的一个特征。为了验证词袋模型特征是否有用,咱们能够先用这些数据来练习分类器。

Step 4: 分类

一开端处理一个问题时,一般的最佳实践r L g 8是从能够处理这项使命的最简略的东西开端。每当涉及到数据分类时,逻辑回归(0 & | Logistic Regression)是一种通用性和可解说性很强的常用办法。这这个办法是练习十分简略而且成果是能够解说的,由于你能够很容易地& b Y从模型提取到最重要的参数、系数。

咱们将数据分为一个练习集和一个测验集,分别用来练习模型和` t g R # t Z +测验模型作用,测验集用来检查它对未看到的数据1 w a # U v + F的泛化程度。^ 6 B # i / M经过练习,咱们得到了75.4%的精确率。作用还不错!假如全部猜想最频频呈现的类(“无关”)只要57%。可是,即使75%的精度足以满意咱们的需求,可是咱们仍是需求在测验了解模型之后,再做模型的布置运用。

Step 5: 检查

混杂矩阵(Confusion Matrix)

榜首步是了解咱们的模型发生的过错类型,以及哪种过错是最不应该呈现的。在咱们的示例中,误报的正例是将“无关”的tweet猜想为灾祸,而误报的反例是将“灾祸”的tweet猜想为“无关”。假如咱们的首要C R ( 4 ] K使命是对每一个潜在的事情做出反响,咱们会期望下降咱们误报的反例。可是,假如咱们在资源上受到限制,M H q 7 ] _ X J咱们可能会优先考虑较低的误报的正例率,以减少误报: ` U带来的资源消耗。可视化这些信息的一个好办法是运用一个混杂矩阵,它将咱们的模型做出的猜想与实在的标签进行比较。抱负情况下,矩阵的散布是从左上角到右下角的对角线(咱们的猜想彻底符合事实)。

如何解决 90% 的 NLP 问题:分步指南

咱们的分类器发生的假阴性比假阳性多(按份额)。换句话说,咱们的模型最常见的过错是过错地将灾祸分类为无关的。假如假阳性+ ` 0 R k ,H c 1 W | 4表了履行的高本钱,这可能是咱们模型的一个较好的s s ] } [误差特性。

解说咱们的模型

为了验证咱们的模型并解说它的猜想,一个重要的方面是,看看1 | : b它是依据什么词来做猜想的是。假如咱们的数据是有误差的,那么咱们的模型会在样本数据中做出精确的猜想,可是在实际的场景中不会有很? 5 E l好体现。在这里,咱们? Z v a为灾祸类和无关类绘制权重最高的单词。用词袋和Logistic回归来绘制单词重要性很简略,由于咱们只需提取模型用于猜想的系数并对其进行排序。

如何解决 90% 的 NLP 问题:分步指南

+ m l ^们的模型正确地提取了一些形式(广岛,大屠杀),但显然好像在一些无意义的术语(heyoo,x13/ + } Y o : E q b92)上过拟合。现在,咱们的词袋模型` T g r r处理很多不同单词的词汇,并平等地处理一切单词。可是,这些词中有一些呈现十分频频,但只会给咱们的猜想带来噪声。接下来,咱们将测验用一种能够展示单词频率办法来表明的语句,看看咱们能否从数据中提取更多的信息。

Step 6: 词表的统计结构

TF-7 A V @ aIDF

为了协助咱们的模型愈加重视有意义的词语,咱们能够在咱们的词袋模型上运用TF-IDF分数(术语频率,文档反向频率)。TF-IDF依据单词在咱们的数据会集的稀有程度来衡量单词,对过l U V ~ _于频频且只会添加噪声的词语进行降权。下面这是咱们新的主成分分析嵌入输入的图2 j Y h j C v I画。

如何解决 90% 的 NLP 问题:分步指南

咱们能够看出这两种色彩之间有更清楚的散布差异。这将使咱们的模型更容易别/ J 7 u l . k ?离这两个类别。让咱8 l l t b们看? _ # L Y (看这是否会带来更好的体现。在新的嵌入数据上练习另一个逻辑回归,咱们达到了76.2%的精确率。

稍有改进。咱们的模型是否现已开端学习更重要的单词?假如咱们在避免模型“做弊”的一起获得更好的成果,那么咱们就能够真正地将此模型视为一种有用的改进。

如何解决 90% 的 NLP 问题:分步指南

它所选用的重要的词语看起来更有意义!尽管咱们在测验集上的精确率方针只} 9 – Z a n + 5 6略有添加,但咱们对模型新运用的词语有更自傲,因此在面向0 i E a r用户的体系中布置它会感觉更适宜。

Step 7: 运用语义

Word2Vec

咱们的最新的模型设法接纳更有意义的词语。可是,假如咱们布置这个模型,很可能会遇b p o { 2 o S到以前在咱们的练习会集没有看到的单词。之前的模型将无法精确地对这些没有见过的推文进行猜想,即使它b & –在练习期间看P c ~ L c H到了十分类似的词语。

要处理这个问题,咱们需求捕获单词的语义,这意味着咱们需求了解像“好的”和“积极的”这样的单词比“杏”和“大陆”的意义更相近,咱们将用来协助咱们捕获语义的东西 [ v i j 1叫做Word2Vec。

运用预练习过的词语r n y z

Word2Vec是一种寻觅单词嵌入连续性的技能。它经过阅览很多的文本和回忆在类似的上下文中呈现的单词来学习。在经过满意的数据练习后,它为词汇表中的每个单词生成一个300维向量,具有类似意义的单词互相9 j Z f 6 m在向量空间中更挨近。

这篇论文的作者开源了一个模型,该模型是在一个十分大的语料库上g ` T p –预练习过的,咱们能够运用这个语料库将一些语义常识包括到咱们的模型中。能够在与论文相相关的仓库中w P ` _ N找到预先练习过的向量。

语句级表明

为咱们的模型生成语句级嵌入的一个a O G 5 @快速办法是均匀咱们语句中一切单词的Word2Vec数字。这是一个像之前相同的词袋办法,可是这次咱们保留了一些语义信息,只丢掉了语句的语法。

如何解决 90% 的 NLP 问题:分步指南

下面是运用先前说到的技能新生成= W x –嵌入的可视化:

如何解决 90% 的 NLP 问题:分步指南

这两组色彩在这里看起来愈加别离,咱们的新嵌入应该协助咱们的模型找到两个类之间的别离特征。第三次练习同一个模型(逻辑回归)后,咱们达到了77.7%的精确率,这是咱T q C X ~ n e们迄今为止最好的成果!是时候检查咱们的模型了。

杂乱性/可解说性权衡

由于咱们的嵌入并不像之前的模型那样用每个单词一个维度的向量来表明; Q ] ( | D,所以很难看出哪个单词与咱们的模型最相关。尽管咱们仍然能够获得逻辑回归系数,但它们与嵌入的300个维度有关,而不是只与单词的索引有& ! : D f关。

关于如此低的精确性提升,而失掉一切4 @ : 8 I : J M可解说性好像是一个严格的权衡。可是,关于更杂乱的模型,咱们能够运用比如LIME这样的黑盒解说程序来了解咱们的模型是怎么作业的。

LIME

LIME是Github上供给了一个开源软件。一个答应用户经过改动输入(在咱们的比如中,从语句中删去单词)并检查猜想怎么改变的黑盒解说程序,来解说每个类别对一个特定示例的决策, 3 B M . u u {过程4 f 7 k J – k M

让咱们看看对数据会集语句的一些解说。

如何解决 90% 的 NLP 问题:分步指南

被挑选出来归类为“相关2 u V”的灾祸词

如何解决 90% 的 NLP 问题:分步指南

在这个比如里,单词对分类的奉献好像不太显着

可是,咱们没有时刻去探究数据会集的成千上万的] L Q比如。相反,咱们要做的是在一个有代表M b M ]性的测验用例样本上运转LIME,看看哪些单词会成为强有力的奉献者。运用这种办法,咱们能够得到单词重要性的分数,就像咱们之前的模型相同,用来验证咱们的! ( d J u Y I _ &模型的猜想,下面8 e ~ ; b M p 3是运用Word2Vec的词语重要性图表。

如何解决 90% 的 NLP 问题:分步指南

Step 8:运用端到端的实现来运用语法信息

咱们现已介绍了快速有用地生成语句级嵌入的办法。可是,疏忽了单词的次序,咱们丢掉了语句的一切句法信息。假如这些办法不能供给有用的模型成果,能够A q d A u运用更杂乱的模型,将整个语| Z 6 p Z ! |句作为输入并猜想标签,无需构建中间产物作为数据表明。常用的办法是运x U x r用W[ E w | # +ord2Vec或更新的模型(如GF ] |loVe或CoVe)将语句表明为词词语向量的序列。这便是咱们下面要做的。

如何解决 90% 的 NLP 问题:分步指南

高效的端到端架构(来源)

用于语句分类的卷积神经网络练习速度十分快,作业良好,是一种入门级的深度学习体系结构。N q P ) K f a D尽管卷积神经网络(CNN)首要以其在图画数据上的体现而闻名,但它们在文本相关的使命上也一向有优异的作用,而且一般比大多数杂乱的NLP办法(例如LSTMs和[编解码器架构](https://www.tensorflow.org/tutorials/seq2seq)练习快得多。该模型保留了词语的次序信息,并从中学习到有价值的信息,用于猜想6 & W L .咱们的方针类。与之前E } @ u –的模型不同点在于,它能够差异“Alex吃植物”和“植物吃Alex”

练习这个模型和之前的办法相比不需求太多的前R _ d O E置作业J 2 6 J – =(详见代码),而且获得了一个现在最优的模型,达到了79.5%的精确率!与之前的模型相同,下一步应该是运用咱们描绘的办法x K 4 F B来探究和解说猜想成果,以验证它确实是能够向用户布置的最佳模型。到现在为止,你应该能够处理比较合理地处理这个灾害猜想问题。

最后总结

下面是咱们这篇| Y i I b f 5 _ 6文章成功运用的办法的扼要X K Q i d t概述:

  • 从一个简略快捷的模型开端
  • 解说它的猜想
  • 了解它所犯的过错
  • 运用这些常识来辅导你下一步的作业,a o / V o 4 1 7 E不管是处理数据仍是更杂乱的模型。

尽管说到的这些办法被运用到一个特定的比如中,运用了专门为了解和运用短文本(如tweets)而定制的模型,可是这些思想广泛适用于各种问题。我期望这对你有9 S D所协助。

原文

blog.insightdatascience.com/how-to-sH K J !olv…