我需要对一组 n-gram(n 个单词的序列)及其上下文(出现在 n-gram 附近的单词及其频率)进行建模。我的想法是这样的:
public class Ngram {
private String[] words;
private HashMap<String, Integer> contextCount = new HashMap<String, Integer>();
}
然后,对于所有不同 n-gram 的计数,我使用另一个 Hashmap,例如
HashMap<String, Ngram> ngrams = new HashMap<String, Ngram>();
我在接收文本时添加它。问题是,当 n-gram 的数量超过 10,000 左右时,JVM 堆会填满(设置为最大 1.5GB),并且一切都变慢了。
有没有更好的方法来做到这一点,以避免这种内存消耗?此外,n-gram 之间的上下文应该很容易比较,我不确定我的解决方案是否可行。