参考资料
https://medium.com/marketingdatascience/%E9%80%8F%E9%81%8E%E6%A9%9F%E5%99%A8%E5%AD%B8%E7%BF%92%E9%A0%90%E6%B8%AC%E8%82%A1%E5%B8%82%E6%BC%B2%E8%B7%8C-%E9%80%B2%E9%9A%8E%E8%B3%87%E6%96%99%E8%99%95%E7%90%86-%E9%99%84python%E7%A8%8B%E5%BC%8F%E7%A2%BC-51b78718c82e
前情提要
消息面对投资者来说可谓重中之重,任何一微小的风吹草动皆不能放过。无奈的是,大部分投资者无法花费大量时间浏览所有可能带来价格影响的新闻。有鉴于此,我希望能透过机器学习以资料科学的角度掌握新闻标题对大盘的走向。以下将使用Reddit World News当日前25名热门的新闻标题作为示範处理资料。
缩写字词的处理
针对原始资料某些字词以缩写形式呈现,如 United States 简写为 U.S. 之情形,我们必需将这些缩写还原回其原本型态才能在后续建立模型阶段取得更好的表现。
片语 & 连续出现时产生特殊含义之词彙的处理
针对此类情况,这边用 n-gram 作为解决方式。
n-gram 是一种在进行 nlp (自然语言处理)时经常使用到的处理方法。简单来说,n-gram 是一种将句子以不同长度切分为各个字词的方法,n 即代表每次的切分长度。例如 「我喜欢资料科学」 在 n = 1 的情形下会切分为 「我」 ,「喜」,「欢」,「你」……以一个字为单位的形式; 假设 n = 2 ,即会切分为「我喜」,「喜欢」,「欢你」,……的形式,以此类推。除此之外,一般在进行资料分析时,遇到如「我喜欢你」 此种因顺序不同而具不同意义之句子时往往无法判读其真实语意,而运用 n-gram 即可透过 「我喜」,「喜欢」 等不同栏位来釐清原句语意。往后我们遇到原始资料中有四字成语、三字联词或两字片语的情形,也可以分别利用 4-gram 、3-gram、2-gram 将这些词彙切分出来,如下图所示。
ngram比较表
TfidfVectorizer套件
上述我们已完成建立机器学习模型前所需之资料清洗。接下来,我们必须从原始资料中所切分之所有字词挑选出较具有显着意义的字词,减轻一些过于氾滥或过于稀少的字词权重,并加强具显着意义字词的权重以试图增益机器学习模型的预测準确性。此处我们使用 Scikit-learn 套件底下之TfidfVectorizer 函数为我们进行字词权重的分配。TfidfVectorizer 是一个基于 Tfidf 指标所开发出的字词处理函数; 而 Tfidf 则是一种考量各字词在原始资料中的密度、稀少性、频率后将字词给予权重评分的一个指标,具体公式如下图。
TfidfVectorizer 能让我们轻鬆将原始资料进行 Tfidf 指标评分。好消息是,TfidfVectorizer 除却能够调配 Tfidf 权重过高或过低之字词,也支援一併进行 n-gram 处理。因此我们只要使用 TfidfVectorizer 即可将原始资料以快速地将原始资料进行 n-gram 处理并给予各字词 Tfidf 的权重分数。
程式码:
TfidfVectorizer(max_df,min_df,max_feature,ngram_range)
1.max_df:过滤超过比例的词语
2.min_df:过滤低于比例的词语
3.max_feature:限制特徵
4.ngram_range:建立词语组合
步骤完成后就可以将上图变成下图