1

我正在使用一个项目来检测out-of-domain文本输入,在功能的帮助IsolationForesttf-idf。以下是我总结的作品:

训练

  • 在 tfidf 上:

    • 使用 . 拟合和转换域内数据集CountVectorizer()
    • 用我的这个安装一个 tfidftransformer()CountVectorizer()并保存变压器(在测试期间使用它)。
    • 因此,使用tfidftransformer()
    • 保存CountVectorizer()'svocabulary_TfidfTransformer()objectpickle用于测试时间使用。
  • 关于隔离森林:

    • 收集转换后的域内数据集并训练IsolationForest()新颖性检测器。
    • 使用 保存模型joblib

测试:

  • 加载所有保存的模型。
  • 在复制所有类似于训练步骤的步骤(仅限转换)后,获取当前域外输入文本的 tfidf 转换特征。
  • IsolationForest使用保存的模型预测它是否在域外。

但是我发现即使 tf-idf 功能对于我的每个测试输入都完全不同,IsolationForest总是预测为 1。

可能出了什么问题?

注意:我还尝试IsolationForest通过模仿tf-idf变压器的输出来输入虚拟向量来建模,以确保tf-idf模块是否对此负责,但无论我提供哪个随机向量,我总是得到 1 作为输出IsolationForest。另请注意,tf-idf有很多功能(令牌),在我的情况下,计数是 48015。

4

0 回答 0