0

试图将机器学习集成到语音聊天应用程序中。目前,用户可以说,做两件事 - 根据语音输入接受或拒绝(使用 Apple Speech to Text API 转换为文本)要接受,输入可以是接受、好的、确认等,要拒绝,输入可以是拒绝,不,不,我不同意等。

我有一个使用 Keras 构建的模型,并从已集成到我的应用程序中的 Tensorflow 模型格式转换为 mlmodel。

该模型采用 MultiArray 输入并提供 Array 输出。

一个 JSON 文件用于训练,它具有意图的参数(例如 - 'Accept' 意图将具有 'accept'、'okay'、'confirm' 作为参数)。考虑到所有参数中唯一的小写单词,创建一个词袋,这个大小用于从传递给预测方法的输入字符串创建 MLMultiArray,如

让预测=尝试!模型.预测(输入 1:mlMultiArray)

这给出了 [(0 到 1), (0 到 1)] 的输出,其中索引 0 处的元素表示接受意图,索引 1 处的元素表示拒绝意图的可能性。

如果 json 文件的参数数量较少,这可以正常工作。例如,当词袋(所有参数中没有唯一词)有 17 个元素时,程序运行良好。但是,当我添加更多参数并且词袋现在有 36 个元素时,我收到一个错误 Fatal error: 'try!' 表达式意外引发错误:错误域 = com.apple.CoreML 代码 = 0“形状 (36) 不在允许形状的枚举集中” UserInfo={NSLocalizedDescription=形状 (36) 不在允许形状的枚举集中}:

使用https://developer.apple.com/documentation/coreml/mlmultiarray/2879232-init这个方法来初始化 ML MultiArray

4

1 回答 1

1

Core ML 模型期望输入始终具有固定大小,例如长度为 17 的向量。

您还可以使用“大小灵活性”,它告诉模型它应该期望输入在一定范围内,例如 10 到 40 个元素长度之间的向量。

听起来您需要配置模型以实现尺寸灵活性。你可以使用flexible_shape_utilsfromcoremltools这个。

于 2019-08-19T14:47:55.063 回答