存储ngram模型python

2024-10-02 12:26:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我将语言模型实现为个人挑战,作为简单web应用程序的一部分。尽管如此,我还是避免使用NLTK,但是面对的是拥有足够大语料库的MemoryError(词汇量约为50000,trigrams的数量约为440000—我使用了标准的python字典,并在尝试了numpy数组后将所有单词ngram概率存储为矩阵)。因此,解决方案似乎是使用更高效的数据结构,这里提到的train a language model using Google Ngrams或将模型存储在磁盘上。总的来说,您能告诉我们什么方法可以更好地存储ngram模型(在内存或磁盘空间中)并将其作为web应用程序的一部分使用?在


Tags: 模型numpyweb语言应用程序标准数量字典
1条回答
网友
1楼 · 发布于 2024-10-02 12:26:40

我将把我的答案分成两部分,第一部分是为什么以字典的形式存储它是个坏主意,第二部分是存储ngram的最佳数据结构。在

考虑在字典中存储以下单词:“Bond”、“Boat”、“Build”,包含这些键的字典的大小将被哈希为某个整数,其大小大致与单词数和字符数成正比。所以,从技术上讲,我们需要额外的空间来存储某些可能会重复的字母。现在,问题变得很明显,我们要花费大量额外的内存来存储不需要重新存储的部分字符串。在

问题是,这里可以使用的理想数据结构是什么。此数据结构的必要条件是:

  1. 高效存储
  2. 值检索(大致恒定时间)

如果我们考虑哪种数据结构符合这些要求,那么马上就会想到的是一个Trie,或者更准确地说,是前缀Trie。Trie的固有结构很有帮助,因为我们可以在单个字符上节省空间,否则将多次存储这些字符。像我上面的例子中的一小部分单词,问题并不是很严重。然而,随着单词集长度的增加,使用哈希表/字典很快就会耗尽空间。在

希望这有帮助。在

相关问题 更多 >

    热门问题