语言文字

手把手:自然语言处理太难?按这个套路走,就是砍瓜切菜!

字号+作者: 来源: 2018-02-28 14:54 我要评论() 收藏成功收藏本文

大数据文摘作品 编译:小饭盆、周佳玉、笪洁琼、钱天培 豆瓣水军检测、《权游》续写、越来越神的谷歌翻译...... 最近自然语言处理(NLP)的各路应用可是被'...

 大数据文摘作品

 
编译:小饭盆、周佳玉、笪洁琼、钱天培
 
豆瓣水军检测、《权游》续写、越来越神的谷歌翻译......
 
最近自然语言处理(NLP)的各路应用可是被玩得风生水起。
 
这些NLP应用看起来炫酷到没道理,但其实背后的原理并不难理解。
 
今天,文摘菌就来扒一扒最常用的自然语言处理技巧和模型,手把手教你做一个简单神奇的小应用。
 
不吹不黑,90%的NLP问题都能用类似方法解决。
 
今天这个教程从数据处理的三大阶段教你自然语言处理:
 
收集,准备、检查数据
 
建立简单的模型(包括深度学习模型)
 
解释、理解你的模型
 
整篇教程的Python代码都在这儿啦:
 
https://github.com/hundredblocks/concrete_NLP_tutorial/blob/master/NLP_notebook.ipynb
 
赶紧开始吧!
 
第1步:收集数据
 
自然语言数据的来源太多啦!淘宝评论、微博、百度百科等等。
 
不过今天呢,我们要处理的数据集来自推特“社交媒体上的灾难”数据集(Disasters on Social Media dataset)。
 
我们将使用由CrowdFlower慷慨提供的一个名为“社交媒体灾难”的数据集。该数据集由一万多条与灾难有关的推特组成。
 
其中一部分推特确实描述了灾难事件,而剩下的则是影评、笑话等等奇怪的东西=。=
 
我们的任务将是检测哪些推文是关于一个灾难性的事件,而不是一个不相关的话题,如电影。为啥要这么做呢?有关部门就可以用这个小应用及时得到灾难事件信息了嘛!
 
接下来,我们将把有关灾难的推特称为“disaster”,并将其他推文称为“irrelevant”。
 
Labels标签
 
注意哦,我们用的是有标签的数据。正如NLP大神Socher所说,与其花一个月用无监督学习处理一堆没有标记过的数据,还不如花个一周时间标记一点数据,整一个分类器。
 
 
 
第2步:清洗数据
 
我们遵循的第一原则是:“再好的模型也拯救不了shi一样的数据”。所以,先来清洗一下数据吧!
 
我们做以下处理:
 
1. 删除所有不相关的字符,如任何非字母数字字符
 
2. 通过文本分隔分成单独的单词来标记你的文章
 
3. 删除不相关的字词,例如“@”推特或网址
 
4. 将所有字符转换为小写字母,以便将诸如“hello”,“Hello”和“HELLO”等单词看做相同单词
 
5. 考虑整合拼写错误或多种拼写的单词,用一个单词代表(例如“cool”/“kewl”/“cooool”)相结合
 
6. 考虑词形还原(把“am”,“are”,“is”等词语缩小为“be”这样的常见形式)
 
按照这些步骤并检查其他错误之后,我们可以开始使用干净的标记数据来训练模型!
 
第3步:找到一个好的数据表示方式
 
数据清理完了,我们还得把这些文字转换成数值——这样机器才看得懂嘛!
 
例如,在图像处理中,我们就需要把图片转换成一个表示像素点RGB强度数字矩阵。
 
 
 
一个笑脸代表着一个数字矩阵
 
自然语言处理中的表示稍微复杂一点。我们会尝试多种表示方法。
 
独热编码(词袋)
 
表示计算机文本的一种自然方法是将每个字符单独编码为一个数字(例如ASCII)。
 
例如,我们可以建立数据集中所有唯一字的词汇表,并将唯一索引与词汇表中的每个单词相关联。然后,每个句子都被表示为一个与我们词汇表中唯一字数量一样长的列表。在这个列表中的每个索引处,我们标记给定词语出现在我们句子中的次数。这就是所谓的词袋模型,因为它是一个完全忽略我们句子中单词顺序的表现形式。如下所示。

请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。本站管理员有权保留或删除评论内容。

相关文章
网友点评