CountVectorizer 如何处理测试数据中的新词?

如何解决CountVectorizer 如何处理测试数据中的新词?

我了解 CountVectorizer 的一般工作原理。它接受单词标记并创建一个包含文档(行)和标记计数(列)的稀疏计数矩阵,我们可以将其用于 ML 建模。

但是,它如何处理可能出现在测试数据中而没有出现在训练数据中的新词?它只是忽略它们吗?

此外,从建模的角度来看,是否应该假设某些单词非常罕见以至于它们根本没有出现在训练数据中,并且它们与您可能执行的任何建模都不相关?

解决方法

我假设您指的是 scikit-learn CountVectorizer。不是说我不知道​​自己是否还有其他人。

是的,当对新文档进行编码时,计数向量化器会忽略不属于词汇表(从训练数据创建)的单词。

创建词汇的例子:(https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.CountVectorizer.html)

>>> from sklearn.feature_extraction.text import CountVectorizer
>>> corpus = [
...     'This is the first document.',...     'This document is the second document.',...     'And this is the third one.',...     'Is this the first document?',... ]
>>> vectorizer = CountVectorizer()
>>> X = vectorizer.fit_transform(corpus)
>>> print(vectorizer.get_feature_names())
['and','document','first','is','one','second','the','third','this']
>>> print(X.toarray())
[[0 1 1 1 0 0 1 0 1]
 [0 2 0 1 0 1 1 0 1]
 [1 0 0 1 1 0 1 1 1]
 [0 1 1 1 0 0 1 0 1]]

现在,对新文档使用转换,您可以看到词汇表外的单词被忽略了:

>>> print(vectorizer.transform(['not in any of the document second second']).toarray())
[[0 1 0 0 0 2 1 0 0]]

关于不属于训练数据的稀有词,我同意您的说法,即它对建模并不重要,因为我们希望相信与创建和概括一个好的词最相关的词模型已经是训练数据的一部分。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?