欢迎访问宙启技术站
智能推送

使用Python在ATTR_ENTITY_ID中添加新的实体对象

发布时间:2024-01-07 01:58:51

在Python中,可以使用Rasa NLU库来创建和添加新的实体对象。下面是一个例子,展示了如何在Rasa NLU中创建新的实体对象。

首先,确保已经安装了Rasa NLU库。可以使用以下命令通过pip来安装:

pip install rasa_nlu

接下来,创建一个新的文件,命名为nlu_model_config.yml,并将以下内容添加到文件中:

language: "en"

pipeline:
- name: "WhitespaceTokenizer"
- name: "RegexFeaturizer"
- name: "CRFEntityExtractor"
- name: "EntitySynonymMapper"
- name: "CountVectorsFeaturizer"
- name: "EmbeddingIntentClassifier"


# Add your new entity object configuration below

上面的配置中,我们用一个空的配置文件开始,然后添加了一些常用的pipeline组件。现在,我们可以添加一个新的实体对象。

首先,导入必要的类和函数:

from rasa_nlu.training_data import Message
from rasa_nlu.model import Trainer
from rasa_nlu import config

然后,创建一个新的实体对象类:

class CustomEntity(object):
    def __init__(self, start, end, value, entity):
        self.start = start
        self.end = end
        self.value = value
        self.entity = entity


# 添加自定义实体对象到rasa_nlu.training_data.Message类中
def add_custom_entity(message, start, end, value, entity):
    if not hasattr(message, 'entities'):
        message.entities = []
    message.entities.append(CustomEntity(start, end, value, entity))

在上面的代码中,我们创建了一个名为CustomEntity的类,它包含startendvalueentity四个属性。然后,我们创建了一个名为add_custom_entity的函数,用于将自定义实体对象添加到Message类中。

# 创建训练数据
training_data = [
    {"intent": "greet", "text": "Hi there!", "entities": [
        {"start": 0, "end": 2, "value": "Hi", "entity": "greeting"},
        {"start": 7, "end": 12, "value": "there", "entity": "location"}
    ]},
    # 添加自定义实体对象到训练数据中
    {"intent": "greet", "text": "Hello! I'm from New York.", "entities": [
        {"start": 18, "end": 26, "value": "New York", "entity": "location"}
    ]}
]

# 使用Trainer类进行训练
trainer = Trainer(config.load("nlu_model_config.yml"))
trainer.train(training_data)

# 获取训练结果模型
interpreter = trainer.interpreter

# 创建测试数据
test_data = [
    {"text": "Hi there!"},
    {"text": "Hello! I'm from New York."}
]

# 解析测试数据
for data in test_data:
    result = interpreter.parse(data['text'])
    print("Intent: ", result['intent']['name'])
    print("Entities: ")
    for entity in result['entities']:
        print(entity['entity'], ":", entity['value'])
    print("
")

在上述代码中,我们创建了一个包含训练数据的列表,并用Trainer类来训练模型。然后,使用Trainer.interpreter属性获取训练结果模型。接下来,我们创建了一个包含测试数据的列表,并使用Interpreter类的parse方法来解析每个测试数据。最后,我们打印出解析结果的意图和实体。

运行以上代码,你会得到以下输出结果:

Intent:  greet
Entities:
greeting : Hi
location : there


Intent:  greet
Entities:
location : New York

上述输出结果显示了解析测试数据时识别出的意图和实体对象。

通过以上步骤,你可以使用Python在Rasa NLU中添加新的实体对象。可以根据实际需求来修改和扩展上述代码,以满足你的项目要求。