阅读427 返回首页    go 阿里云 go 技术社区[云栖]


Raúl Garreta大神教你5步搭建机器学习文本分类器:MonkeyLearn

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud


ecde75adfaeeb871783793dd4c811681e813ddfa

      用机器学习构建一个好的文本分类器是一项很有挑战性的工作。你需要构造训练集、调参、校正模型及其他事情。本文将会描述如何使用MonkeyLearn训练一个文本分类器,具体分为如下5步:

1.定义类别树

1.       娱乐

2.       饮食

3.       医药保健&美妆

4.       零售

5.       旅游&度假

6.       其他

1.       积极

2.       消极‘’

3.       中立

1.       配送问题

2.       支付问题

3.       产品问题

4.       折扣、优惠码和礼品卡

这个过程核心部分就是为你的类别创建一个合适的结构。当你想更加准确并且使用子类时,你需要定义一个层次树结构。在上面的例子中,你可以这样组织你的类别:

音乐会

电影

夜总会

2.饮食:

餐馆

酒吧

外卖

3.健康&美容:

头发&皮肤

水疗&按摩

化妆品

4.零售:

服装

电子产品:

电脑

智能手机

平板

电视机&录像机

5.旅游&度假:

酒店

机票

6.其他

1.结构。根据类别的语义关系组织类别结构。例如,“篮球”和“棒球”都应该是“运动”的子类。形成一个结构良好的类别树对分类器做出准确预测有很大帮助。

2.避免重叠。使用互斥且完备的类,并且避免定义歧义的和重叠的类:一段文本的所属类别应该是明确的,毫无疑问的。类别之间的重叠将会引起混淆,并且影响分类器的正确性。

3.不要混合分类标准。每个模型使用单一的分类标准。假设你要根据公司的描述对公司进行分类,你的类别可能包括B2B、B2C、企事业单位、金融、新闻传媒、建筑等。这时你可以构建两个模型:a)一个根据公司的客户进行分类(B2C、B2B、企事业单位);b)另一个根据公司经营的行业(金融、新闻传媒、建筑)。每个模型都应该有自己的标准。

4.由小及大。第一次训练模型时,建议从简单模型开始。复杂模型得付出更多精力才能达到足够好的预测效果。从少量类开始(少于10个类),类别树最多2层。

Zendesk、Intercom、Desk

Salesforce、Hubspot CRM、Pipedrive

Slack、Hipchat、Messenger、

Delighted、Promoter.io、Satismenter

数据库:Postgres、MySQL、MongoDB、Redis

数据分析平台:Segment、Mixpanel

爬虫框架

Python:ScrapyPyspiderColaBeautiful Soup

UptonWombat

Node CrawlerSimplecrawler

Goutte

PortiaParseHubImport.io

AngelListEbayFacebookFoursquareGitHubInstagramNew York TimesThe GuardianTumblrTwitterWikipediaYelp

可以从一些开放数据网站获取如KaggleQuandl 和 Data.gov.

如果你没有任何编程经验,ZapierIFTTT这些协作工具通过API授权,自动帮你将常用工具软件互联,将有助于你获取训练数据。

3.数据标记

拿到训练数据后,你要给这些数据打上对应的标签,才能形成完整的训练集。这可能需要你手动完成,但是对训练模型至关重要。通过打标签这种行为,你告诉机器学习算法对于一个特定的文本输入,你期望输出的类别是什么。分类器的准确度取决于初始标签的正确性

1.创建和上传数据后,使用MobkeyLearn GUI(下一节会详细解释)

3.Open Refine

有时你也可以在众包平台上外包你的数据标记工作,如Mechanical Turk,或者是外包给一些Upwork或者Freelancer上的自由职业者。

