我目前正在学习使用 turicreate
进行分类,并对 word count vector
有一个问题。
我找到了一个例子,在这里
#构建词频向量
products['word_count'] = turicreate.text_analytics.count_words(products['review'])
#确定正面或负面评论
products['sentiment'] = products['rating'] >= 4
#训练情感分类器
sentiment_model = turicreate.logistic_classifier.create(train_data,
target='sentiment',
features=['word_count'],
validation_set=test_data)
我试图理解以下内容:
-
如果分类是基于 ‘sentiment’(1 或 0),为什么我们需要 ‘word_count’?
-
在训练情感分类器时,’word_count’ 的作用是什么?
我尝试阅读了 turicreate.text_analytics.count_words
的文档,但我觉得我没有理解。
回答:
感谢您直接提问。我收到您的邮件后就来了。我认为您提出的两个问题有些相似,可以通过彼此来回答。基本上,您的问题是为什么在进行情感分析时需要词频向量。
说实话,这是一个很长的回答,但我会尽量简短。我目前不了解您对 NLP 的理解程度,但所有的机器学习模型都是为数值数据构建的,这意味着当您处理文本数据时,您首先需要将文本转换为数值格式。这个过程被称为向量化。这就是我们在这里所做的,但实现这一点的方式有很多种。这里使用的是 CountVectorizer,其中词频字典中的每个词都被视为该特定句子的一个独立特征。这导致了稀疏矩阵的创建,可以用一个 m x n
矩阵来表示 m 个句子和 n 个独特词汇。
我们的做法是计算一个词在特定类型句子(无论是正面还是负面)中出现的次数。可以理解的是,像“terrible”这样的词在负面句子中可能有很高的计数,而在正面句子中几乎为0。同样,对于“great”和“amazing”这样的词会有一个相反的效果。这就是分类器用来为每个词分配权重的方式。负面类别中流行出现的词会被分配负权重,而正面类别中出现的词会被分配正权重。这就是情感分析分类的基础。
附注:我建议在您从头开始编写代码以理解其工作原理或使用 scikit-learn 之前,不要使用 TuriCreate,因为 TuriCreate 抽象了很多用法,您可能不会理解后台在发生什么。