Gensim短语用于过滤n-gram

时间:2017-12-10 02:49:17

标签: python nlp word2vec gensim

我正在使用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,正如我在上面的例子中所提到的那样?

2 个答案:

答案 0 :(得分:1)

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

你可以调整它以试图让更大比例的推广短语与你自己关于“有趣”短语的直觉直觉相匹配 - 但是这个类仍然使用相当粗略的方法,没有任何超越语法或领域知识的意识语料库里有什么。因此,获得所有/大多数短语的任何价值都可能包含许多无趣的短语,反之亦然。

如果您具有某些词组具有重要性的先验知识,则可以在基于搭配统计的Phrases过程之前(或代替)之前,自行预处理语料库以将这些词组合成单个标记。

答案 1 :(得分:0)

如果我理解你正在尝试做什么,你可以在你的语料库上尝试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

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