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

NLTK NaiveBayesClassifier分类器问题

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

    我正在使用NaiveBayesClassifier进行实验,并拥有以下培训数据:

    positive_vocab = [ 'awesome' ]
    negative_vocab = [ 'bad']
    neutral_vocab = [ 'so-so' ]
    ...
    classifier = NaiveBayesClassifier.train(train_set) 
    

    然后我将以下句子分类: 糟糕的电影,我喜欢

    以下是我对每个单词的理解:

    坏:阴性 太棒了:pos 电影,:pos i: 位置 喜欢:pos 信息技术:pos

    如何/为什么决定对不在训练集中的单词进行分类(例如 我喜欢,电影 )积极的一面?

    谢谢

    1 回复  |  直到 7 年前
        1
  •  1
  •   Dmitry Mottl Yves    7 年前

    训练一个情绪模型意味着你的模型学习单词如何影响情绪。 因此,这不是要指定哪些词是肯定的,哪些是否定的,而是如何训练您的模型从文本中自己理解它 .

    最简单的实现称为“单词包”(通常与TF-IDF规范化一起使用)。单词包的工作方式是这样的:你把你的文本按单词分开,并计算每个单词在给定文本块(或复习)中的出现次数。这样,行对应于不同的评论,列对应于给定评论中给定单词的出现次数。这张桌子成了你的 X 而要预测的目标情绪 Y (0表示否定,1表示肯定)。

    然后训练分类器:

    from sklearn.naive_bayes import MultinomialNB
    from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer
    
    reviews, Y = your_load_function()
    
    vectorizer = TfidfVectorizer()  # or CountVectorizer()
    X = vectorizer.fit_transform(reviews)  # convert text to words counts
    
    model = MultinomialNB()
    model.fit(X, Y)
    

    训练模型后,可以进行预测:

    new_reviews = your_load_function2()
    new_X = vectorizer.transform(new_reviews)
    predicted_Y = model.predict(new_X)
    

    进一步阅读:
    https://en.wikipedia.org/wiki/Bag-of-words_model
    https://en.wikipedia.org/wiki/Tf-idf
    http://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.MultinomialNB.html
    http://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html