[to #43627720] pipeline task_oriented_conversation

Link: https://code.alibaba-inc.com/Ali-MaaS/MaaS-lib/codereview/9608407
This commit is contained in:
ly119399
2022-08-04 09:10:15 +08:00
committed by yingda.chen
parent 3f9a5d041f
commit 8246174104
8 changed files with 45 additions and 36 deletions

View File

@@ -112,7 +112,7 @@ class Pipelines(object):
csanmt_translation = 'csanmt-translation'
nli = 'nli'
dialog_intent_prediction = 'dialog-intent-prediction'
dialog_modeling = 'dialog-modeling'
task_oriented_conversation = 'task-oriented-conversation'
dialog_state_tracking = 'dialog-state-tracking'
zero_shot_classification = 'zero-shot-classification'
text_error_correction = 'text-error-correction'

View File

@@ -15,7 +15,8 @@ from modelscope.utils.constant import ModelFile, Tasks
__all__ = ['SpaceForDialogModeling']
@MODELS.register_module(Tasks.dialog_modeling, module_name=Models.space)
@MODELS.register_module(
Tasks.task_oriented_conversation, module_name=Models.space)
class SpaceForDialogModeling(TorchModel):
def __init__(self, model_dir: str, *args, **kwargs):
@@ -33,8 +34,8 @@ class SpaceForDialogModeling(TorchModel):
Config.from_file(
os.path.join(self.model_dir, ModelFile.CONFIGURATION)))
import torch
self.config.use_gpu = self.config.use_gpu and torch.cuda.is_available()
self.config.use_gpu = True if 'device' not in kwargs or kwargs[
'device'] == 'gpu' else False
self.text_field = kwargs.pop(
'text_field',

View File

@@ -326,7 +326,7 @@ TASK_OUTPUTS = {
# (Deprecated) dialog modeling prediction result for single sample
# sys : ['you', 'are', 'welcome', '.', 'have', 'a', 'great', 'day', '!']
Tasks.dialog_modeling: [OutputKeys.RESPONSE],
Tasks.task_oriented_conversation: [OutputKeys.RESPONSE],
# (Deprecated) dialog state tracking result for single sample
# {

View File

@@ -51,8 +51,8 @@ DEFAULT_MODEL_FOR_PIPELINE = {
Tasks.dialog_intent_prediction:
(Pipelines.dialog_intent_prediction,
'damo/nlp_space_dialog-intent-prediction'),
Tasks.dialog_modeling: (Pipelines.dialog_modeling,
'damo/nlp_space_dialog-modeling'),
Tasks.task_oriented_conversation: (Pipelines.task_oriented_conversation,
'damo/nlp_space_dialog-modeling'),
Tasks.dialog_state_tracking: (Pipelines.dialog_state_tracking,
'damo/nlp_space_dialog-state-tracking'),
Tasks.text_error_correction:

View File

@@ -5,7 +5,7 @@ from modelscope.utils.import_utils import LazyImportModule
if TYPE_CHECKING:
from .dialog_intent_prediction_pipeline import DialogIntentPredictionPipeline
from .dialog_modeling_pipeline import DialogModelingPipeline
from .task_oriented_conversation_pipeline import TaskOrientedConversationPipeline
from .dialog_state_tracking_pipeline import DialogStateTrackingPipeline
from .fill_mask_pipeline import FillMaskPipeline
from .named_entity_recognition_pipeline import NamedEntityRecognitionPipeline
@@ -24,7 +24,8 @@ else:
_import_structure = {
'dialog_intent_prediction_pipeline':
['DialogIntentPredictionPipeline'],
'dialog_modeling_pipeline': ['DialogModelingPipeline'],
'task_oriented_conversation_pipeline':
['TaskOrientedConversationPipeline'],
'dialog_state_tracking_pipeline': ['DialogStateTrackingPipeline'],
'fill_mask_pipeline': ['FillMaskPipeline'],
'single_sentence_classification_pipeline':

View File

@@ -11,12 +11,13 @@ from modelscope.pipelines.builder import PIPELINES
from modelscope.preprocessors import DialogModelingPreprocessor
from modelscope.utils.constant import Tasks
__all__ = ['DialogModelingPipeline']
__all__ = ['TaskOrientedConversationPipeline']
@PIPELINES.register_module(
Tasks.dialog_modeling, module_name=Pipelines.dialog_modeling)
class DialogModelingPipeline(Pipeline):
Tasks.task_oriented_conversation,
module_name=Pipelines.task_oriented_conversation)
class TaskOrientedConversationPipeline(Pipeline):
def __init__(self,
model: Union[SpaceForDialogModeling, str],

View File

@@ -79,7 +79,7 @@ class NLPTasks(object):
token_classification = 'token-classification'
conversational = 'conversational'
text_generation = 'text-generation'
dialog_modeling = 'dialog-modeling'
task_oriented_conversation = 'task-oriented-conversation'
dialog_intent_prediction = 'dialog-intent-prediction'
dialog_state_tracking = 'dialog-state-tracking'
table_question_answering = 'table-question-answering'

View File

@@ -6,13 +6,13 @@ from modelscope.hub.snapshot_download import snapshot_download
from modelscope.models import Model
from modelscope.models.nlp import SpaceForDialogModeling
from modelscope.pipelines import pipeline
from modelscope.pipelines.nlp import DialogModelingPipeline
from modelscope.pipelines.nlp import TaskOrientedConversationPipeline
from modelscope.preprocessors import DialogModelingPreprocessor
from modelscope.utils.constant import Tasks
from modelscope.utils.test_utils import test_level
class DialogModelingTest(unittest.TestCase):
class TaskOrientedConversationTest(unittest.TestCase):
model_id = 'damo/nlp_space_dialog-modeling'
test_case = {
'sng0073': {
@@ -92,7 +92,7 @@ class DialogModelingTest(unittest.TestCase):
}
def generate_and_print_dialog_response(
self, pipelines: List[DialogModelingPipeline]):
self, pipelines: List[TaskOrientedConversationPipeline]):
result = {}
for step, item in enumerate(self.test_case['sng0073']['log']):
@@ -108,39 +108,37 @@ class DialogModelingTest(unittest.TestCase):
@unittest.skipUnless(test_level() >= 2, 'skip test in current test level')
def test_run_by_direct_model_download(self):
cache_path = snapshot_download(self.model_id)
cache_path = snapshot_download(
self.model_id, revision='task_oriented_conversation')
preprocessor = DialogModelingPreprocessor(model_dir=cache_path)
model = SpaceForDialogModeling(
model_dir=cache_path,
text_field=preprocessor.text_field,
config=preprocessor.config,
device='cpu')
config=preprocessor.config)
pipelines = [
DialogModelingPipeline(
model=model, preprocessor=preprocessor, device='cpu'),
TaskOrientedConversationPipeline(
model=model, preprocessor=preprocessor),
pipeline(
task=Tasks.dialog_modeling,
task=Tasks.task_oriented_conversation,
model=model,
preprocessor=preprocessor,
device='cpu')
preprocessor=preprocessor)
]
self.generate_and_print_dialog_response(pipelines)
@unittest.skipUnless(test_level() >= 0, 'skip test in current test level')
def test_run_with_model_from_modelhub(self):
model = Model.from_pretrained(self.model_id)
preprocessor = DialogModelingPreprocessor(
model_dir=model.model_dir, device='cpu')
model = Model.from_pretrained(
self.model_id, revision='task_oriented_conversation')
preprocessor = DialogModelingPreprocessor(model_dir=model.model_dir)
pipelines = [
DialogModelingPipeline(
model=model, preprocessor=preprocessor, device='cpu'),
TaskOrientedConversationPipeline(
model=model, preprocessor=preprocessor),
pipeline(
task=Tasks.dialog_modeling,
task=Tasks.task_oriented_conversation,
model=model,
preprocessor=preprocessor,
device='cpu')
preprocessor=preprocessor)
]
self.generate_and_print_dialog_response(pipelines)
@@ -149,17 +147,25 @@ class DialogModelingTest(unittest.TestCase):
def test_run_with_model_name(self):
pipelines = [
pipeline(
task=Tasks.dialog_modeling, model=self.model_id, device='cpu'),
task=Tasks.task_oriented_conversation,
model=self.model_id,
model_revision='task_oriented_conversation'),
pipeline(
task=Tasks.dialog_modeling, model=self.model_id, device='cpu')
task=Tasks.task_oriented_conversation,
model=self.model_id,
model_revision='task_oriented_conversation')
]
self.generate_and_print_dialog_response(pipelines)
@unittest.skipUnless(test_level() >= 2, 'skip test in current test level')
def test_run_with_default_model(self):
pipelines = [
pipeline(task=Tasks.dialog_modeling, device='cpu'),
pipeline(task=Tasks.dialog_modeling, device='cpu')
pipeline(
task=Tasks.task_oriented_conversation,
model_revision='task_oriented_conversation'),
pipeline(
task=Tasks.task_oriented_conversation,
model_revision='task_oriented_conversation')
]
self.generate_and_print_dialog_response(pipelines)