如何解决CountVectorizer 如何处理测试数据中的新词?
我了解 CountVectorizer 的一般工作原理。它接受单词标记并创建一个包含文档(行)和标记计数(列)的稀疏计数矩阵,我们可以将其用于 ML 建模。
但是,它如何处理可能出现在测试数据中而没有出现在训练数据中的新词?它只是忽略它们吗?
此外,从建模的角度来看,是否应该假设某些单词非常罕见以至于它们根本没有出现在训练数据中,并且它们与您可能执行的任何建模都不相关?
解决方法
我假设您指的是 scikit-learn CountVectorizer。不是说我不知道自己是否还有其他人。
是的,当对新文档进行编码时,计数向量化器会忽略不属于词汇表(从训练数据创建)的单词。
>>> 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 举报,一经查实,本站将立刻删除。