【问题标题】:text classification predefined categories with documents with Omnicat-bayes带有 Omnicat-bayes 文档的文本分类预定义类别
【发布时间】:2017-05-09 21:50:09
【问题描述】:

我正在使用omnicat-bayes 来分析文档(文本分类)。有了这个 gem,我可以创建类别并用文档“提供”这些类别。目前,这些类别有足够的文档,以便“足够好”地识别新文档应该放在哪个类别中。

现在在我的 Documents 控制器下创建操作有几个步骤。

  1. 创建一个新的贝叶斯实例
  2. 创建将使用的类别
  3. 使用预文档训练类别
  4. 实际训练类别

(所有这些步骤都在 run_all 函数下)

创建动作:

def create
@document = Document.new(document_params)
@document.case_id = @case.id
 if @document.save
   run_all
   # Running the classify function on reden aanmelding
   classify_one = @bayes.classify(@document.reden_aanmelding)
   document_category = classify_one.to_hash[:top_score_key]
   # Updating the document category by the top key returned by Bayes
   @document.update_attribute(:category, document_category)
   finding_required_records
   # Training Cees Buddy with the document that got saved
   @bayes.train(document_category, @document.reden_aanmelding)
   redirect_to case_path(@case)
 else
   render :new
 end
end

@document.saverun_all 函数中(我知道这不是最佳实践)我正在创建上面提到的四个步骤。

现在创建函数完成后,贝叶斯实例消失了,可以说 AI 现在又“愚蠢”了。

我的问题是: 合适的位置是什么,我如何才能创建新实例、新类别并为它们提供数据库中的文档。 singleton 在这里会很有趣吗?

【问题讨论】:

    标签: ruby-on-rails naivebayes


    【解决方案1】:

    这是一个相当棘手的问题,因为您可能希望扩展应用程序以处理多个文档。

    问题是生产模式的 Rails 应用程序 Web 服务器通常会分叉成多个进程,甚至在多台机器上运行。这意味着在一个进程中训练的文档在所有其他进程中都是未知的,即使您使用单例模式也是如此。

    因此,仅使用 omnicat-bayes gem,最好的方法是创建某种单独的微服务,该微服务在自己的进程中运行,只处理文档。然后,主应用程序应将处理排入异步作业中,因此如果训练过程忙于处理其他文档,则可以花费更长的时间。

    您与此外部 OmniCat 实例的通信方式取决于您。最舒适的方法可能是dRuby,但我应该补充一点,我没有生产模式的经验。一个更具前瞻性的解决方案是使用一些简单的 HTTP + JSON。在这种情况下,您甚至可以在未来使用一些更强大的库而不是基于 Ruby 的库来切换进行训练和分类的服务。

    【讨论】:

    • 感谢您的回答,我可以继续前进。我以前没有考虑过多进程部分,所以这真的很有帮助。以及dRuby 部分。我想我会尝试将omnicat-bayes 移动到它自己的微服务中。我认为该服务在获取尽可能多的文档时会更有价值,因此当它在自己的微服务上运行时,我可以将所有从多个应用程序提交的文档传输到同一个服务。这也将导致对提交的文件进行更准确的分类。
    猜你喜欢
    • 2020-05-12
    • 2018-07-20
    • 2011-11-17
    • 2014-04-08
    • 2016-10-06
    • 1970-01-01
    • 2011-12-29
    • 2012-10-02
    • 1970-01-01
    相关资源
    最近更新 更多