Machine learning 如何训练纯文本段落并返回关键短语?这可能吗?

Machine learning 如何训练纯文本段落并返回关键短语?这可能吗?,machine-learning,keras,neural-network,deep-learning,conv-neural-network,Machine Learning,Keras,Neural Network,Deep Learning,Conv Neural Network,我正在进行关键短语提取,现在我能够创建一些特征,并运行候选短语以及用于训练机器学习模型的特征,以便使用随机森林进行分类 现在出于好奇,我想尝试深入学习,因为我想手动移除特征提取层,我想让它自己找出特征并生成一个模型,只需传递一些文本文档和每个文档的相关关键短语(1/0是否正确),我想知道,是否有任何培训模型接受纯文本而不是浮点值?如果没有,我如何尝试通过将句子和关键短语转换为浮点值并传递给培训模型来实现同样的效果 甚至尝试使用Keras序列模型创建模型(给出了示例) 请为我提供任何信息资源,并提

我正在进行关键短语提取,现在我能够创建一些特征,并运行候选短语以及用于训练机器学习模型的特征,以便使用随机森林进行分类

现在出于好奇,我想尝试深入学习,因为我想手动移除特征提取层,我想让它自己找出特征并生成一个模型,只需传递一些文本文档和每个文档的相关关键短语(1/0是否正确),我想知道,是否有任何培训模型接受纯文本而不是浮点值?如果没有,我如何尝试通过将句子和关键短语转换为浮点值并传递给培训模型来实现同样的效果

甚至尝试使用Keras序列模型创建模型(给出了示例)


请为我提供任何信息资源,并提供代码示例。

您可以使用word2Vector将每个单词转换为一个向量,这里有一些预先训练过的单词向量。例如谷歌新闻(每个单词有300个特征),维基百科(每个单词有400个特征)。这些是一般的词向量。如果你的内容来自某些特定的来源,你可以使用gensim来训练你自己的词向量。可以根据需要定义要素长度(100或更少)。作为你自己的词载体,你不必像谷歌和维基百科那样覆盖那么多的词。使用单词向量表示一个单词,你的句子或短语将是一个向量序列。然后可以使用RNN、GRU或LSTM任何类型的时间序列模型来训练内核。是否将1或0预测为关键短语。也称为命名实体识别。

您可以在Keras中使用
嵌入
层,它本质上是一个查找表:从单词索引到相应的单词向量,该词向量与网络的其余部分一起训练。在将文本传递到此层之前,需要将文本编码为单词索引序列

因此,您将得到一个单词向量的可变长度向量。要处理它,您可以像Jiajie Yu建议的那样,使用循环层对其进行编码,或者使用卷积层和1D池(有人说卷积更适合于关键词提取)


这是一个对文本进行预处理并使用嵌入层的玩具示例,在嵌入层上使用卷积和LSTM。并且是使用嵌入+LSTM预测每个单词的词性标记的示例;您可以轻松地修改它来预测单词是否属于关键字短语

使用BERT作为文本摘要工具做了一件非常好的工作(我想这就是您想要的)。这里有一篇很好的文章可以帮助您实现这一目标(4月12日)。你也可以在网络的开始处使用嵌入层从单词中自动浮动(你只需先将单词映射到整数,但这不是ML部分)。每个文档是用一个关键字短语标记还是用多个关键字短语标记?@mujjiga每个文档都用多个关键字短语标记。非常感谢你提供的信息,我想知道如何将一整段文字转换成文字向量,因为我有多段文字需要训练,而且其中的字数并不总是相同的。我该如何处理这个问题,我现在已经完全了解了,如果你能用一些参考链接更新你的答案,那就太好了。这是你所说的一个例子,文章长度不一样,这可能是功能缺失的问题。根据数据和应用程序本身,有很多不同的解决方案。最简单的方法是,如果空白位置比最长的位置短,则为空白位置提供所有0。张量流通用句子编码器是否有助于我对句子进行编码和解码?如果您想在句子级别(如句子分类)上解决问题,那么是的,这将很有帮助。但您所说的问题看起来更像是单词级别的问题(您希望将所有单词联合分类为关键和非关键)。如果确实如此,则必须保留本地信息,但USE会丢失它。因此,我认为您只想使用作为一个附加的特征提取器,以字级编码器作为主要的一个。
model = Sequential()
model.add(Dense(18, input_dim=14, init='uniform', activation='relu'))
model.add(Dense(14, init='uniform', activation='relu'))
model.add(Dense(1, init='uniform', activation='sigmoid'))
# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# Fit the model
model.fit(X, Y, epochs=300, batch_size=10)