Neural network 使用brain.js神经网络进行文本分析

Neural network 使用brain.js神经网络进行文本分析,neural-network,text-analysis,brain.js,Neural Network,Text Analysis,Brain.js,我正在尝试做一些文本分析,以确定给定的字符串是否。。。谈论政治。我想我可以创建一个神经网络,其中输入是一个字符串或一个单词列表(排序可能很重要?),输出是字符串是否与政治有关 但是brain.js库只接受0到1之间的数字或0到1之间的数字数组的输入。我怎样才能强制我的数据以完成任务?您需要提出一个模型,将数据转换为元组列表[input,expected\u output],其中input是表示给定单词的0到1之间的数字列表,而output是一个介于0和1之间的数字,表示句子与你的客观分析(政治)

我正在尝试做一些文本分析,以确定给定的字符串是否。。。谈论政治。我想我可以创建一个神经网络,其中输入是一个字符串或一个单词列表(排序可能很重要?),输出是字符串是否与政治有关


但是brain.js库只接受0到1之间的数字或0到1之间的数字数组的输入。我怎样才能强制我的数据以完成任务?

您需要提出一个模型,将数据转换为元组列表
[input,expected\u output]
,其中
input
是表示给定单词的0到1之间的数字列表,而
output
是一个介于0和1之间的数字,表示句子与你的客观分析(政治)的接近程度。例如,对于“敏捷的棕色猫跳过了懒惰的狗”这句话,你可能想给零分。像“总统摆脱腐败丑闻”这样的一句话,你可能想给一个非常接近的分数

正如您所看到的,您最大的挑战实际上是获取数据并对其进行清理。将其转换为训练格式很容易,您可以将单词散列为0到1之间的数字,并确保处理不同的大小写和标点符号,您可能希望单步执行单词以获得最佳结果


还有一件事,您可以使用术语相关性算法对训练数据集中单词的重要性进行排序,这样您就可以只选择句子中最重要的
k
相关单词,因为每个句子都需要统一的数据大小。

因此,显然文本无法很好地强制输入

一个朴素的贝叶斯分类器看起来正是我想要的

newbrain.recurrent.LSTM();
这对你有好处

例如

var brain=require('brain.js')
var net=新的brain.recurrent.LSTM();
net.train([
{输入:“我的单元测试失败了。”,输出:“软件”},
{输入:“尝试了该程序,但有缺陷。”,输出:“软件”},
{输入:“我需要一个新电源。”,输出:“硬件”},
{输入:“驱动器有2TB的容量。”,输出:“硬件”},
{输入:“单元测试”,输出:“软件”},
{输入:“程序”,输出:“软件”},
{输入:“电源”,输出:“硬件”},
{输入:“驱动器”,输出:“硬件”},
]);
console.log(“output=“+net.run”(“drive”));
输出=硬件
请参阅此链接=>
这对brain.recurrent.LSTM()有明确的解释和用法,我认为这不起作用,因为0到1之间的数字应该是连续的。这意味着“福克斯”可能会散列到0.492,“总统”可能会散列到0.493,而对于神经网络来说,这些输入实际上是相似的,但事实并非如此。“我现在正在研究NLP。@阿拉斯穆森不同单词的哈希值是否相近并不重要,只要它们是不同的。NN只需要为不同的单词获取不同的数字,然后它就可以自己进行关联。你唯一的问题是,如果“福克斯”和“总统”以某种方式散列到完全相同的值,但是如果你选择一个好的散列函数,你可以绕过这个问题。我认为这是不对的。你有消息来源吗?不幸的是我没有,这只是我的直觉。NN并不是解决这类问题的最佳工具,但不妨尝试一下,看看会发生什么。使用NLTK或类似工具对文本进行柠檬化,并将其输入NN,看看结果如何。这种方法之所以有效,效果良好,是因为每个字符代表网络中的一个神经元。一旦你通过一个有代表性的神经元抵消了网络值的表示,你就可以把几乎任何东西输入到神经网络中。听到了吗。。。这是我的思想爆炸的声音。谢谢你的回答@John很高兴这有助于我们知道可以有多少个类别(本例中有两个类别),如果有太多,这种方法会失败吗?