首先,我可能正在咆哮错误的树,因为我对ML一般都是新手,所以请耐心等待(如果是的话,请启发我:)。
我正在对我的博客文章进行聚类,以使用TF-IDF
和cosine 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>