如果您没有固定术语集,或者无法将您喜欢检测的实体表示为正则表达式,那么可以构建定制变换器模型。 该模型基于预先训练的 Slate IBM Foundation 模型。
使用预先训练的模型时,可以构建多语言模型。 您不必为每种语言都有单独的模型。
您需要足够的训练数据来实现高质量 (每个实体类型 2000-5000)。 如果有可用的 GPU ,请将其用于训练。
训练变换器模型是 CPU 和内存密集型的。 预定义环境的大小不足以完成训练。 创建具有较大 CPU 和内存量的定制 Notebook 环境,并使用该环境来运行 Notebook。 如果您有可用的 GPU ,那么强烈建议使用这些 GPU。 请参阅 创建您自己的环境模板。
输入数据格式
训练数据表示为具有多个 JSON 对象的数组。 每个 JSON 对象都表示一个训练实例,并且必须具有 text
和 mentions
字段。 text
字段表示训练语句文本, mentions
是 JSON 对象的数组,其中包含每个提及项的文本,类型和位置:
[
{
"text": str,
"mentions": [{
"location": {
"begin": int,
"end": int
},
"text": str,
"type": str
},...]
},...
]
示例:
[
{
"id": 38863234,
"text": "I'm moving to Colorado in a couple months.",
"mentions": [{
"text": "Colorado",
"type": "Location",
"location": {
"begin": 14,
"end": 22
}
},
{
"text": "couple months",
"type": "Duration",
"location": {
"begin": 28,
"end": 41
}
}]
}
]
训练模型
变换器算法正在使用预先训练的 Slate 模型。
有关可用 Slate 型号的列表,请参阅下表:
模型 | 描述 | 已发布版本可用 | 运行时版本中可用 |
---|---|---|---|
pretrained-model_slate.153m.distilled_many_transformer_multilingual_uncased |
通用、多用途模型 | 23.1, 24.1 | |
pretrained-model_slate.125m.finance_many_transformer_en_cased |
根据金融内容进行预训练的模型 | 24.1 | |
pretrained-model_slate.110m.cybersecurity_many_transformer_en_uncased |
针对网络安全内容进行预训练的模型 | 24.1 | |
pretrained-model_slate.125m.biomedical_many_transformer_en_cased |
针对生物医学内容进行预训练的模型 | 24.1 |
要获取可用于配置 Transformer 训练的选项,请输入:
help(watson_nlp.workflows.entity_mentions.transformer.Transformer.train)
样本代码
import watson_nlp
from watson_nlp.toolkit.entity_mentions_utils.train_util import prepare_stream_of_train_records_from_JSON_collection
# load the syntax models for all languages to be supported
syntax_model = watson_nlp.load('syntax_izumo_en_stock')
syntax_models = [syntax_model]
# load the pretrained Slate model
pretrained_model_resource = watson_nlp.load('<pretrained Slate model>')
# prepare the train and dev data
# entity_train_data is a directory with one or more json files in the input format specified above
train_data_stream = prepare_stream_of_train_records_from_JSON_collection('entity_train_data')
dev_data_stream = prepare_stream_of_train_records_from_JSON_collection('entity_train_data')
# train a transformer workflow model
trained_workflow = watson_nlp.workflows.entity_mentions.transformer.Transformer.train(
train_data_stream=train_data_stream,
dev_data_stream=dev_data_stream,
syntax_models=syntax_models,
template_resource=pretrained_model_resource,
num_train_epochs=3,
)
在新数据上应用模型
使用 run()
方法在新数据上应用经过训练的变换器工作流程模型,就像在任何现有预训练块上使用一样。
代码样本
trained_workflow.run('Bruce is at Times Square')
存储和装入模型
定制变换器模型可以存储为任何其他模型,如 保存和装入定制模型中所述,使用 ibm_watson_studio_lib
。
要装入定制变压器模型,需要执行额外的步骤:
确保您在项目的 管理 选项卡上的 " 访问控制 " 页面上具有访问令牌。 只有项目管理员才能创建访问令牌。 访问令牌可以具有 查看者 或 编辑者 访问许可权。 只有编辑者才能将该令牌插入到 Notebook 中。
通过单击 Notebook 操作栏中的 更多> 插入项目令牌 ,然后运行单元格,将项目令牌添加到 Notebook。
通过运行插入的隐藏代码单元,将创建可用于
ibm-watson-studio-lib
库中的函数的wslib
对象。 有关可用ibm-watson-studio-lib
函数的信息,请参阅 使用 ibm-watson-studio-lib for Python。将模型下载并解压缩到本地运行时环境:
import zipfile model_zip = 'trained_workflow_file' model_folder = 'trained_workflow_folder' wslib.download_file('trained_workflow', file_name=model_zip) with zipfile.ZipFile(model_zip, 'r') as zip_ref: zip_ref.extractall(model_folder)
从抽取的文件夹装入模型:
trained_workflow = watson_nlp.load(model_folder)
父主题: 创建您自己的模型