我目前正在研究机器学习项目,并且正在构建数据集。数据集将包含许多不同的文本特征,长度从1个句子到大约50个句子(包括标点符号)。存储这些数据然后使用python预处理和用于机器学习的最佳方法是什么?
答案 0 :(得分:0)
一种常见的方法是创建你的字典(所有可用的单词),然后根据这个dictonary对你的每个例子进行编码,例如(这是一个非常小而有限的字典),你可以有一个字典:你好,世界,来自,python。每个单词都与一个位置相关联,并且在每个示例中,您都定义了一个向量,其中0表示不存在,1表示存在,例如对于示例" hello python"你会把它编码为:1,0,0,1
答案 1 :(得分:0)
在大多数情况下,您可以使用名为 Bag of Word 的方法,但是,在某些情况下,当您执行更复杂的任务(如相似性提取)或想要在句子之间进行比较时,您应该使用的 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是一种更复杂的方法,它试图通过训练下面的嵌入神经网络来找到单词之间的关系。用简单的英语,嵌入可以被认为是一个单词的数学表示,在所提供的所有样本的上下文中 。核心思想是,如果单词的上下文相似,则单词相似。
Word2Vec的结果是所有样本中显示的所有单词的向量表示(嵌入)。令人惊奇的是,我们可以对矢量执行算法操作。一个很酷的例子是:Queen - Woman + Man = King
reference 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
是嵌入的维度,size
越大,用于表示单词的空间越多,并且总是过度拟合我们应该考虑一下。 window
是我们关注的上下文的大小,它是我们在训练时从其上下文预测目标时所看到的目标词之前的单词数。