gpt4 book ai didi

javascript - 给定字典和字母列表,让程序学习生成有效单词 | Javascript

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:29:55 24 4
gpt4 key购买 nike

我正在从事一个大型机器学习/nlp 项目,但我只停留在其中的一小部分。 (PM 我,如果你想知道我到底在做什么。)

我尝试用 Javascript 编写一个程序来学习生成有效的单词,仅通过使用字母表中的所有字母。

我拥有的是一个包含 50 万个不同单词的数据库。这是一个很大的 JS 对象,结构如下(单词是德语):

database = {
"um": {id: 1, word: "um", freq: 10938},
"oder": {id: 2, word: "oder", freq: 10257},
"Er": {id: 3, word: "Er", freq: 9323},
...
}

"freq" 显然是频率的意思。 (也许这个值有时会变得很重要,但我目前不使用它,所以忽略它。)


我的程序目前的工作方式是:在第一次迭代中,它生成一个完全随机的单词,长度在 2 到 13 个字母之间,并在数据库中搜索它。如果它在那里,那么单词中的每个字母都会得到好的评价,如果它不在那里,它们就会得到不好的评价。字长也会被评定。如果单词有效,则其字长获得良好评级,否则,其字长获得差评。

在第一个之后的迭代中,它不会生成具有随机 字母和随机 字长的单词。它使用基于字母评级和单词长度的概率。

例如,假设它在前 100 次迭代后找到了单词“the”、“so”和“if”。所以字母“t”、“h”、“e”和字母“s”、“o”以及字母“i”、“f”评价不错,2和3的字长也不错评级。因此,在下一次迭代中生成的单词将更有可能包含这些评级好的字母,而不是评级差的字母。

当然,程序还会检查当前生成的单词是否已经生成,如果已经生成,那么这个单词不会被再次评级,而是生成一个新单词。

理论上它应该自己学习最佳字母频率和最佳词长频率,有时只生成有效词。

是的。当然这是行不通的。它在前几次迭代中变得更好,但一旦找到所有 2 个字母的单词,它就会变得更糟。我认为我这样做的整个过程都是错误的。我实际上已经尝试过了,并在 5000 次迭代后为您提供了一个(不太漂亮的)图表:

(not so beautiful) graph

红线:生成错误词

绿线:生成正确的词


是的。这里有什么问题?我做机器学习错了吗?你有解决办法吗?某种算法或 trie 系统?

PS:我知道 this , 但它不是在 JS 中,我不理解它,我无法评论它。

最佳答案

另一种方法是使用 Markov Model .

首先计算字典中的字母频率和单词长度频率。然后,创建一个词:

  1. 选择一个介于 1 和最大现有字长之间的加权随机数(见下文)。这就是您要生成的字母数。
  2. 对于单词中的每个字母,选择一个加权的随机字母并将其添加到单词中。

这是一个 0 阶马尔可夫模型。它基于语料库中字母出现的频率。它可能会为您提供与您所拥有的系统类似的结果。

您将从 1 阶马尔可夫模型中获得更好的结果,在该模型中,您计算​​的不是字母频率,而是双字母组(双字母排列)频率。因此,要选择第一个字母,您只能从用于开始单词的二元组中进行选择。对于后续字母,您可以选择一个跟在先前生成的字母之后的字母。这会给您带来比 0 阶模型更好的结果。

2 阶模型非常有效。请参阅我的博客文章,Shakespeare vs. Markov ,例如。

加权随机数是“随机”选择的数字,但会倾斜以反射(reflect)某种分布。例如,在英语中,字母“e”出现的概率约为 12.7%。 't' 出现的概率为 9.06%,等等。参见 https://en.wikipedia.org/wiki/Letter_frequency .因此,您希望加权随机数生成器的输出近似于该分布。或者,在您的情况下,您希望它近似于语料库中的分布。参见 Weighted random numbers有关如何完成的示例。

关于javascript - 给定字典和字母列表,让程序学习生成有效单词 | Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43405081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com