【发布时间】:2017-04-05 12:12:24
【问题描述】:
我目前正在从事一个机器学习项目,并且正在构建数据集。该数据集将由许多不同的文本特征组成,长度从 1 个句子到大约 50 个句子(包括标点符号)不等。存储这些数据然后使用 python 进行预处理和用于机器学习的最佳方法是什么?
【问题讨论】:
我目前正在从事一个机器学习项目,并且正在构建数据集。该数据集将由许多不同的文本特征组成,长度从 1 个句子到大约 50 个句子(包括标点符号)不等。存储这些数据然后使用 python 进行预处理和用于机器学习的最佳方法是什么?
【问题讨论】:
在大多数情况下,您可以使用一种称为词袋的方法,但是,在某些情况下,当您执行更复杂的任务(如相似度提取)或想要在句子之间进行比较时,您应该使用Word2Vec
您可以使用经典的 Bag-Of-Word 表示,将每个样本编码为一个长向量,指示所有样本中所有单词的计数。例如,如果您有两个样本:
"I like apple, and she likes apple and banana.",
"I love dogs but Sara prefer cats."。
那么所有可能的词都是(顺序不重要):
I she Sara like likes love prefer and but apple banana dogs cats , .
那么这两个样本会被编码成
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,那么任务就很简单了:
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 是一种更复杂的方法,它试图通过在下面训练一个 embedding 神经网络 来找到单词之间的关系。 在提供的所有样本的上下文中,可以将简单英语的嵌入视为单词的数学表示。核心思想是如果上下文相似,单词就相似。
Word2Vec 的结果是所有样本中显示的所有单词的向量表示(嵌入)。令人惊奇的是我们可以对向量执行算法操作。一个很酷的例子是:Queen - Woman + Man = Kingreference here
要使用 Word2Vec,我们可以使用一个名为 gensim 的包,这是一个基本设置:
model = Word2Vec(sentences, size=100, window=5, min_count=5, workers=4)
model.most_similar(positive=['woman', 'king'], negative=['man'])
>>> [('queen', 0.50882536), ...]
这里sentences是你的数据,size是embeddings的维度,size越大,代表一个词的空间越多,总会有过拟合我们应该考虑一下。 window 是我们关心的上下文的大小,它是我们在训练时从上下文预测目标时正在查看的目标单词之前的单词数。
【讨论】:
file.readline()逐行阅读文本
一种常见的方法是创建您的字典(所有可能的单词),然后根据该字典的功能对您的每个示例进行编码,例如(这是一个非常小且有限的字典),您可以拥有一本字典:你好,世界,来自,蟒蛇。每个单词都将与一个位置相关联,并且在每个示例中,您定义一个向量,其中 0 表示不存在,1 表示存在,例如对于示例“hello python”,您可以将其编码为:1,0,0,1
【讨论】: