Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

项目背景

智能对话系统(如聊天机器人、智能语音助手)、搜索引擎和垂直领域问答系统的核心。 不是闲聊助手,理解查询意图,并将其转化为计算机可以精确处理和执行的结构化数据。

输入和输出

原始输入(text): “查询许昌到中山的高铁票”

语义解析输出(Structured Data): intent: 意图 (用户提问的类型) QUERY(查询)、BOOK(预订)、CANCEL(取消)、COMPARE(对比) domain: 领域 slots:槽位(实体) { “Dest”: “中山”, “Src”: “许昌” }

组织为自然语言 -》 输出

项目产出(一个可部署、可调用、高准确率的XX领域助手)

智能对话助手(智能体)接收用户的自然语言输入,并输出结构化的、机器可读的数据,以便后续系统执行精确的查询。

项目技术路线

  • 技术方案 BERT(微调):意图识别 + 实体识别, 3天

  • 技术方案 GPT(提示词、后序可以考虑微调):大模型识别意图 + 实体, 3个小时 方法1: 提示词

    方法2: tools 信息解析 优点:比较可控,底层,单独一个程序 不受其他影响; 缺点:需要单独部署,比如fastapi

    方法3: coze / dify 低代码实现 (快速实现) 优点:入门很简单,ai agent 开发平台,大公司都会部署一个类型的平台 缺点:做复杂的很难,性能受限于 dify 平台,不同的agent 可能会相互影响

    方法4: lora微调大模型 前面的1-3不满足要求的时候(提示词写不出来) 或 速度 / 可控性要求比较高的时间 优点:可控,可定制化,微调之后不需要写很复杂的提示词 缺点:比较复杂,需要额外gpu微调、部署

Q1:文本分类与实体识别的关系及Loss选择

在 Joint-BERT 模型中,文本分类(Intent Classification)和实体识别(Slot Filling)可以共享同一个 BERT 编码器。

BERT 提取的语义特征同时支撑两个任务。意图识别利用 [CLS] 向量或全局池化向量来理解整句大意;实体识别则利用每个 Token 的输出向量来判断标签。意图和槽位具有强相关性。例如,当意图被识别为“订票”时,序列中出现“城市名”作为实体的概率会大大增加。

  • Loss 函数:
    1. 文本分类 (Intent):通常使用 CrossEntropyLoss(交叉熵损失)。
    2. 实体识别 (Slot):同样使用 CrossEntropyLoss。

直接使用 loss = seq_loss + token_loss 最方便,但如果某个任务可能很快就达到了瓶颈,而另一个任务还在剧烈波动,简单的相加会导致模型在梯度下降时被“带偏”。

  1. 静态权重分配:引入超参数 $\alpha$ 和 $\beta$,例如 $Loss = \alpha \cdot seq_loss + \beta \cdot token_loss$。通过实验手动调优比例。
  2. 动态权重微调 (Uncertainty Weighting):利用同方差不确定性(Homoscedastic Uncertainty)来自动学习任务权重,让模型在训练过程中自行调节哪个任务更重要。

Q2:基于 Prompt 的信息解析(智能对话系统),设计以下prompt?

Role: 你是一个高效的 NLU(自然语言理解)解析专家。你的任务是从用户的输入中提取“意图”和“槽位(实体)”。

Task:

  1. 识别用户的意图(如:查询天气、播放音乐、设置闹钟、其他)。
  2. 识别并提取槽位实体(如:时间、地点、歌手名、歌曲名)。

Output Format (JSON ONLY):

{
  "intent": "意图名称",
  "slots": {
    "实体类型": "实体值"
  }
}

Example:⽤户输⼊: "帮我播放周杰伦的⻘花瓷" 输出: {"intent": "play_music", "slots": {"singer": "周杰伦", "song": "⻘花瓷"}}

bert训练结果参数

意图识别:

accuracy:0.9573643410852714

precision:0.9573643410852714

recall:0.9573643410852714

f1:0.9573643410852714

              precision    recall  f1-score   support

           0       1.00      0.94      0.97        16
           2       0.00      0.00      0.00         1
           3       1.00      1.00      1.00         4
           4       1.00      1.00      1.00        16
           5       0.00      0.00      0.00         1
           6       1.00      1.00      1.00        22
           7       0.81      0.94      0.87        18
           8       0.89      0.95      0.92        57
           9       1.00      0.50      0.67         2
          10       0.00      0.00      0.00         0
          11       0.00      0.00      0.00         1
          12       0.98      0.98      0.98       327
          13       0.00      0.00      0.00         1
          14       0.75      1.00      0.86         3
          15       1.00      1.00      1.00         1
          17       1.00      1.00      1.00         4
          18       1.00      0.60      0.75         5
          19       1.00      1.00      1.00        14
          21       0.00      0.00      0.00         1
          22       0.93      1.00      0.96        13
          23       1.00      0.89      0.94         9

    accuracy                           0.96       516
   macro avg       0.68      0.66      0.66       516
weighted avg       0.95      0.96      0.95       516

槽位填充:

accuracy:0.9164364640883977

precision:0.711864406779661

recall:0.7753846153846153

f1:0.7422680412371133

                   precision    recall  f1-score   support

             Dest       0.67      0.29      0.40         7
              Src       0.25      0.14      0.18         7
             area       0.00      0.00      0.00         4
           artist       0.75      0.75      0.75         8
       artistRole       0.00      0.00      0.00         2
           author       0.79      0.85      0.81        13
         category       0.55      0.76      0.64        42
             code       0.83      0.83      0.83         6
          content       0.83      0.88      0.86        17
    datetime_date       0.75      0.95      0.84        19
    datetime_time       0.54      0.64      0.58        11
         dishName       0.77      0.88      0.82        74
        dishNamet       0.00      0.00      0.00         1
          dynasty       1.00      1.00      1.00        11
      endLoc_area       0.00      0.00      0.00         2
      endLoc_city       0.81      0.98      0.88        43
       endLoc_poi       0.41      0.64      0.50        11
  endLoc_province       0.00      0.00      0.00         1
          episode       0.00      0.00      0.00         1
             film       0.00      0.00      0.00         1
       ingredient       0.53      0.56      0.55        16
          keyword       0.88      0.84      0.86        25
    location_area       0.00      0.00      0.00         2
    location_city       0.44      1.00      0.62         4
     location_poi       0.12      0.14      0.13         7
location_province       0.00      0.00      0.00         3
             name       0.73      0.87      0.79       182
       popularity       0.00      0.00      0.00         5
       queryField       1.00      1.00      1.00         2
     questionWord       0.00      0.00      0.00         1
         receiver       0.25      0.25      0.25         4
         relIssue       0.00      0.00      0.00         1
       scoreDescr       0.00      0.00      0.00         1
             song       0.53      0.53      0.53        15
   startDate_date       0.88      1.00      0.94        15
   startDate_time       0.00      0.00      0.00         1
    startLoc_area       0.00      0.00      0.00         1
    startLoc_city       0.80      0.92      0.85        38
     startLoc_poi       0.00      0.00      0.00         1
         subfocus       0.00      0.00      0.00         1
              tag       0.00      0.00      0.00         5
           target       1.00      1.00      1.00        12
     teleOperator       0.00      0.00      0.00         1
          theatre       0.00      0.00      0.00         2
        timeDescr       0.00      0.00      0.00         2
        tvchannel       0.70      0.76      0.73        21
        yesterday       0.00      0.00      0.00         1

        micro avg       0.71      0.78      0.74       650
        macro avg       0.36      0.39      0.37       650
     weighted avg       0.68      0.78      0.72       650
=================================
打开相机这
意图: LAUNCH
槽位: [('name', '相', 2, 2)]
=================================
=================================
国际象棋开局
意图: QUERY
槽位: [('name', '国际象棋', 0, 3)]
=================================
=================================
打开淘宝购物
意图: LAUNCH
槽位: [('name', '淘宝', 2, 3)]
=================================
=================================
搜狗
意图: LAUNCH
槽位: []
=================================
=================================
打开uc浏览器
意图: LAUNCH
槽位: [('name', 'uc浏', 2, 4)]
=================================
=================================
帮我打开人人
意图: LAUNCH
槽位: []
=================================
=================================
打开酷狗并随机播放
意图: LAUNCH
槽位: [('name', '酷狗', 2, 3)]
=================================
=================================
赶集
意图: LAUNCH
槽位: []
=================================
=================================
从合肥到上海可以到哪坐车?
意图: QUERY
槽位: [('startLoc_city', '合肥', 1, 2), ('endLoc_city', '上海', 4, 5)]
=================================
=================================
从台州到金华的汽车。
意图: QUERY
槽位: [('startLoc_city', '台', 1, 1), ('Src', '州', 2, 2), ('Dest', '金华', 4, 5)]
=================================
=================================
从西安到石嘴山的汽车票。
意图: QUERY
槽位: [('startLoc_city', '西安', 1, 2), ('endLoc_city', '石嘴', 4, 5), ('Dest', '山', 6, 6)]
=================================

About

智能对话系统(如聊天机器人、智能语音助手)、搜索引擎和垂直领域问答系统的核心。 不是闲聊助手,理解查询意图,并将其转化为计算机可以精确处理和执行的结构化数据。

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages