1、tf-idf

1.1 tf-idf原理

TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。

TF-IDF有两层意思,一层是”词频”(Term Frequency,缩写为TF),另一层是”逆文档频率”(Inverse Document Frequency,缩写为IDF)。

  • TF:指的是某一个给定的词语在该文件中出现的次数。
  • IDF:是一个词语普遍重要性的度量。某一特定词语的IDF,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取对数得到。(给常见的词语较小的权重)

当有TF(词频)和IDF(逆文档频率)后,将这两个词相乘,就能得到一个词的TF-IDF的值。某个词在文章中的TF-IDF越大,那么一般而言这个词在这篇文章的重要性会越高,所以通过计算文章中各个词的TF-IDF,由大到小排序,排在最前面的几个词,就是该文章的关键词。

缺点:**很明显的用TF来判断一个词在文章中的重要性是不合理的,而且这种计算无法体现位置信息,无法体现词在上下文的重要性。

1.2 sklearn例子

  1. from sklearn import feature_extraction
  2. from sklearn.feature_extraction.text import CountVectorizer
  3. from sklearn.feature_extraction.text import TfidfTransformer
  4. corpus = ['aaa ccc aaa aaa',
  5. 'aaa aaa',
  6. 'aaa aaa aaa',
  7. 'aaa aaa aaa aaa',
  8. 'aaa bbb aaa bbb aaa',
  9. 'ccc aaa aaa ccc aaa'
  10. ]
  11. vectorizer = CountVectorizer()
  12. # 转换为词频矩阵
  13. X = vectorizer.fit_transform(corpus)
  14. # 获取词袋模型中的所有词语
  15. word = vectorizer.get_feature_names()
  16. print(word)
  17. # 获取每个词在该行(文档)中出现的次数
  18. counts = X.toarray()
  19. print (counts)
  20. transformer = TfidfTransformer()
  21. tfidf = transformer.fit_transform(X)
  22. #tfidf = transformer.fit_transform(counts) #与上一行的效果完全一样
  23. #print(tfidf)
  24. print(tfidf.toarray())

2、word2vec