task_categories:question-answering task_categories:text2text-generation size_categories:100K<n<1M language:zh finance region:us
@dataset{nxlink_question_answer,
  author       = {Xing Tian},
  title        = {nxlink_question_answer},
  month        = sep,
  year         = 2023,
  publisher    = {Xing Tian},
  version      = {1.0},
}
---
task_categories:
- question-answering
- text2text-generation
language:
- zh
tags:
- finance
size_categories:
- 100K<n<1M
---
## NXLink Document QA

Document QA 由两部分组成: 
(1)文档检索. 
(2)文档问答.  

LLM 大模型给我们提供的是上下文理解和生成答案的能力, 即解决 "文档问答" 的问题.
所以我们要做的 Document QA 主要工作在 "文档检索" 上面.
这是一个信息检索的问题, 类似于搜索引擎, 是一个专门的任务.




### 信息检索介绍
信息检索大致分为两类: 基于词汇和基于语义向量.



**基于词汇**的方法有 TF-IDF, BM25 算法. 
Elasticsearch 就是这种原理. 
其中涉及同义词, 停用词等预处理过程.

**优点**在于可解释性强, 并且准确率并不差.
**缺点**是: 不包含语义信息. 例如以下示例就不能正确的匹配:  

```text
doc: 北京风景很好,
doc: 云南风景很好,
query: 适合旅游的城市,
```



**基于语义向量**的方法, 即基于神经网络的文本向量化 embedding. 
向量数据库就是对向量查询过程进行优化, 而匹配结果的好坏取决于 embedding 向量化本身.  

**优点**是它从大规模语料训练, 向量匹配不依赖字面意思, 不需要制作同义词表, 停用词表等. 
**缺点**是它的可解释性差, 匹配错误时难以修正.  并且query是疑问句, 而document是陈述句, 两者之间有本质上的不同, 会造成匹配上的偏差. 



#### 信息检索应用介绍

以上两类基于词汇和基于语义向量的方法是两种基本方法, 而完善的信息检索系统(应用)往往是这些方法的组合. 例如: 



电商问答: 

```text
(1)从用户query提取原信息, 如: 主体(例如: 产品名称, 服务名称). 场景(例如: 退换货, 维修等). 
(2)根据"主体", "场景" 缩小信息检索的范围. 例如: 检索到该产品的退换货政策段落. 
(3)根据产品退换货政策介绍对用户query进行回答. 

以上3步, 
(1)第一步, 采用分类模型, 实体识别. 
(2)第二步, 采用Elasticsearch 搜索. 
(3)第三步, 采用 MRC 机器阅读理解. 
```



新闻推荐: 

```text
(1)收集用户信息, 总结用户偏好. 例如其对各类新闻的感兴趣程度. 
(2)根据用户对各类新闻的感兴趣程度, 再根据用户query从各领域有权重地检索过滤. 

总体思路就是缩小范围再检索. 不仅可以提高准确率, 还可以降低计算量. 
```



### NXLink Document QA 介绍

基于对以上信息的理解之后, 我们根据 [NXLink](https://help.nxcloud.com/nxlink/docs/new-user) 的文档制作了基于 LLM 的问答系统. 其实现流程是: 

1. 根据document 生成 question-answer 问答对. 
2. 将问答对写入 Elasticsearch. 
3. 用户 query 在 ES 中检索出 5 个最相似的问答对. 
4. LLM 根据这 5 个候选问答对为用户 query 生成答案 answer. 



主要面临的问题是: 



**问题1:** 

```text
query是疑问句, document是陈述句, 并且query较短, document较长, 两者本质不同, 所以向量匹配时必定不能达到最好的效果. 
```

解决办法: 

```text
(1)利用 LLM, 给定document, 让大模型对其提问 question, 并给出相应的答案 answer. 
(2)检索时, 根据用户query与question 匹配, 可以采用 Elasticsearch 也可以采用 embedding 向量. 
(3)根据检索结果直接返回答案, 将检索到的问答对作为上下文, 让LLM生成query的答案. 
```

缺点: 

```text
给大量的 document 生成 question, answer, 调用量特别大, 很花钱. 
```



**问题2:** 

```text
document 生成 question-answer, 再根据 query 生成 answer 时可能产品歧义. 如下: 
```

文档段落

```text
https://help.nxcloud.com/nxlink/docs/jaWHjt
#### 第 2 步：创建目标 WABA
**该步骤由客户操作，NXCLOUD协助**
可以通过NXCLOUD的嵌入式注册创建完成，嵌入式注册方式有两种，需根据客户需求选择
1）NXLink注册方式：[嵌入式注册&认证指南(NXLink)](https://help.nxcloud.com/nxlink/docs/Mz2rZR)
2）API注册方式：[嵌入式注册&认证指南(API)](https://help.nxcloud.com/nxlink/docs/x3b8oL)
```

生成 question-answer

```text
question: 什么是NXLink和API注册方式？
answer: NXLink和API注册方式是NXCLOUD提供的嵌入式注册方式，用来创建目标WABA账号。NXLink注册方式是通过安装NXLink插件的方式完成嵌入式注册，而API注册方式则是使用API进行嵌入式注册。
```

为 query 生成 answer

```text
query: NXLink是做什么的. 
answer: NXLink是NXCLOUD提供的嵌入式注册方式，用来创建目标WABA账号。NXLink注册方式是通过安装NXLink插件的方式完成嵌入式注册。
```

其中: "NXLink" 和 "NXLink注册方式" 最终被混淆. 



解决办法: 

```text
问题产生是 LLM 过程的固有问题. 
优化的方法是向数据库中写入更多与 query (NXLink是做什么的) 更接近的候选数据. 
即需要补充真正能够回答该 query的问答对. 
```

缺点: 

```text
此解决办法也暴露了一个问题, 即: 
大语言模型 LLM 并不能全自动地解决 Document QA 的问题, 其中仍然需要很多人工参与, 人工校验的部分. 
```





**问题3:** 

```text
大模型生成 question-answer 问答对时, 只是针对当前段落提问, 而无法考虑到全局中其它文档的内容. 

例如, 电商场景中, 每个产品都有自己的售后政策, 但大模型生成的问题只会是 "产品维修是免费的吗?". 其中缺少了对应哪个产品的信息, 这很可能导致匹配错误, 并且 LLM 还回答得很有信心, 最终误导消费者. 
```

解决办法: 

```text
针对电商场景来说, 文档检索之前必须确定产品, 用户意图等信息, 以确定检索范围. 
```

缺点: 

```text
我们似乎很难制作完全通用的系统, 要提高准确率, 还需要特定问题特定分析. 
```