我试图进入机器学习,但我不知道如何真正开始。 我不知道标题是否合适,但我找不到合适的标题(随时可以编辑)。
这篇文章分为两部分:
好吧,我的数据结构是这样的(例子来自我制作的样本生成器):
{"word":"SuPPIndd",
"data":[[38,80,39,71,4,88,93,62,19,0,90,24,19,81,79,42,53,-37,-14,-88,-51,-40,-16,-49,74,-20,100,86],
[41,69,39,82,21,71,70,71,35,1,94,27,29,79,78,65,49,-17,-14,-100,-55,-45,-17,-29,81,2,100,93],
[60,82,30,83,9,81,82,73,12,11,95,20,33,75,100,59,69,-30,-9,-100,-65,-49,-10,-43,57,-2,100,98],
[34,79,27,69,16,69,66,79,38,14,87,13,31,91,94,43,50,-18,-30,-100,-49,-42,-5,-30,80,-14,95,100],
[56,69,40,84,4,71,82,65,28,0,83,14,39,96,77,54,66,-37,-4,-88,-64,-40,-21,-51,71,-11,100,80],
[57,90,30,90,17,97,92,81,31,2,86,37,26,72,100,68,64,-27,-2,-87,-61,-30,-10,-53,64,-1,96,98],
[37,65,35,81,13,73,88,81,18,0,100,16,30,74,97,55,61,-21,-19,-90,-67,-31,-6,-53,84,-22,98,85],
[43,65,34,73,8,88,72,62,36,0,89,17,17,91,86,59,55,-16,-2,-100,-57,-26,-7,-47,72,-5,96,90],
[41,74,35,71,26,71,74,53,21,11,100,16,29,78,76,54,54,-16,-6,-100,-51,-23,-13,-45,65,-11,100,89],
[50,75,23,85,34,88,71,66,29,0,100,31,24,78,88,40,59,-31,-5,-95,-56,-35,-25,-44,69,-12,100,100],
[41,94,43,84,25,81,70,66,40,7,97,32,35,88,75,43,54,-33,-1,-79,-48,-19,-3,-29,56,-3,100,88],
[58,86,42,92,11,90,93,69,18,15,88,33,28,95,100,59,43,-14,0,-100,-52,-34,-9,-45,54,-27,86,82]]
}
对象就像那样,一个" word",带有一个关联的数据,这是一个数组数组。
我会有一个包含很多这些单词的数据库(让我们说1000个),每个单词大约有20个数组(最小,随着更多的教学,它们将会增长)。
主要问题是:我想输入一个值数组(比如"数据"数组中的一个数组),并得到"字"这是最接近的一个。
如果输入是十个值数组的数组,并且具有这样的数据结构会有多难?:
{"word":"someoword",
"data":[[Array of ten arrays],[Array of ten arrays],[Array of ten arrays]...]}
我对Python或Node.js有一个MongoDB数据库,并根据一些值将数据库分成多个集合。但我只是关于从数据库获取数据的常用方法,所以如果我有大量数据它们会非常低效(我估计中等训练的数据库大约为18MB,而完全训练的数据库会大得多)。
答案 0 :(得分:1)
TLDR:使用word2vec
以下是我的建议:在训练数据时使用该方法。培训完成后,处理它并填充另一个使查找更快的数据库。
幸运的是,您只需要存储您正在训练的模型,而不是训练集。
对于每个单词,您需要20 * AVG_ARRAY_LENGTH个单位的空间。 1000 * 20 * AVG_ARRAY_LENGTH可视为易于管理,具体取决于AVG_ARRAY_LENGTH的值。
如果您按照单词的顺序接收训练数据,则可以缓存单词模型并在内存中进行修改,直到切换到下一个单词。
我不担心手动分发您的数据库。对于您拥有的数据大小,没有必要。
我会使用这些数据数组作为填充另一个数据库的密钥。
<key, word>
or
<key, id_of_word_in_model_db>
因此,如果单词模型数据中有20个数组,我会在数据库中添加20个这样的记录
这些键中的每一个实际上都定义了20维空间中的一个点。当您想要找到最接近的单词时,您只想找到该空间中任何给定单词的最近点。
当你还考虑到这些点中的每一个都具有强度值时,你可以说它们变成了矢量。在n维空间的矢量。
您可以阅读这些文章,了解如何最好地存储这些数据:
此时我们意识到人们已经做了一段时间了。有一个很棒的图书馆叫做word2vec,还有很多文章解释它是如何工作的。祝你好运!