n-gram
此处的TF和IDF的公式,都是sklearn中的tfidf使用的公式。和最原始的公式会有些出入。并且根据一些参数的不同而不同。
名词的解释:
corpus:指所有documents的集合
documents:词语的有序排列。可以是一篇文章、一个句子之类。
词频(TF)
在一份给定的文件里,词频(term frequency,tf)指的是某一个给定的词语在该文件中出现的频率。这个数字是对词数(term count)的归一化,以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词数,而不管该词语重要与否。)对于在某一特定文件里的词语
其中
文件频率(DF)
文件频率(document frequency, df)
逆向文件频率(IDF)
逆向文件频率(inverse document frequency,idf)是一个词语普遍重要性的度量。某一特定词语
其中,
有时候为了防止除零,也用一种分子分母都加一的公式计算,在代码中只要另参数smooth_idf=True
。即假设有一个document包含了所有的terms:
注意,在一般的教材中idf并不是像上面那样被定义的,而是:
TF-IDF
tf-idf 表示TF乘上IDF。这是信息检索中常用的一种term weighting, 在document classification中也很常见。
tf-idf计算式如下:
一般计算完后还会对tf-idf做L1或L2的标准化。
n-gram
1-gram 即 unigram: 本质是一个词出现的概率
2-gram 即 bigram: 本质是一个词出现的概率
3-gram 即 trigram: 同理
TfidfVectorizer
sklearn中的一个类
example:
from sklearn.feature_extraction.text import TfidfVectorizer
X_train = ['This is the first document.', 'This is the second document.']
X_test = ['This is the third document.']
vectorizer = TfidfVectorizer()
# 用X_train数据来fit
vectorizer.fit(X_train)
# 得到tfidf的矩阵
tfidf_train = vectorizer.transform(X_train)
tfidf_test = vectorizer.transform(X_test)
tfidf_train.toarray()
transform()函数返回的矩阵的储存形式是稀疏矩阵。
可以用toarray()函数得到一个ndarray类型的完整矩阵。
TfidfVectorizer构造时的一些常用的参数:
- max_df, min_df: 在建立单词表的时候会取df在[min_df, max_df]区间内的单词。使用整数时,表示单词出现的document个数,使用浮点数时,表示出现的document个数再除以总的document个数(即频率)。
- ngram_range: 取ngram的范围。