带有 Omnicat-bayes 文档的文本分类预定义类别
text classification predefined categories with documents with Omnicat-bayes
我正在使用 omnicat-bayes
来分析文档(文本分类)。有了这个 gem 我可以创建类别和 "feed" 带有文档的类别。目前,这些类别有足够的文档,以便 "good enough" 识别新文档应该放在哪个类别中。
现在在我的 Documents 控制器中的创建操作下有几个步骤。
- 正在创建一个新的贝叶斯实例
- 创建将要使用的类别
- 拿前置文档训练类别
- 实际训练类别
(所有这些步骤都在 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.save
run_all 函数中(我知道这不是最佳实践)我正在创建上面提到的四个步骤。
现在,在创建函数完成后,贝叶斯实例消失了,可以说 AI 现在又 "stupid" 了。
我的问题是: 什么是合适的位置,我如何才能完成此操作以创建新实例、新类别并向它们提供我的数据库中的文档。 singleton
在这里会很有趣吗?
这是一个非常棘手的问题,因为您可能希望扩展应用程序以处理多个文档。
问题是,生产模式 Rails 应用程序 Web 服务器通常会分叉到多个进程,甚至 运行 分叉到多台机器上。这意味着在一个过程中训练的文档在所有其他过程中都是未知的,即使您使用单例模式也是如此。
因此,只有 omnicat-bayes
gem,最好的解决方法是创建某种单独的微服务,运行 在其自己的进程中不执行任何操作不仅仅是流程文件。然后主应用程序应该将处理排队到异步作业中,这样如果训练过程忙于其他文档,事情需要更长的时间也没关系。
您如何与这个外部 OmniCat 实例通信由您决定。最舒适的方式可能是 dRuby 但我应该补充一点,我没有使用它的生产模式经验。一个更具前瞻性的解决方案是使用一些简单的 HTTP + JSON。在那种情况下,您甚至可以在将来使用一些不基于 Ruby 的更强大的库来切换进行训练和分类的服务。
我正在使用 omnicat-bayes
来分析文档(文本分类)。有了这个 gem 我可以创建类别和 "feed" 带有文档的类别。目前,这些类别有足够的文档,以便 "good enough" 识别新文档应该放在哪个类别中。
现在在我的 Documents 控制器中的创建操作下有几个步骤。
- 正在创建一个新的贝叶斯实例
- 创建将要使用的类别
- 拿前置文档训练类别
- 实际训练类别
(所有这些步骤都在 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.save
run_all 函数中(我知道这不是最佳实践)我正在创建上面提到的四个步骤。
现在,在创建函数完成后,贝叶斯实例消失了,可以说 AI 现在又 "stupid" 了。
我的问题是: 什么是合适的位置,我如何才能完成此操作以创建新实例、新类别并向它们提供我的数据库中的文档。 singleton
在这里会很有趣吗?
这是一个非常棘手的问题,因为您可能希望扩展应用程序以处理多个文档。
问题是,生产模式 Rails 应用程序 Web 服务器通常会分叉到多个进程,甚至 运行 分叉到多台机器上。这意味着在一个过程中训练的文档在所有其他过程中都是未知的,即使您使用单例模式也是如此。
因此,只有 omnicat-bayes
gem,最好的解决方法是创建某种单独的微服务,运行 在其自己的进程中不执行任何操作不仅仅是流程文件。然后主应用程序应该将处理排队到异步作业中,这样如果训练过程忙于其他文档,事情需要更长的时间也没关系。
您如何与这个外部 OmniCat 实例通信由您决定。最舒适的方式可能是 dRuby 但我应该补充一点,我没有使用它的生产模式经验。一个更具前瞻性的解决方案是使用一些简单的 HTTP + JSON。在那种情况下,您甚至可以在将来使用一些不基于 Ruby 的更强大的库来切换进行训练和分类的服务。