Skip to content

意图识别

情绪识别也可以按照这个模板做,默认TfidfVectorizer会更具符号与空格分词。中文场景下一般要先分词在提取特征


from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import SVC
from sklearn.pipeline import make_pipeline
from sklearn.metrics import classification_report

# 示例数据
train_data = [
    ("我想看《复仇者联盟》", "查询电影信息"),
    ("预订明天的电影票", "预订电影票"),
    ("《复仇者联盟》什么时候放映?", "查询放映时间"),
    ("我想知道《复仇者联盟》的放映时间", "查询放映时间"),
    ("预订《复仇者联盟》的电影票", "预订电影票"),
    ("《复仇者联盟》票价多少?", "查询电影票价"),
    ("我想预订《复仇者联盟》的票", "预订电影票"),
    ("《复仇者联盟》在哪里放映?", "查询放映地点"),
    ("我想看《复仇者联盟》,有票吗?", "查询电影票可用性"),
    ("《复仇者联盟》放映时间是几点?", "查询放映时间"),
    ("我想买《复仇者联盟》的票", "预订电影票"),
    ("《复仇者联盟》放映地点在哪里?", "查询放映地点"),
    ("《复仇者联盟》还有票吗?", "查询电影票可用性"),
    ("我想知道《复仇者联盟》的票价", "查询电影票价"),
    ("预订《复仇者联盟》明天的票", "预订电影票"),
    ("《复仇者联盟》放映时间是什么时候?", "查询放映时间"),
    ("我想看《复仇者联盟》,有座位吗?", "查询电影票可用性"),
    ("《复仇者联盟》在哪里可以看?", "查询放映地点"),
    ("我想买《复仇者联盟》的电影票", "预订电影票"),
    ("《复仇者联盟》票价是多少?", "查询电影票价"),
]

# 分离输入文本和标签
texts, labels = zip(*train_data)

# 创建向量化器和分类器
vectorizer = TfidfVectorizer()
classifier = SVC(kernel='linear')

# 创建向量化器
vectorizer = TfidfVectorizer()




# 创建管道
model = make_pipeline(vectorizer, classifier)

# 训练模型
model.fit(texts, labels)

# 测试数据
test_data = [
    ("我想知道《知乎》的放映时间", "查询放映时间"),
    ("预订《复仇者联盟》的电影票", "预订电影票")
]

# 分离测试数据
test_texts, test_labels = zip(*test_data)

# 预测
predictions = model.predict(test_texts)
predictions


#%%
# 将文本数据转换为特征向量
X_train = vectorizer.fit_transform(texts)
X_train.toarray()
vectorizer.get_feature_names_out()

#%%
# 评估模型
print(classification_report(test_labels, predictions))