天池文本分类比赛
task3 基于机器学习的文本分类
通过对本次文本分本分类任务的学习和CS224n的第一课的学习,对于文本处理中word2vec的方法有了更加深入的理解。
- https://github.com/datawhalechina/team-learning-nlp/blob/master/NewsTextClassification/Task3%20%E5%9F%BA%E4%BA%8E%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E7%9A%84%E6%96%87%E6%9C%AC%E5%88%86%E7%B1%BB.md
- https://www.bilibili.com/video/BV1s4411N7fC?t=1558
- https://zhuanlan.zhihu.com/p/32829048
鉴于这是对文本任务处理的流程了解的task,我就谈谈自己对于这个任务现实中处理方式的理解。由于文本任务,不管是中英文, 还是别的外语,都无法作为数据直接送给SVM或则会深度学习分类器来处理,比如对数据进行数字化,通过定量的学习,才能完成最后的分类,生成,翻译, 对话等任务。那如何对于数据进行数据化就是我们这次任务的重点。
1. bag of word
词袋模型,就是把所有的单词统计出来,假设一共有N个不同的单词,那么每个单词就是一个N维的one-hot向量。语料中的句子就是所有单词对应向量的加和。
句子1:我 爱 北 京 天 安 门
句子2:我 喜 欢 上 海
#每个字的one-hot表示
我:[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
爱:[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
#句子表示
句子1:我 爱 北 京 天 安 门
转换为 [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]
这个实现可以直接调用sklearn中的 from sklearn.feature_extraction.text import CountVectorizer
2. N-gram
N-gram是一种基于统计语言模型的算法,基本思想是将文本里面的内容按字节进行大小为N的滑动窗口的操作,形成了长度为N的字节片段序列。
所以很关键的地方就是关于N的大小的选择
- n取较大值:
对下一个词的约束信息更多,更大的辨别力,但是更稀疏,N-gram的总数也更多。 - n取较小值:
语料中出现的次数更多,更可靠的统计结果,更高的可靠性,但是更少的约束信息
3. TF-IDF
TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术,常用于挖掘文章中的关键词,而且算法简单高效,常被工业用于最开始的文本数据清洗。
TF(t)= 该词语在当前文档出现的次数 / 当前文档中词语的总数
IDF(t)= log_e(文档总数 / 出现该词语的文档总数)
TF-IDF与一个词在文档中的出现次数成正比,与该词在整个语言中的出现次数成反比。所以,自动提取关键词的算法就很清楚了,就是计算出文档的每个词的TF-IDF值,然后按降序排列,取排在最前面的几个词
TF-IDF的优点是简单快速,而且容易理解。缺点是有时候用词频来衡量文章中的一个词的重要性不够全面,有时候重要的词出现的可能不够多,而且这种计算无法体现位置信息,无法体现词在上下文的重要性。如果要体现词的上下文结构,那么可能需要使用word2vec算法来支持。
以上就是本次的内容了。总结一下,这次学习了三种文本处理方法:
- bag of Word
- N-gram
- TF-IDF
其中的很多细节都是很值得深入学习的,后续有时间很另开一个专栏分享自己的心得。