Arouq 是《搜索引擎技术基础》的课程项目,是一个 demo 级别的知识搜索引擎。
更多细节可以见于我们的课程报告。
- 流程:
- jieba 分词,去除停用词,获取到若干 token
- 使用 xlore api 找到每个 token 对应的 instance (也可以本地化)
- 从 infobox 里找到每个 insctance 对应的关系名和结果
- 找出现在去除停用词后的查询中,不包括当前instance的字数最多的关系名
- 某些答案格式奇怪,需调整为用户可以接受的格式
- 好的查询:原子的定义
- 流程
- 分词,去停用词
- 在 Wikipedia 里查词
- 将开头喂给 bert
- 将其他词出现较多的位置喂给 bert
- 取 bert 评分最大的位置
- 流程:
- jieba 分词,去除停用词,获取到若干 token
- 使用 xlore api 找到每个 token 对应的 instance (也可以本地化)
- 筛选出是 token 的近义词的 instance
- 为避免xlore中的脏数据影响推荐,增加一个特判为“该instance必须有较多的关系数”
- 以每个instance的related instance个数为权重,选出至多5个
- 直接调库,不认为英文大小写出错是错误
- 流程:
- 从词频表里筛选出词频大于150的词
- 如果词 A 是词 B 的子串,且词 A 的出现次数小于词 B 的 10 倍,那么将词 A 去掉
- 以词频*长度作为一个词的评分
- 查询时,选出以查询词为前缀的评分最高的5个词
安装
cd frontend/
npm install
运行
cd frontend/
npm start
- 从这里下载一份 Solr 的 Binary Release 版。
- 启动 Solr Cloud
- 创建 xlore 的 collection (中/英文各一个)
- 为 collection 分别配置 Schema(使用
dataset/create_schema.sh
) - 通过数据创建索引
- Port: 8001
- URL: localhost
- Method: GET
- Body:
{
"query": 查询字符串
"page": 查询的页数,大于等于1
}
Successful Response
- Code: 200 OK
- Content:
{
"total": 检索到的文档总量
"answer": QA 的答案,如果没有答案的话,就是一个空串
"related": ["xxx", "yyy", ...] 相关实体,可能为空,至多5个
"documents": [
document1,
...
// 这是某一个 document 的组成
{
"name": 标题
"article": 文章主题,其中需要高亮的部分已被打上 `<span class="highlight">...</span>` 的 tag
"url": 链接
"classes":所属类别的列表,可能为空,长度不超过10
"properties":性质列表,可能为空,长度不超过10
},
...
documentn, // n 不超过10,即一页显示的文档数量上限
]
}
- Port: 8002
- URL: /correct
- Method: GET
- Body:
{
"query": 查询字符串
}
Successful Response
- Code: 200 OK
- Content:
{
"corrected": 更正的结果,如果不需要更正,就是一个空串
}
- Port: 8001
- URL: /fill
- Method: GET
- Body:
{
"query": 查询字符串
}
Successful Response
- Code: 200 OK
- Content:
{
"candidates": ["xxx", "yyy", ...] 补全结果,至多5个,可能为空列表
}
MIT