如何为TF-IDF模型中的某些单词赋予更多权重?

时间:2016-04-28 07:11:35

标签: scala apache-spark machine-learning scikit-learn tf-idf

首先,我可能正在咆哮错误的树,因为我对ML一般都是新手,所以请耐心等待(如果是的话,请启发我:)。

我正在对我的博客文章进行聚类,以使用TF-IDFcosine similarity向当前查看的文章推荐相关文章。

它适用于简单的单词计数,但是我想通过将一些链接(如<a href="path-to-foo">FooArticle</a>)的文章相互更多权重(我认为类似于PageRank?)来调整它。 )。

我想过简单地将链接的文章名称添加到TF矢量中,但它看起来并不正确。

我应该怎么做呢?

我是否应该专门针对这些模型创建另一个模型(可能是不同的算法?)并通过z-score或其他内容进行组合?

总的来说,我很丢失。有人可以帮忙吗?

编辑:

以下是采用的代码(使用scala&amp; spark mllib):

val LinkedArticleTitleRegex = """(?<!http|https)^(\w+)$""".r
val hashingTF = new HashingTF()

import collection.JavaConverters._

val docs = articles.map(a => Jsoup.parse(a.content.body))

val tfidfVectors: RDD[Vector] = {
  val tfVectors = docs.map { doc =>
    val words = doc.select("p, li, h1, h2, h3, h4, h5, h6").text()
      .replace("\n", " ")
      .replaceAll("[^a-zA-Z ]", "") // only keep words and space
      .split(" ")
      .toVector
      .map(_.trim.toLowerCase)
      .filter(s => s.nonEmpty && !stopwords.contains(s)) // filter stop words and empty spaces

    hashingTF.transform(words)
  }

  val idfModel = new IDF().fit(tfVectors)

  idfModel.transform(tfVectors)
}

val linkedArticleTitles: RDD[List[String]] = docs.map(doc =>
  doc.select("a[href]").asScala
    .map(_.attr("href"))
    .collect { case LinkedArticleTitleRegex(articleTitle) => articleTitle }
    .toList
)

目前有两个功能集(tfidfVectors基于字数和linkedArticleTitles),我希望将它们组合在一起,同时为linkedArticleTitles功能集提供更多权重。< / p>

0 个答案:

没有答案