You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Google ML Engine上实现以字符串为输入的中文情感分析及预处理?

嘿,我来帮你把在Google ML Engine上构建中文情感分析模型的流程理清楚,包括你提到的字符串预处理,还有部署后怎么传字符串调用模型——结合你的代码片段来完善细节:

一、完善字符串预处理流程

你已经写了开头的几步,我帮你补全并优化,确保处理逻辑完整:

import tensorflow as tf

# 定义输入占位符,给它起个明确的名字,方便后续部署调用
input_x = tf.placeholder(tf.string, [None], name="input_sentence")

# 第一步:替换所有空白字符(包括换行符、空格、制表符),清理文本
# 用[\s\n]+匹配连续的空白/换行,替换为空字符串
cleaned_x = tf.regex_replace(input_x, r'[\s\n]+', '', name="clean_text")

# 第二步:将每个字符串拆分为单个字符的序列
# string_split返回的是SparseTensor(稀疏张量),必须转成DenseTensor才能后续处理
chars_sparse = tf.string_split(cleaned_x, delimiter='', skip_empty=True)
chars_dense = tf.sparse_tensor_to_dense(chars_sparse, default_value='', name="char_sequence")

# 第三步:填充/截断到固定长度(这里设为1000,你可以根据需求调整)
# 用tf.shape获取动态长度,因为批量输入里每个句子的字符数可能不一样
seq_length = tf.shape(chars_dense)[1]
pad_length = tf.maximum(0, 1000 - seq_length)

# 填充到固定长度,不足的补空字符串,超过的就截断
fixed_length_chars = tf.pad(chars_dense, 
                            paddings=[[0, 0], [0, pad_length]],
                            mode='CONSTANT',
                            constant_values='',
                            name="padded_chars")
fixed_length_chars = tf.slice(fixed_length_chars, [0, 0], [-1, 1000], name="truncated_chars")

这里几个关键点要注意:

  • 替换空白的时候要把换行符\n也包含进去,不然换行符会留在文本里
  • tf.string_split返回的稀疏张量必须转成稠密张量,不然没法做填充操作
  • 用动态长度tf.shape而不是静态shape,因为批量输入的句子长度是不固定的
二、把字符序列转成模型能训练的数值特征

预处理完字符后,得把字符转成索引或者嵌入向量,才能喂给模型训练:

# 假设你已经有预定义的字符词汇表(可以从训练数据中统计生成)
# 记得把<PAD>(填充)和<UNK>(未知字符)放在前面
char_vocab = tf.constant(['<PAD>', '<UNK>', '我', '爱', '你', '好', '坏', ...])

# 构建字符到索引的映射表,未知字符默认映射到<UNK>的索引(这里是1)
char_to_idx = tf.contrib.lookup.index_table_from_tensor(char_vocab, default_value=1)

# 将字符序列转换为索引序列,这样模型就能处理了
char_indices = char_to_idx.lookup(fixed_length_chars)
三、模型构建与ML Engine部署准备

在ML Engine上训练和本地逻辑差不多,但要注意保存模型时必须定义明确的输入输出签名,这样部署后才能直接接收字符串输入:

如果你用的是tf.estimator框架,可以这么导出模型:

# 定义输入特征规范,告诉ML Engine我们接收的是字符串类型的输入
feature_spec = {'input_sentence': tf.FixedLenFeature([], tf.string)}
serving_input_receiver_fn = tf.estimator.export.build_parsing_serving_input_receiver_fn(feature_spec)

# 训练完成后导出SavedModel,这个格式是ML Engine要求的
estimator.export_saved_model(export_dir_base='./saved_model', serving_input_receiver_fn=serving_input_receiver_fn)

如果用的是低级API,就手动定义签名:

# 假设your_model_output是你的模型最终输出(比如情感分类的概率/标签)
predict_signature = tf.saved_model.signature_def_utils.predict_signature_def(
    inputs={'input_sentence': input_x},
    outputs={'sentiment': your_model_output}
)

# 保存模型
builder = tf.saved_model.builder.SavedModelBuilder('./saved_model')
builder.add_meta_graph_and_variables(
    sess, [tf.saved_model.tag_constants.SERVING],
    signature_def_map={
        tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: predict_signature
    }
)
builder.save()
四、在ML Engine上运行模型(预测)

模型部署到ML Engine后,有两种常用的调用方式:

方式1:用gcloud命令行调用

单条预测:

gcloud ml-engine predict --model=your_model_name --version=your_version --json-instances='{"input_sentence": "我今天心情特别好"}'

批量预测:先准备一个predict_inputs.json文件,内容如下:

{"input_sentence": "我今天心情特别好"}
{"input_sentence": "这个产品用起来太糟心了"}
{"input_sentence": "今天的天气还不错"}

然后运行命令:

gcloud ml-engine predict --model=your_model_name --version=your_version --json-instances=predict_inputs.json

方式2:用Python客户端调用

适合集成到你的应用里:

from googleapiclient import discovery
from oauth2client.client import GoogleCredentials

# 获取Google Cloud认证
credentials = GoogleCredentials.get_application_default()
ml_service = discovery.build('ml', 'v1', credentials=credentials)

# 替换成你的项目ID、模型名和版本号
project_id = "your-google-cloud-project-id"
model_name = "your-sentiment-model"
version_name = "v1"

# 构造请求体,输入是字符串列表
request_body = {
    "instances": [
        {"input_sentence": "我今天心情特别好"},
        {"input_sentence": "这个产品用起来太糟心了"}
    ]
}

# 发送预测请求
response = ml_service.projects().predict(
    name=f"projects/{project_id}/models/{model_name}/versions/{version_name}",
    body=request_body
).execute()

# 打印结果
print(response)

注意:这里的input_sentence必须和你模型里占位符的name完全一致,不然ML Engine找不到输入!

内容的提问来源于stack exchange,提问作者Henry Chen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:16:15