【问题标题】:Is it possible to create a multi-class Text Classifier Tensorflow Lite model by TFLite Model Maker?是否可以通过 TFLite Model Maker 创建多类文本分类器 Tensorflow Lite 模型?
【发布时间】:2020-09-28 23:15:47
【问题描述】:

我尝试使用由 Tensorflow Lite Model Maker 提供的 AverageWordVecModelSpec 构建一个 android 应用程序来预测文本分类。

我正在使用图书内容来测试我的应用是否正常工作。我为这个实验提供了 3 本书。代码如下:

!pip install git+https://github.com/tensorflow/examples.git#egg=tensorflow-examples[model_maker]

import numpy as np
import os

import tensorflow as tf
assert tf.__version__.startswith('2')

from tensorflow_examples.lite.model_maker.core.data_util.text_dataloader import TextClassifierDataLoader
from tensorflow_examples.lite.model_maker.core.task.model_spec import AverageWordVecModelSpec
from tensorflow_examples.lite.model_maker.core.task import text_classifier

data_path = '/content/drive/My Drive/datasetps'

model_spec = AverageWordVecModelSpec()

train_data = TextClassifierDataLoader.from_folder(os.path.join(data_path, 'train'), model_spec=model_spec, class_labels=['categorya', 'categoryb'])
test_data = TextClassifierDataLoader.from_folder(os.path.join(data_path, 'test'), model_spec=model_spec, is_training=False, shuffle=False)

model = text_classifier.create(train_data, model_spec=model_spec)

loss, acc = model.evaluate(test_data)

model.export(export_dir='.')

当我只使用 2 门课程/书籍时它可以工作(与 tensorflow 团队提供的示例相同): it works normal even though it has small acurracy-- because i only takes 20 sample page per book as dataset actually

你可以看到我这里有合理的损失值, 但是当我尝试添加第三类时遇到问题:

train_data = TextClassifierDataLoader.from_folder(os.path.join(data_path, 'train'), model_spec=model_spec, class_labels=['categorya', 'categoryb', 'categoryc'])
test_data = TextClassifierDataLoader.from_folder(os.path.join(data_path, 'test'), model_spec=model_spec, is_training=False, shuffle=False)

这是涉及 3rd class 的训练结果: enter image description here

您可以看到损失值大于 1 是不合理的。 我试图找到我应该更改哪一行代码(来自 Tensorflow Model Maker)来解决它,并在这个论坛上结束了这个问题。

那么是否有可能为 textclassifier 使用多类模型 AverageWordVecModelSpec TFlite 模型制作者?

【问题讨论】:

  • 你得到上述线程的解决方案了吗?用于多级文本分类

标签: python tensorflow word2vec text-classification tensorflow-lite


【解决方案1】:

这是可能的。我建议先对标签进行编码,然后按照工作流程进行操作:

from tflite_model_maker import model_spec
from tflite_model_maker import text_classifier
from tflite_model_maker import TextClassifierDataLoader
from tflite_model_maker import ExportFormat

from sklearn.model_selection import train_test_split
import pandas as pd 

df = pd.read_excel('data_set.xls')
col = ['sentence', 'your_label']
df = df[col]

# Encoding happens here
df.your_label = pd.Categorical(df.your_label)
df['label'] = df.book_label.cat.codes


train, test = train_test_split(df, test_size=0.2)
train.to_csv('train.csv', index=False)
test.to_csv('test.csv', index=False)


spec = model_spec.get('average_word_vec')

train_data = TextClassifierDataLoader.from_csv(
   filename='train.csv',
   text_column='sentence',
   label_column='label',
   model_spec=spec,
   delimiter=',',
   is_training=True)
test_data = TextClassifierDataLoader.from_csv(
  filename='test.csv',
  text_column='sentence',
  label_column='label',
  model_spec=spec,
  delimiter=',',
  is_training=False)

model = text_classifier.create(train_data, model_spec=spec, batch_size=5, epochs=4)

config = configs.QuantizationConfig.create_dynamic_range_quantization(optimizations=[tf.lite.Optimize.OPTIMIZE_FOR_LATENCY])
model.export(export_dir='average_word_vec/', export_format=[ExportFormat.LABEL, ExportFormat.VOCAB])

【讨论】:

    猜你喜欢
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    相关资源
    最近更新 更多