代码之家  ›  专栏  ›  技术社区  ›  ignorance

如何在MxNet中计算n-gram?

  •  0
  • ignorance  · 技术社区  · 7 年前

    我想在MxNet中对一组字符串进行N-gram。当然,我会这样做 TFIDF Vectorizing

    def tfidf(str_list, ngram_width=3):
        tf = {}
        for s in str_list:
            for start, end in zip(range(len(s) - ngram_width),
                                  range(ngram_width, len(s))):
                if s[start:end] not in tf:
                    tf[s[start:end]] = 0
                tf[s[start:end]] += 1
    
        idf = {}
        for t in tf.keys():
            cnt = 0
            for s in str_list:
                if t in s:
                    cnt += 1
                idf[t] = len(str_list)/(cnt + 1.0)
    
        return {t:tf[t]*idf[t] for t in tf.keys()}
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Simon Corston-Oliver    7 年前

    让我们退一步问问 传统上,我们用n-gram表示文本。N-gram试图捕捉有趣的搭配,即组合在一起的单词,例如“White House”作为二元图,可能比仅仅知道句子包含单词“White”和“House”更有趣。

    使用n-gram的缺点是稀疏性增加——许多搭配的频率较低。我们可能会在预测时遇到以前从未见过的搭配。