美文网首页Data Science For Business
10. 对文本的表达和分析

10. 对文本的表达和分析

作者: BT小芒 | 来源:发表于2020-10-24 02:14 被阅读0次

    Fundamental concepts:the importance of constructing mining-friendly data representations(构造易于挖掘的数据表现形式的重要性);representation of text for data mining(文本类数据的挖掘构型)

    Exemplary techniques:bag of words representation(词袋模型);TFIDF calculation(term frequency–inverse document frequency计算);N-grams(N-grams模型);Stemming(词干提取);Named entity extraction(命名实体抽取);Topic models(主题模型)

    这一章,先聊聊为什么文本分析很重要,又很困难,走起!


    Why Text Is Important

    现在文本沟通的场景越来越多了,也都有记录,数据源比较丰富。


    Why Text Is Difficult

    文本是语言结构的数据,供人类消费的而不是供计算机。

    词语有不同的长度,文章可以有不同的词汇数量,并且词语顺序有时有影响有时没影响。

    人经常会拼错单词,也会写语法错误。

    下面几个小节主要讲,如何为文本分析做数据准备和预处理。


    Representation(表示法)

    先明确几个术语:

    information retrieval(IR):信息检索;

    document:一单份文本,不论大小,都作为一个独立的分析的单元;

    corpus:语料库、文集,这里指的是多个document的一个合集。


    Bag of Words

    我们有一个documents集,每个单元都是一个相对自由排序的词汇,我们需要把这个状态转换到特征向量的形式上。

    词袋模型忽略了语法和词序、句子结构和标点。

    第一步的处理通常是将单词当做标记,如果单词出现了就标注为1,不出现标注0,从而排除部分不包含关键词的文档。

    Term Frequency

    图10-3 经过标准化和词干提取的样本,按照频率排序

    为了创造10-3的这个表格,需要进行如下几步处理:

    1. 词汇标准化,所有字母变成小写;

    2. 词干被提取了,词语后缀统一去掉了,复数词也被变成了单数词;

    3. 停用词(stopwords)被去掉了,停用词是经常被用到的词,比如the,and,of等。

    通常情况下数字会被直接忽略,但是在某些特殊场景下需要被统计,比如“4TB”和“1Q13”等。

    Note:粗心地删除stopwords,就像the road和on the road是两个完全不一样的作品,有时候直接删除stopwords并不是一个好的策略。

    这里还需要注意一个点,由于document集合里面的不同文章的长短不同,不能按照词的出现次数来判断,通常以这个词在文档中出现的比例来标记(频次除以总词数),避免长篇文本过多对分析结果造成影响。


    Measuring Sparseness:Inverse Document Frequency(稀疏性测量:关键词频次的反向方法)

    相对于词袋频次法的另外两种考量:

    1. 某个词不能过于稀少,数据分析时会对词汇的出现频率设置下限;

    2. 某个词不能过于普通,某个词汇在每个文档中都出现时对文档分类将没什么帮助,通常会对词语设置上限来规避这个问题。

    通常,一个词,在文集中越少的文档中出现,那么这个词就越能够表示出这几个文档的特征,也就是成为这些文章的标签词。

    这个稀疏性通常用下式表示,名为inverse document frequency(IDF)(逆文档频率),见公式1-01:

    IDF(t)=1+log(\frac{Total-number-of-documents}{Number-of-documents-containing-t} )

    图10-1 在一个100篇文档的文集里面,词汇t的IDF曲线

    通过IDF的图可以看出,词汇出现的越少(越左侧),IDF值越高,向右侧时无限接近1,大部分的stopwords的IDF值都在接近1的位置。

    Combining Them:TFIDF(他们结合起来,我们得到了TFIDF)(term frequency–inverse document frequency)

    某个词汇 t 在文档 d 中的TFIDF,可以用下面公式表示:

    TFIDF(t,d)=TF(t,d)\times IDF(t)

    TF值是每个单个文档中的词汇出现频次,IDF是跨文档的基于整个corpus的统计结果。

    这样每个文档就变成了一个特征向量(feature vector),然后corpus就是整个这些特征向量的一个汇集。

    单词挑选的时候可能会使用information gain来给词汇做排序,ig即是某个新增特征对总体样本的熵值减少量,参考本书56页。

    词袋法的问题在于,独立地对待每一个单词,把他们当做样本特征,但更多情况下,会对多种分析方法的结果进行对比。


    Example:Jazz Musicians(Jazz音乐家)

    这里列举了15份音乐家的自传文本,已经有2000个特征词了,在去掉了stopwords之后。

    这里的分析过程如下:

    第一步,基础的词干提取,结果如下图10-2:

    图10-2 针对句子“famous jazz saxophonist born in Kansas who played bebop and Latin”的词干提取后的结果

    第二步,去除stopwords,并且所有的词针对文档长度进行了标准化,如下图10-3:

    图10-3 针对句子“famous jazz saxophonist born in Kansas who played bebop and Latin”在去除stopwords后并进行了出现频次标准化后的结果。

    在文本中jazz和play在jazz音乐的文档中过于常见,所以不能从IDF中得到增值数值,已经变得类似于stopwords。

    这个句子的TFIDF如下图10-4所示:

    图10-4 针对句子“famous jazz saxophonist born in Kansas who played bebop and Latin”的TFIDF值。

    我们在做KNN的时候,使用了距离来聚类,此处我们使用类似的方法:

    1. 将句子转换为TFIDF表现,如图10-4;

    2. 计算每个音乐家的自传和这个句子的距离,并且选中距离最近的项。为了计算距离,我们使用余弦相似度公式(Cosine Similarity funnction)公式6-5:

    d_{Jaccard} (X,Y)=1- \frac{X\ast Y}{\vert\vert X \vert\vert_{2}\ast \vert\vert Y \vert\vert_{2}}

    距离的计算结果如下表10-4:

    表10-4 每个音乐家的自传和句子“famous jazz saxophonist born in Kansas who played bebop and Latin”的相似度,以相似度降序排列

    从数据相似度中可以看出最接近的是Charlie Parker,一个萨克斯管吹奏者,Kansas出生,还挺符合这个句子的关键词描述的。


    *The Relationship of IDF to Entropy(IDF和熵的关系)

    我们从公式开始一步步往下推导,首先一个单词 t 在文集中出现的概率可以如下式(书里面写document set,实际上应该理解为在corpus中某个文档中是否出现单词 t 的概率):

    p(t)=\frac{Number-of-documents-containing-t}{Total-number-of-documents}

    为了简化理解,我们把p(t)简化写为p,我们结合IDF的定义,可以得到某单词 t 的IDF为下式:

    IDF(t)=1+\lg (\frac{Total-number-of-documents}{Number-of-ducuments-containing-t} )

    这里1是一个不变量,我们忽略他,我们看到IDF(t)实际上就是\lg (\frac{1 }{p} ),然后又有\lg (\frac{1 }{p} )等于-\lg (p),考虑到corpus中的文档要么就包含 t (概率是p),要么就不包含t(概率是1-p),然后我们定义一个新的变量not- t,表示文档中不包含单词 t,那么这个新变量的IDF是多少?如下式:

    IDF(not-T)=\lg (\frac{1}{1-p} )=-\lg (1-p)

    图10-5 关于IDF(t)和IDF(not-t)的各个不同的情况的曲线

    图10-5的左上,两个图像是镜像分布的,现在回忆下公式3-1中对熵的定义,在一个二元概率p_{2}=1-p_{1}  中,熵值公式如下:

    entropy=-p_{1}\lg (p_{1} )- p_{2}\lg (p_{2} )

    在本章针对单词 t 的分析中,熵值的定义简化为如下式所示:

    entropy(t)=-p\lg (p)-(1-p)\lg (1-p)

    现在引入IDF(t)IDF(not-t),我们可以简化上方的公式,过程如下:

    entropy(t)=-p\lg (p)-(1-p)\lg (1-p)

    =p\cdot IDF(t)-(1-p)[-IDF(not-t)]

    =p\cdot IDF(t)+(1-p)[IDF(not-t)]

    可以看到公式已经简化成了一个简单的期望计算式,我们可以把熵值当做IDF(t)IDF(not-t)的的期望值来算,基于t在corpus里面出现的概率。它的图形在图10-5的左下角,可以对比下,和第三章的图3-3的熵值曲线是一致的。


    Beyond Bag of Words(词袋法延伸)

    词袋法是一般情况下的首选,而且很多时候效果也不错,也会被当做文本分析的起手方法,但是有时候其他方法更优秀,下面介绍几个。

    N-gram Sequences(N-gram序列)

    N-Gram是一种基于统计语言模型的算法。它的基本思想是将文本里面的内容按照字节进行大小为N的滑动窗口操作,形成了长度是N的字节片段序列。

    每一个字节片段称为gram,对所有gram的出现频度进行统计,并且按照事先设定好的阈值进行过滤,形成关键gram列表,也就是这个文本的向量特征空间,列表中的每一种gram就是一个特征向量维度。

    该模型基于这样一种假设,第N个词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。这些概率可以通过直接从语料中统计N个词同时出现的次数得到。常用的是二元的Bi-Gram和三元的Tri-Gram。

    (来自知乎摘录https://zhuanlan.zhihu.com/p/32829048)

    n-Gram的主要缺陷就是会导致feature的巨量增加,并且很多feature都是无用的,需要考虑用一些特殊手段来应对多feature的状况。

    Name Entity Extraction(命名实体提取)

    许多的文本处理工具会自带一个名字实体提取库。名字实体是对知识体系敏感的一种方法,需要对大量的文集进行训练才能得到名字实体清单。这些命名实体必须要大量学习来提前提取出来,或者手动录入进去词库。通常名字实体词库有行业或领域的特征,针对不同领域使用不同的词库。

    Topic Models(主题模型)

    考虑到语言的复杂性,有时我们会想要在文档和模型中间加入一个新的层级,如下图10-6所示:

    图10-6 通过一个topic layer(主题层)来对文档建模

    topic通常是通过非监督学习得到的结果,在执行搜索引擎检索时,可以使用主题检索来代替具体的item检索。

    我们可以把topic层当成一个词汇聚类分析的结果,由于是纯粹的算法聚类的,topic的结果有时候并不是为人们熟知的词汇,当然大部分情况下还是易于识别的。

    词汇聚类算法包括:matrix factorization methods(矩阵因子分解法)(如Latent Semantic Indexing)、Probabilistic Topic Models(概率主题模型)(如Latent Dirichlet Allocation),算法很复杂本书不展开,学有余力的同学可以自行研究。

    Note:Topic as Latent Information(作为潜在信息的主题)

    潜在信息挖掘的相关问题我们将在第12章讨论,这是一个在模型和具体词汇中间的一个神秘而力量强大的存在。


    Example:Mining News Stories to Predict Stock Price Movement(挖新闻故事来预测股价,刺激!)

    先提几个困难和简化的假设:

    1. 新闻对股价的远期影响是难以预测的,所以我们预测新闻当天的股价;

    2. 预测股票的价格是困难的,所以我们只预测方向,甚至只预测变或不变;

    3. 股价的小幅变动是不好预测的,所以我们来预测相对大的变动;

    4. 任何一个新闻都有可能影响任何一个股票的价格,他们之间的关联关系是难以判断的,所以我们要缩小因果半径(causal radius),我们假设只有这个文章提及了这个股票,才会对这个股票的股价有影响,这个假设不严格,因为竞争对手的新闻、客户的新闻都会影响股价,而这个文章中不会提到所有这些相关因素,但为了简化分析我们最好还是接受这个假设。

    如果一个股票涨超5%,我们称之为surge(飙升),如果跌超5%我们称之为plunge(跳水),这两者之间我们叫stable(稳定),同时我们加上一个灰度空间,避免4.9%和5%被判定为不同的结果,如下图10-7:

    针对这个问题,我们创造一个二分类问题,我们把surge和plunge当做change,为正,stable为负。

    The Data

    sidebar:The News Is Messy

    第一,消息的类型很多;第二,消息的格式很多;第三,文章中股票名称标记并不完全准确。

    Data Preprocessing(数据预处理)

    首先为了排除交易时间外事件的影响,排除掉这些事件导致的交易不稳定,我们用10点开始到下午4点收盘的价格当做价差算涨跌幅;

    由于我们想要增加文章和股票的关联性,所以去除掉提及了多个股票的文章;

    然后对剩下的文章进行标准化和词干提取并去除stopwords,最后,创造一个2阶n-grams模型,用terms和n-grams来表示每个新闻文章。

    数据分析完成后,发现75%的文章属于stable,13%属于surge,12%属于plunge,也就是25%属于change,75%属于no change。

    Results(结果)

    图10-9 新闻分类问题的ROC曲线

    排除股价预测和交易策略,单从图10-9看模型应用情况,有以下特征:

    1. 几种模型相对于随机挑选都有上弓,表示文章分析确实有有效性;

    2. 逻辑回归和朴素贝叶斯表现差不多,但决策树表现相对较差;

    3. 模型建对比,并没有发现显著的相对优势区域。

    剩下的分析感觉没啥可总结的,看看就好。

    sidebar:Prior Work on Predicting Stock Price from Financial News

    sidebar介绍了一些历史,当故事看。


    summary

    本章结束。

    相关文章

      网友评论

        本文标题:10. 对文本的表达和分析

        本文链接:https://www.haomeiwen.com/subject/ggwemktx.html