文章总标题
A survey of pre-processing techniques to improve short-text quality: a case study on hate speech detection on twitter
文章书写动机
本篇文章书写的动机就是,鉴于当前在NLP领域中如果我们需要进行相关的短文本分类任务的话,那么我们就需要对于这些从社交平台上获取得到的进行预处理从而获取得到高质量的文本。通过对这些经过pre-process之后的文本进行Tokenization之后就可以得到高质量的Token,通过使用这些Token来执行分类任务我们就可以得到准确的分类结果。
通过上面的表述,我们就可以清晰地认识到的有一个效果好的即高效的Pro-process过程,从而获取得到高质量的短文本,对于实现分类结果的较高的准确性是多么的重要。
但是以往的文献总结中都是对于单个处理过程进行简单的应用,并没有进行全面的总结,更别说将这些single的pro-process model进行combine了。
所以,这篇文章的动机就是:对在NLP领域中对于Twitter小文章的进行pro-process的单个处理过程进行总结。同时,提出了对于这些单个模型的结合型模型有时候可以取得相比于单个模型而言更好的效果,但是呢,有时候不顾兼容性以及处理顺序的搭配对于combine model而言反而会导致性能下降,所以文中重点论述了在文中总结的这些single model中使用哪些single model进行结合,以及什么样的顺序结合可以取得最好的结果。文中进行了表述。
文章提到到的Pro-process single model
Removal of noise, URLs, hashtags & user mentions
文中提到对于一些不想要的字符串或者是文本的编码问题,通常是认为是在爬虫的过程中出现的遗留问题,被认为是数据中的噪声。有些内容像用户名或者一些相关话题的趋势,这些内容可能对于人类的角度来理解来看是十分有用的,但是从机器的角度来看就是没用的噪声,这种数据有时候在一些文献中使用标记进行替换。 比方说,上面提到的noise这里是肯定需要移除的,这是毫无疑问的。其余的,对于URL,有些链接的产生对于M来说是很难去使用其中的信息的,因此有时候也可以将这种URL划分为对M来说的noise,文中对于user mention举的例子就是@username,还有使用HashTag(#……)这种特殊的记号来表示这篇文章和某个Topic有关。此时前面的符号是需要去掉的。
因为带上这些记号对于人类来说可能是很有用的,但是对于计算机而言并没什么用,相反,还有可能影响他们进行Token之后的文本的质量。
Word segmentation
文中提到的这个word segmentation这种方法是用在hashtag上的一种分离短语、关键字和一些内容的方法,这里的hashTag就是经常在看微博的时候看到的#……
这种标记,小文章使用这种方式将自己的文章和某些相关的主题相关联。M使用这种方式将不同的Token分离出来从而有益于M理解这些内容,进行auto-classification。
主要的流程就是使用这种word segmention的场景是在上面的一步中将HashTag这种的 # 标记去除之后进行的word的分段操作。
Replacing emoticons and emojis
文中提到的Replacing Emotions and emoijs,这种方式的具体做法就是将推特评论中的相关的表情图标使用相关的文字去标注替换。比方说对于: )这种符号就是使用“happy”来进行替换,因为这种表情符,通常蕴含了十分重要的情感信息,因此不能简单的Missing。
Replacing abbreviation and slang
文中提到的replacing abbreviation and slang这个模块中提到的也是一种替换方式,但是这里替换的对象是缩略词和俚语,缩略词是很好理解的,就是对于一个短语或者是词语的缩写,而slang指的是俚语,这种不仅要考虑缩写还要考虑在具体的场景之下的语义,文中将这两种对象转换成对应的文本的含义。
Replacing elongated characters
这个模块中提到的预处理方式的处理对象是在一些文章中被作者有意拉长了的词语,文中使用了love和great这两个例子,
文中对于love使用了loooove,
对于Great使用的是Greeeeeat
这个预处理方法使用的做法就是将这些词语替换成他们的原本的样子,从而使得我们的分类模型在最后的分类时不会因为它跟原来的一些基本的单词不同而将这两个词因为是其他新的词语,从而使得最终的结果产生误分类的现象。
Incorrect spelling
文中在Incorrect spelling这个部分中提到的点就是对于拼写错误语法错误的句子进行纠正,如果对于这些部分进行纠正之后将会使得相同词义的不同表述减少。因为,如果不进行纠正的话,那么就会产生明明是语义相同但是表述不同,M会认为这是另一种表述,但是实际上这两种表示是一种表述,只是这里的表述中出现了拼写错误的问题。
Expanding Contractions
文中在Expanding Contractions这个文本场景中处理的问题是,如果说我们在推特评论中遇到的文本的描述是对于I am这种的缩写形式,就是使用一个,来代替两个词中间的字母,这种情况我们通常需要将这个缩写进行扩充,就是将这个缩写变成它原来的样子,不然的话就像can’t这种情况,最终表示出来的Token就是can和t,这种结果明显是和我们一开始预料的结果是大相径庭的。所以,对于M而言我们就需要事先将这些缩写形式的进行拆分。
Removing Punctuation
在文中对于Removing Punctuation这个表述中提到,对于自动分类的场景下,需要在预处理过程中先移除标点符号,因为标点符号对于我们理解文本还是很重要的,但是对于机器来说并不有效,但是对于某些表示情感的标点符号通常是不能够简单移除的,比方说?和!这种表情符号通常带有丰富的情感信息。通常可以使用surprise这种word来替代!
Removing Numbers
文中在Removing numbers中提到了在语料中有时候也包含一些不需要的数字,对于M进行自动分类也是有影响的,这种情况有人使用的方式是全部移除,但是这种方式并不好吧,如果在将这些俚语或者是缩略词进行转换之前就全部删除了,可能会丢失文本的信息,因此需要将有些在前面提到的俚语和缩略词转换成相应的original word之后再进行
删除。
文中举的具体实例就是:
2moro,如果我们使用口语的发音来理解就是tomorrow,如果我们已经事先将这里面的2给移除了,那么显然会导致结果出现问题。
因此,对于这种情况,我们需要做的就是在进行完缩略词和俚语的转化之后再进行numbers的删除。
Folding to lower-casing
这个部分其实就是对于英文字母进行统一转换为小写字母,这样的话,防止我们的M将明明是一个单词的大写表示看成了另一个不同的单词。因此进行了统一,都使用同一种表示方式。
Removing stop-words
文中在移除停用词这个部分提到“停用词”就是在文中大量出现——频率很高,但是不没有起到关键作用,这种词就称为停用词,这种词对于我们无论是是进行分类任务还是进行情感分析都是没什么用的。因此需要进行移除。通常指的停用词指的是“a, the, an……”这种没有什么实际意义的词。
Lemmatization
文中在词形还原中提到的做法就是将一个词还原成这个词原本的形式,也就是将这个词的形态进行去除。比方说,对于M来说它并不会认为一个词的不同词性代表的是相同的含义。相反,他会认为,这两个词需要区别对待。所以,我们就需要将同一个词的不同形式转换成为同一个原始的形式。
Combine Model
文中在这个模块中主要是提到了将上面的single model进行了结合,从而得到了这种combine的model。但是这种结合并不是一个简单的结合而是按照一定的一定执行顺序进行有序的结合这些Model。
上面所示,就是文中推荐的进行预处理的combine model方式。
首先需要做的就是移除所有的Unicode strings、URLs、user-mention还有hashtag#标记,然后紧接着做的就是使用与文中提到的这些表情包含义相同的相关单词将这些表情包进行替换,接着是拓展缩略词和俚语然后是对于拼写错误进行纠正、使用分解之后的单词来替换组合而成的缩写词、使用原本的root word将经过作者增长之后的words、移除标点符号、进行小写转换、词分段、移除文中的多余数字、移除文中使用的停用词,最后是将这些词语转换成这些词原来的样子。
通过上面的Pre-process过程之后,就可以进行Tokenize了。最后使用相应的分类器进行文本的分类任务。