node.js - TensorflowJS 文本/字符串分类
问题描述
主题
你好。我想在NodeJS
.
它的工作是将字符串与一些预定义的主题相匹配。
例子:
输入::String
“我的狗喜欢在沙滩上散步”
预定义的主题::输出Array<String>
:有很多我喜欢的输出变体。这些是一些例子,但如果你能提出更好的建议,那就去做吧!["dog", "cat", "cow"]
String
(最有可能的主题) - 示例:“狗”Object
(每个主题都有一个预测分数)
示例:{"dog": 0.9, "cat": 0.08, "cow": 0.02}
研究
我知道可以通过过滤主题名称的字符串并执行一些算法来实现类似的结果,但也可以使用 ML 来实现。
已经有一些关于使用字符串、分类文本和使用 TensorFlow 创建自动完成功能的帖子(但不确定TFjs
),如下所示:
- https://www.tensorflow.org/hub/tutorials/text_classification_with_tf_hub
- http://ruder.io/text-classification-tensorflow-estimators/
- https://machinelearnings.co/tensorflow-text-classification-615198df9231
你可以如何提供帮助
我的目标是用TensorflowJS
. 我只需要一个示例,说明使用字符串训练模型或如何对文本进行分类的最佳方法,然后我将自行扩展其余部分。
解决方案
文本分类有一个额外的挑战,即首先从单词中找到向量。根据所解决问题的性质,有多种方法。在构建模型之前,可以确保将向量与语料库的所有单词相关联。在从语料库中表示向量后,又遇到了另一个稀疏问题。因此产生了词嵌入的需要。该任务最流行的两种算法是Wor2Vec和GloVe。js中有一些实现。或者可以使用此处概述的词袋创建向量。
一旦有了向量,完全连接的神经网络 FCNN 就足以预测文本的主题。其他要考虑的事情是决定文本的长度。如果文本太短,可能会有一些填充等......这是一个模型
const model = tf.sequential();
model.add(tf.layers.dense({units: 100, activation: 'relu', inputShape: [lengthSentence]}));
model.add(tf.layers.dense({units: numTopics, activation: 'softmax'}));
model.compile({optimizer: 'sgd', loss: 'categoricalCrossentropy'});
模型的关键要点
该模型只是将输入连接到分类输出。这是一个非常简单的模型。但在某些场景下,可以考虑在输入层之后添加嵌入层。
model.add(tf.layers.embedding({inputDim: inputDimSize, inputLength: lengthSentence, outputDim: embeddingDims}))
在其他一些情况下,LSTM层可能是相关的
tf.layers.lstm({units: lstmUnits, returnSequences: true})
推荐阅读
- flutter - 输出光标在文本字段中的位置
- javascript - Chartjs 线图点悬停动画 buggy / jumpy
- angular - Cors-anywhere 在 Angular 应用程序的生产中无法在 chrome 中工作
- mongodb - 使用 Java 与 MongoDB 交互时出现异常
- javascript - 如何理解在javascript反应中将数组转换为treeArray的函数代码片段?
- amazon-web-services - client.Timeout 在等待标头时超出
- node.js - 为什么子字段在不同的接口时会发生冲突?
- c++ - 不能在 C++20 中将 std::cin 与 char* 或 char[] 一起使用
- javascript - 如何像 Google Meet 那样缩小屏幕共享选项?
- azure - 用户无法访问正确的 Azure 门户