训练样本的数量取决于问题的复杂度以及模型中类别的数量。例如,训练一个用于对tweets进行语义分析的模型和训练一个识别商品评论主题的模型就不一样。语义分析问题更难解决,所以需要更多的训练数据。训练数据越多越好。我们建议每个类从最少20个样本开始。根据分类器取得的效果,逐渐增加训练数据。对于话题检测问题,使用200到500个训练样本会得到准确的模型。语义分析通常至少需要3000条训练样本才能得到勉强能接受的结果。

从少量样本开始训练模型更好,不过要百分百确定这些样本能够代表每一个类别,并且最开始手动标记的标签正确,而不是说增加存在大量错误的数据。海量的训练样本对机器学习算法固然重要,但是大量错误标记的样本,不关注数据本身,只会事倍功半。就好像用一本存在大量错误的历史书去教一个小孩,虽然他非常用功,可学到的知识终究还是错误的,又有什么用呢。因此训练开始阶段,使用标记正确的、高质量的训练数据。然后再通过增加更多高质量的数据提升分类器的准确度。

为了在MonkeyLearn中能够使用这些训练样本,数据最好保存为2列的CSV或者Excel文件:1列表示输入的文本,1列表示期望输出的类别。最后,把这个CSV/Execl文件上传到MonkeyLearn,就可以开始训练模型了。有编程功底的话可以直接使用MonkeyLearn的API上传数据。

1. 使用MonkeyLearn创建一个分类器,创建过程中需要完成一些相关信息;

2. 上传CSV、Execl数据文件;

3. 训练分类器,根据类别树的复杂度以及数据量,可能需要几秒到几分钟不等的训练时间。

训练好模型后,可以用一系列统计学上的指标来衡量分类器对新数据的预测能力。这些指标对理解模型、提升模型效果至关重要。这里有个例子可以看下。

正确率(Accuracy)是类别被正确预测的样本的比例,是对分类器整体上的评价。这个指标用来衡量父类对子类的区分度。在前面的例子中,当根类有6个子类(娱乐、饮食、健康、零售、旅游&度假、其他)时,“根类”准确率为80%。

e345ab6706d60db0889142e85b7ec5affc71438f

1.增加更多子类的训练数据;

2.对可能标记错误的样本重新标记(如下面混淆矩阵小节所示);

3.有时一些兄弟类存在歧义,尽可能合并这些类;

4311f037b6c2a81e934c9843bb68cf59fa80ee93

1. 使用混肴矩阵,查看模型的假正和假负;

2. 如果一个样本初始被标记为类X,但却正确地预测为类Y(真正类别就是Y),将这个样本移到类Y下;

3. 如果这个样本被错误预测为类Y,尝试让分类器更关注这种分类错误错误,增加更多X类和Y类的样本;

4. 检查类X和类Y的关键词是否正确(见关键字云小节)。

9c1e9061e3b63cdbb821ecc3c78e0db87f6f073a

87a3720b34e75d0f8d8ed083a137bd059e6cf235

548f2c2f25269bb6114638e1c1817cd82d1da67e

3f3fbbaa806557d7be0d0f4cb42af567c2e6e64b

2. 收集数据

3. 给数据打标签

5. 测试和提升:

指标(正确率,准确率和召回率)

假正和假负

混淆矩阵

关键词云和关键词列表

参数

1.手动给数据加标签;

最后要强调的是,训练数据在整个过程中至关重要。使用糟糕的训练样本训练模型,最终会导致大量错误;如果使用高质量的数据集,你的模型会变的准确,能使文本分析的过程自动化。

 

作者简介:


943d68d92b69d7dbf1c30ba2db41471140260381

Raúl GarretaMonkeyLearn 共同创办人兼 CEO,机器学习和自然语言处理专家,《Learning scikit-learn: Machine Learning in Python》一书作者。

 

本文由阿里云云栖组织翻译。

文章原标题《How to create text classifiers with Machine Learning

作者:Raúl Garreta译者:东东邪,审阅:

文章为简译,更为详细的内容,请查看原文

最后更新:2017-10-30 22:33:44

  上一篇:go  概率图模型
  下一篇:go  Mysql innodb存储引擎体系架构