Store textual dataset for binary classification
我目前正在研究一个机器学习项目,并且正在构建数据集。数据集将由许多不同的文本特征组成,长度从1句到大约50句不等(包括标点符号)。存储这些数据的最佳方法是什么,然后预处理并用于使用Python进行机器学习?
在大多数情况下,您可以使用一种称为"词袋"的方法,但是,在某些情况下,当您执行更复杂的任务(如相似性提取)或希望在句子之间进行比较时,您应该使用word2vec。
词袋您可以使用经典的词袋表示法,在这种方法中,您将每个样本编码为一个长向量,指示所有样本中所有单词的计数。例如,如果您有两个示例:
那么所有可能的词都是(这里顺序不重要):
1 | I she Sara like likes love prefer and but apple banana dogs cats , . |
然后将两个样本编码为
1 2 | First: 1 1 0 1 1 0 0 2 0 2 1 0 0 1 1 Second: 1 0 1 0 0 1 1 0 1 0 0 1 1 0 1 |
如果您使用的是sklearn,那么任务将简单如下:
1 2 3 4 5 6 7 8 9 10 | from sklearn.feature_extraction.text import CountVectorizer vectorizer = CountVectorizer() corpus = [ 'This is the first document.', 'This is the second second document.', 'And the third one.', 'Is this the first document?', ] X = vectorizer.fit_transform(corpus) # Now you can feed X into any other machine learning algorithms. |
Word2VEC
word2vec是一种较为复杂的方法,它试图通过训练一个嵌入的神经网络来发现单词之间的关系。嵌入,在纯英语中,可以被认为是一个单词的数学表示,在提供的所有样本的上下文中。核心思想是,如果上下文相似,单词是相似的。
word2vec的结果是所有示例中显示的所有单词的矢量表示(嵌入)。令人惊奇的是,我们可以对向量执行算法运算。一个很酷的例子是:这里的
要使用word2vec,我们可以使用一个名为gensim的包,下面是一个基本设置:
1 2 3 | model = Word2Vec(sentences, size=100, window=5, min_count=5, workers=4) model.most_similar(positive=['woman', 'king'], negative=['man']) >>> [('queen', 0.50882536), ...] |
这里,
一种常见的方法是创建字典(所有可设置位置的单词),然后用这个字典的函数对每个示例进行编码,例如(这是一个非常小且有限的字典),您可以有一个字典:hello,world,from,python。每个单词都将与一个位置相关联,在每个示例中,您定义一个矢量,其中0表示不存在,1表示存在,例如,对于"hello python",您将其编码为:1,0,0,1