编者按:本文作者Emmanuel Ameisen是人工智能团队Insight的项目总监。本文总结了他们在处理各公司关于自然语言处理的问题时所遇到的问题,以及解决方法,最终汇成了这篇博文。本文为连载,今天给大家带来上半部分,主要讲述了数据的前期准备。以下是论智的编译。
不论你是一家已经成立的公司,还是正在准备发布新产品,你总能利用现成的文本数据改善、扩大产品的功能。有关自然语言处理(NLP)的技术问题也在日渐升温。NLP技术的产生丰富了我们日常的生活,然而,通过跟上百家公司的合作,我们Insight团队在服务过程中发现了一些经常出现的问题:
对不同用户进行定位(例如预测客户流失、顾客终身价值、产品偏好等)
精准检测,对不同的类别提取不同的反馈(积极与消极的评论、意见,对特殊特征的意见,例如衣服尺寸、是否合适)
根据不同的目的进行文本分类(例如寻求帮助、紧急求救等)
尽管网上已经有许多有关NLP的论文和教程,但我们发现,却仍然缺乏一份能有效解决NLP基本问题的指南。
通过一年时间对全美上百家公司的帮助,我们专门写了这篇针对自然语言处理的机器学习教程。我们将从最简单的方法入手,然后介绍更复杂的解决方法,例如特征工程、词向量以及深度学习。
读完这篇文章,你能收获到:
如何收集、准备、监测数据
建立简单的初始模型,甚至深度学习所必须的过度模型
解读并理解你的模型,保证能了解到文本的信息,并且没有噪音
虽然这是一篇教程帖,但也是一篇全面的总结帖。
数据来源采样
每个机器学习问题都从数据开始,比如大量的电子邮件、推特等。常见的文本信息来源包括:
产品评论(亚马逊、Yelp等手机软件)
用户产生的内容(在推特、Facebook上发表的评论,在Stack Overflow上的提问)
分析解决问题(用户需求、对话框等等)
“社交网络灾难”数据集
本文中,我们将选用CrowdFlower提供的名为“社交网络上的灾难”的数据集,其中志愿者搜索了10000多条含有“燃烧”、“隔离”、“混乱”等词语的推特,然后在表示灾难事件的推文上做标记(排除开玩笑以及非灾难性文字)。
我们的任务是判断哪些推特是关于灾难事件的,哪些是与灾难无关的话题(例如电影)。为什么?将要设计的应用要向专业的执法人员通报紧急情况,同时要忽略电影评论。其中的挑战在于,这个任务中的推文搜索词是相同的,所以我们要找出其中细微的差别。
本文的后半部分,我们将把关于灾难的推文称为“disaster”,无关的话题称为“irrelevant”。
标签
由于对数据进行了标记,所以我们能知道这条推文属于哪种类别。正如下Richard Socher所说,找到足够的数据并进行标记,要比对一种复杂、无监督的方法进行优化更快、更简单、更便宜。
我们遵循的一条原则是:“你的模型将配得上你的数据。”
数据可削减的关键技能之一就是了解下一步是否应该在模型或数据上工作。一个好的原则是先查看数据,然后进行清理。经过清洗后的数据集能使模型学习有意义的特征,而不是与无关的噪音过度拟合。
以下是用于清理数据的清单(请参阅代码以获取详细信息):
删除所有不相关的字符,例如任何非字母、数字的字符;
将您的文本分成单独的文字进行标记;
删除不相关的字词,例如“@”或者url;
将所有字母转换成小写字母;
将拼写错误的单词改为正确单词;
将“am”、“are”、“is”转换成普通的“be”
进行完这些步骤并检查其他错误后,就可以使用干净的标记数据来训练模型啦!
(未完待续……)