LSH ( https://github.com/soundcloud/cosine-lsh-join-spark ) を適用して、いくつかのベクトルのコサイン類似度を計算しようとしています。私の実際のデータには、2M 行 (ドキュメント) とそれらに属する 30K の機能があります。その上、その行列は非常にまばらです。サンプルを与えるために、私のデータが以下のようであるとしましょう:
D1 1 1 0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
D2 0 0 1 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0
D3 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1
D4 ...
関連するコードでは、フィーチャは次のように密なベクトルに配置されます。
val input = "text.txt"
val conf = new SparkConf()
.setAppName("LSH-Cosine")
.setMaster("local[4]")
val storageLevel = StorageLevel.MEMORY_AND_DISK
val sc = new SparkContext(conf)
// read in an example data set of word embeddings
val data = sc.textFile(input, numPartitions).map {
line =>
val split = line.split(" ")
val word = split.head
val features = split.tail.map(_.toDouble)
(word, features)
}
// create an unique id for each word by zipping with the RDD index
val indexed = data.zipWithIndex.persist(storageLevel)
// create indexed row matrix where every row represents one word
val rows = indexed.map {
case ((word, features), index) =>
IndexedRow(index, Vectors.dense(features))
}
私がやりたいのは、密行列を使用する代わりに疎行列を使用することです。「Vectors.dense(features)」を調整するにはどうすればよいですか?