首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何训练项目序列分割模型

如何训练项目序列分割模型
EN

Stack Overflow用户
提问于 2020-04-21 13:00:14
回答 3查看 377关注 0票数 3

如果有一个项目序列,我想分裂成多个片段。为了做到这一点,我想训练一个统计模型。

例如:

代码语言:javascript
运行
复制
Fruit:     Apple Banana Peach | Apple Banana | Apple Banana Peach | Banana
Segment:   1     1      1     | 2     2      | 3     3      3     | 4

在这个例子中,模型应该学习苹果总是启动一个新的片段和香蕉,如果它之前没有苹果。

我想到了以下方法:

  1. 训练一个神经元网络,以预测一个项目是否开始一个新的片段,根据项目之前和之后的项目(也许是LSTM?)基本上是二级分类
  2. 训练神经元网络,根据项目序列的一部分来预测序列号。这将是一个序列-2序列模型。

也许你们中的某个人有类似的问题,可以分享他的经历。谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-05-12 18:30:18

是的,我也会使用某种递归神经网络。我不确定您必须对输入进行编码,因此我不建议使用seq2seq网络。你可能只需要做一个GRU (更快的LSTM),然后是一个密集的图层,根据先前的输入预测找到苹果的可能性。

您甚至可以使用来自seq2seq的解码器作为您的整个模型。

注意不要让模型变得太复杂,因为没有太多的特性。但是,当你让你的例子开始工作时,你也许可以根据用户也买了什么来预测用户会买什么,所以如果用户购买苹果,然后预测一个梨和香蕉,但是如果用户购买一个芒果,推荐一些更异国情调的东西。

研究愉快!

票数 1
EN

Stack Overflow用户

发布于 2020-05-11 09:28:52

如果只需要查看序列是否启动,则不需要复杂的方法。两次就够了。

但是,如果这些序列有n个开始,您仍然可以将它们存储在数组中,并更新它们的编号,并根据它们进行检查。

在找到简单的解决方案之前,不需要跳转到ML。

如果我遗漏了你问题的复杂性,请告诉我。

也许如果你不知道什么时候开始,那么聚类就会告诉你。

票数 3
EN

Stack Overflow用户

发布于 2020-05-11 12:46:12

您可能需要使用隐马尔可夫模型来预测分隔符的位置,因为LSTM的长期内存对于您的任务来说是不必要的。

代码语言:javascript
运行
复制
! pip install pomegranate

from pomegranate import HiddenMarkovModel, DiscreteDistribution
from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()

seq = ['Apple', 'Banana', 'Peach', 'Apple', 'Banana', 'Apple', 'Banana', 'Peach', 'Banana']
target = list('100101001')
encoded_seq = le.fit_transform(seq)

model = HiddenMarkovModel.from_samples(
    distribution=DiscreteDistribution,
    n_components=2,
    X=[encoded_seq],
    labels=[['None-start'] + target],
    state_names=['0', '1'],
    algorithm='labeled'
)

test_seq = ['Apple', 'Banana', 'Apple', 'Banana', 'Banana']

model.predict(le.transform(test_seq))
# >>> [1, 0, 1, 0, 0]

石榴HMM 文档

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61344175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档