文本表示的方法:
BOW(bag of words):
BOW可以理解为语料库的去重集合,并对集合内的每个单词做唯一索引。之后就可以用该集合构成的一维向量表示语料库中的句子。
假设有两个简单文档:
文档一:John likes to watch movies. Mary likes too.
文档二: John also likes to watch football games.
基于上述15个单词的语料库,构建如下一个字典(或者其他集合形式也行):
Vocabulary= {“John”: 1, “likes”: 2,“to”: 3, “watch”: 4, “movies”: 5,“also”: 6, “football”: 7, “games”: 8,“Mary”: 9, “too”: 10}
上面的词典中包含了10个单词且每个单词具有唯一索引。于是,我们可以利用这个字典,使用十维向量来表示文档一和文档二。
文档一:[1,2,1,1,1,0,0,0,1,1]
文档二:[1,1,1,1,0,1,1,1,0,0]
可以看出,由词向量表示的句子已经失去了句子本身的语法和语序等要素,仅仅能表示句子中每个单词的词频。
N-gram:
什么是N-gram:
N-Gram是一种基于统计语言模型的算法。它的基本思想是将文本里面的内容按照字节进行大小为N的滑动窗口操作,形成了长度是N的字节片段序列。
每一个字节片段称为gram,对所有gram的出现频度进行统计,并且按照事先设定好的阈值进行过滤,形成关键gram列表,也就是这个文本的向量特征空间,列表中的每一种gram就是一个特征向量维度。
该模型基于这样一种假设,第N个词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。这些概率可以通过直接从语料中统计N个词同时出现的次数得到。常用的是二元的Bi-Gram和三元的Tri-Gram。
N-gram中的概率计算:
如果我们有一个由 m 个词组成的序列(或者说一个句子),我们希望算得概率
根据链式规则,可得
这个概率显然并不好算,不妨利用马尔科夫链的假设,即当前这个词仅仅跟前面几个有限的词相关,即:
下面给出一元模型,二元模型,三元模型的定义:
当N=1时,一个一元模型(unigram model)为:
当N=2时,一个二元模型(bigram model)为:
当N=3时,一个三元模型(trigram model)为:
那么如何计算条件概率,答案就是数频次,用术语描述就是极大似然估计(Maximum Likelihood Estimation,MLE):
这里的C代表在该语料库中,该gram出现的次数。例如语料库为如下三句话:
使用bigram分词,容易统计出,“I”出现了3次,“I am”出现了2次,因此能计算概率:
同理可得:
另外再提供一个《Language Modeling with Ngrams》中的例子,Jurafsky et al., 1994 从加州一个餐厅的数据库中做了一些统计:
我们算出了“I want chinese food”这句话的概率,但有时候这句话会很长,那么概率(都是小于1的常数)的相乘很可能造成数据下溢(downflow),即很多个小于1的常数相乘会约等于0,此时可以使用log概率解决。一个句子得到的的概率越大,说明这个句子更加的合理。
N-gram的N大小对性能的影响:
- 经验上,trigram用的最多。经管如此,原则上,能用bigram解决,绝不用trigram。n>=4的情况较少
- 当n更大时:对下一个词出现的约束信息更多,具有更大的辨别力(但是,n太大,参数空间过大,产生维度灾难,也无法实用)
- 当n更小时:在训练语料库中出现的次数更多,具有更可靠的统计信息,具有更高的可靠性、实用性
TF-IDF:
TF的意思是词频(Term Frequency),IDF的意思是逆文本频率指数(Inverse Document Frequency)。TF-IDF是一种用于信息检索(information retrieval)与文本挖掘(text mining)的常用加权技术。可以用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。
TF指的是某一个给定的词语在该文件(注意这里的该文件与后面所有文本的区别中出现的次数,这个数字通常会被归一化(一般是词频除以文章总词数), 以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词频,而不管该词语重要与否)。计算公式如下:
而IDF逆向文件频率 (inverse document frequency, IDF) 反应了一个词在所有文本(整个文档)中出现的频率,如果一个词在很多的文本中出现,那么它的IDF值应该低。而反过来如果一个词在比较少的文本中出现,那么它的IDF值应该高。 假如我们的语料库是基于某个社交软件,那么一些专业的名词如“Machine Learning”,这样的词IDF值应该高。像a/an/the这样的词,在所有的文本中几乎都出现,那么它的IDF值就会很低。计算公式如下:
而TF-IDF就是将两者的结果相乘:
单单以TF或者IDF来计算一个词的重要程度都是片面的,因此TF-IDF综合了TF和IDF两者的优点,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。上述引用总结就是,一个词语在一篇文章中出现次数越多, 同时在所有文档中出现次数越少, 越能够代表该文章,越能与其它文章区分开来。 因此,TF-IDF倾向于过滤掉常见的词语,保留重要的词语。
TF-IDF应用:
(1)搜索引擎;(2)关键词提取;(3)文本相似性;(4)文本摘要