mirror of
https://github.com/modelscope/modelscope.git
synced 2026-09-01 19:49:03 +02:00
[to #43627720] pipeline task_oriented_conversation
Link: https://code.alibaba-inc.com/Ali-MaaS/MaaS-lib/codereview/9608407
This commit is contained in:
@@ -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'
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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
|
||||
# {
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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':
|
||||
|
||||
@@ -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],
|
||||
@@ -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'
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user