【问题标题】:Gensim Phrases usage to filter n-gramsGensim 短语用于过滤 n-gram
【发布时间】:2017-12-10 02:49:16
【问题描述】:

我正在使用 Gensim Phrases 来识别我的文本中的重要 n-gram,如下所示。

bigram = Phrases(documents, min_count=5)
trigram = Phrases(bigram[documents], min_count=5)

for sent in documents:
    bigrams_ = bigram[sent]
    trigrams_ = trigram[bigram[sent]]

但是,这会检测到无趣的 n-gram,例如 special issueimportant matterhigh risk 等。我对检测文本中的概念特别感兴趣,例如 machine learninghuman computer interaction 等。

有没有办法阻止短语检测到我在上面的示例中提到的不感兴趣的 n-gram?

【问题讨论】:

  • 定义“无趣”或“有趣”。
  • @CharlesPehlivanian 我已经给出了例子

标签: python nlp word2vec gensim


【解决方案1】:

Phrases 有一个可配置的threshold 参数,用于调整统计截止值,以将单词对提升为短语。 (更大的阈值意味着更少的对成为短语。)

您可以对其进行调整,以尝试使其推广的短语中的更大比例与您对“有趣”短语的临时直觉相匹配 - 但是这门课仍然使用相当粗略的方法,没有任何语法或领域知识意识语料库中有什么。因此,任何获得您想要的所有/大部分短语的值都可能包括许多无趣的短语,反之亦然。

如果您先验地知道某些词组很重要,您可以在基于搭配统计的Phrases 处理之前(或代替)自己预处理语料库以将它们组合成单个标记。

【讨论】:

  • 非常感谢 gojomo :) 我会尝试实现你提出的后一个想法 :)
【解决方案2】:

如果我理解你想要做什么,你可以在你的语料库上尝试 tf_idf,而不是更大的标准语料库(维基百科或其他东西)的 tf_idf。

from sklearn.feature_extraction.text import 

TfidfVectorizertfidf_vectorizer = 
    TfidfVectorizer(max_df=0.8, max_features=500,min_df=0.2,
                    stop_words='english', use_idf=True, ngram_range=(1,2))
X = tfidf_vectorizer.transform(docs)  # transform the documents to their tf_idf vectors

仅查看具有非常不同值的 ngram,这当然只有在您拥有足够多的文档时才有效。

【讨论】:

  • 我有一个类似的问题,我想试试你的答案。但我不清楚你为什么说“具有非常不同价值的 ngram”是最重要的 ngram。您能否进一步详细说明。谢谢你:)
  • 这是不久前的事,我稍微忘记了我的意思,但我想我的意思可能类似于 1. 在与您的域相似的大型语料库上使用 TFIDF 以获得基本语言像 ngram 这样的模型,然后 2. 仅在搜索您的语料库时使用这些 ngram。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-29
相关资源
最近更新 更多