Javascript GoogleScribe是如何工作的?

Javascript GoogleScribe是如何工作的?,javascript,ruby,search,statistics,code-completion,Javascript,Ruby,Search,Statistics,Code Completion,我在询问有关新实验室功能“Google Scribe”的信息。以下是链接: 我对后端和前端感兴趣,但主要是后端。我想用一个非常特定的数据集(源自我自己的文档)构建类似的东西。我认为它的前端相当简单,我甚至可以使用现有的自动完成插件来完成这项任务。可能的实施建议: 后端:构建并维护一个NxNxW稀疏矩阵a(例如,实现为Hash),其中N是您的词汇表大小,W是您希望维护的最大上下文(文字)(例如W=4可以)检查一些样本数据以对A进行种子设定/初始化,以便A[n1,n2,w]统计wordn2出现在wo

我在询问有关新实验室功能“Google Scribe”的信息。以下是链接:


我对后端和前端感兴趣,但主要是后端。我想用一个非常特定的数据集(源自我自己的文档)构建类似的东西。我认为它的前端相当简单,我甚至可以使用现有的自动完成插件来完成这项任务。

可能的实施建议:

后端:构建并维护一个
NxNxW
稀疏矩阵
a
(例如,实现为
Hash
),其中
N
是您的词汇表大小,
W
是您希望维护的最大上下文(文字)(例如
W=4
可以)检查一些样本数据以对
A
进行种子设定/初始化,以便
A[n1,n2,w]
统计word
n2
出现在word
n1
之后的
w
第四个位置的次数(注意句子边界)

前端:当用户键入时,要求后端使用
A
根据用户在当前句子中完整键入的最后一个
W
单词来评估(并排序)最可能的后续单词;仅显示以用户正在键入的内容(即用户的“当前”(部分)单词)开头的建议

可选地,根据用户已完成键入的单词进行后端更新
M
,可以是即时更新(当用户返回执行更正时具有挑战性),也可以是在提交最终文本时更新(最简单),或者通过自上次作业运行以来提交的定期作业评估文本更新。

(我对此没有把握,如果我错了,请纠正我)

Google Scribe使用的系统(或者至少是一个非常类似的系统)基本上使用树状数据结构来存储所有可能的单词。某种形式的搜索算法可以根据已知的词汇表查看完成单词的所有可能方式。(可能是数据库中存储的旧搜索查询的基础)并根据它们出现的频率对它们进行排序

例如:

我输入‘a’

Vocab:“在”苹果“太可怕了”

因此,使用最多的是“at”,其次是“apple”,最少的是“残暴”

正如我所说,我不确定这是否是他们使用的系统,但它应该有类似的结果


为了检索发生可能性,您可以扫描正在搜索的文档,或者只是逐个查询存储以检查您过去的搜索。

您需要使用马尔可夫链


你可以先看一下。这也很有趣。

正如
aleemb
正确指出的那样,上面的正式术语应该是
W
度马尔可夫链。