作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想通过它们的字符串键值之一( description
)对 Javascript 对象进行聚类。我已经尝试了多种解决方案,并希望获得有关如何解决问题的一些指导。
我想要的是:
假设我有一个对象数据库。可能有很多(可能有数千个,也可能有数万个)。我需要能够:
categoryId
到他们每个人(代表他们所属的集群)。 hierarchical-clustering
的 npm
库)但是在 150 左右我将不得不等待大约一分钟。不会为数千人工作。 natural
的 npm
库来计算 TF-IDF 和 node-kmeans
)。 最佳答案
使用 tensorflow,可以创建一个深度学习模型,该模型经过训练后可用于预测传入单词的类别。
让我们假设这是数据集:
let data = [{description: 'just something', label: '1'}, {description: 'something else', label: '2'}]
const useModel = await use.load()
let features = data.map(d => useModel.embed(d.description))
features = tf.stack(features) // create a 2d tensor from the array of 1d tensor
let labels = tf.oneHot([0, 1], 2) // encode it as oneHot
// more details on labels encoding in this answer
// https://stackoverflow.com/questions/59127861/how-may-i-define-my-own-labels-in-tensorflow-js/59128300#59128300
const model = tf.sequential({
layers: [
tf.layers.lstm({ inputShape: [1, 512], units: 16, activation: "relu", returnSequences: true }),
tf.layers.lstm({ units: 16, activation: "relu", returnSequences: true }),
tf.layers.lstm({ units: 16, activation: "relu", returnSequences: false }),
tf.layers.dense({ units: numberOfCategories, activation: "softmax" }),
]
}) // in this example of the numberOfCategories is 2
[n, 512]
的输入形状用于指示模型将被输入
n
一个句子。如果句子的数量是可变的,则 inputShape 将为
[null, 512]
.
model.compile({
optimizer: "adam",
loss: "categoricalCrossentropy",
metrics: ["accuracy"]
})
model.fit(features, labels, {
epochs: number,// as needed to have a good accuracy
callbacks: {
onBatchEnd(batch, logs) {
console.log(logs.acc)
}
}
})
let prediction = model.predict( await useModel.embed('newWord').reshape([1, 1, -1])).argMax([-1])
prediction.print() // will print the index of the label
use
包有一个标记器;还有包裹
natural
.标记化后,
node-kmeans
可用于标记数据集。从这一步开始,可以使用第一种方法。
tf.pad
添加填充。
关于algorithm - 用于聚类(和分类)短句的 NLP 词袋/TF-IDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42245050/
我是一名优秀的程序员,十分优秀!