用于查询和文档的词排名、上下文感知词袋词权重。
项目描述
词级
Word Rank(术语权重),计算文档和查询的上下文感知词袋术语权重。
基于特征工程的词度分析工具,支持词打分、词干提取权重等查询分析,扩展性强,开箱用。
指导
特征
如何计算查询中各个词的权重呢?
思路
特征工程的解决思路
- 采用时采用打分方法,以搜索查询为原始语料,标注句子中各词重要度
重要度共分4级:
- 超级重要:主要包括POI核心词,例如“方特、欢乐谷”
- 必填:包括行政区词、品类词等,如“北京温泉”中“北京”和“温泉”重要
- 重要:包括品类词、门票等,比如“顺景温泉”中“温泉”相关没有什么重要,用户搜“顺景温泉”都是有需求的
- 不重要:包括语气词、代词、泛需词、用词等
上例中可见“温泉”在不同的查询中重要程度是不同的。
- 模型方面采用树模型(XGBoost等)进行,得到训练权分类模型后在线上预测
深入分析的解决思路
- 深度学习来词组,比如通过训练基于 BSTM+Attention 的查询模型分类学习模型
- /Transformer 的查询训练模型训练作为注意力的重副产物再其他或分类的上述模型的特征也可以根据不同的策略改变顺序的对比
- 使用 BERT 模型模拟后类似C的词权模型,序列标注模型,典型的词义重输出
解决方法
特征方法
- 中文特征文本:包括查询长度长度、术语在查询中的量测信息、长度名称、术语根据词、是否存信息、句法、是否数字、是否位置用词、是否用词、是否有位置、是否重要行业词、嵌入模长、不同词的差异度、以及生成树的词权重等
- 特征统计:PMI、F、rankrank、前后词项、检索独立值的相邻项的q、qv查询/查询、统计特征、idf包含的独立项的q、v查询、统计特征、idf类型的变化iqf
- 语言模型特征/删除整个语言模型的语言模型后的查询的语言模型
模型深度
- BERT CLS + 分类
- Seq2Seq + 注意
评估
| 模型 | 数据集 | QPS |
|---|---|---|
| 文本排名 | - | - |
| TFIDF | - | - |
| WordRank | - | - |
结果值使用F1
安装
- 从点子:
pip3 install -U wordrank
- 来源:
git clone https://github.com/shibing624/wordrank.git
cd wordrank
python3 setup.py install
库
pip3 install -U pycorrector
主要包括以下Python包:
数据依赖
- 语言_由正确的文本训练的语言_giga.no_cna_cmn.0124自动下载模型(2.8),模型模型于下载~/.pyor/datasets/zh0124.no_cna_cmn。
- 中文文本匹配模型shibing624/text2vec-base-chinese,模型由transformers库自动下载于:~/.cache/huggingface/transformers/ 下。
用法
词权重计算
import wordrank
q = '哪里下载电视剧周恩来?'
r = wordrank.rank(q)
print(r)
输出:
[('哪里', '1'), ('下载', '3'), ('电视剧', '3'), ('周恩来', '1'), ('?', 0)]
3:核心词;:限定词;1:可省略词;0:干扰词。
模型训练和预测
训练:
cd examples
python train.py
预测:
cd examples
python infer.py
丙
使用示例: python -m wordrank
预测文本井冈山景点介绍的词重要度
选项:(训练领域模型)
使用: python -m wordrank --train
如果没有指定训练文件,则使用默认训练样本`extra_data/train.csv`。
--help输出选项:
$> python -m wordrank --help
usage: __main__.py [-h] [--train] [--train_file TRAIN_FILE]
[--col_sep COL_SEP] [--segment_sep SEGMENT_SEP]
[--stopwords_path STOPWORDS_PATH]
[--person_name_path PERSON_NAME_PATH]
[--place_name_path PLACE_NAME_PATH]
[--common_char_path COMMON_CHAR_PATH]
[--domain_sample_path DOMAIN_SAMPLE_PATH] [--ngram NGRAM]
[--pmi_path PMI_PATH] [--entropy_path ENTROPY_PATH]
[--model_path MODEL_PATH] [--query QUERY]
optional arguments:
-h, --help show this help message and exit
--train train or predict
--train_file TRAIN_FILE
train file, file encode utf-8.
--col_sep COL_SEP column sep
--segment_sep SEGMENT_SEP
segment_sep
--stopwords_path STOPWORDS_PATH
stop word file
--person_name_path PERSON_NAME_PATH
person name file
--place_name_path PLACE_NAME_PATH
place name file
--common_char_path COMMON_CHAR_PATH
common_char_path
--domain_sample_path DOMAIN_SAMPLE_PATH
domain_sample_path
--ngram NGRAM common_char_path
--pmi_path PMI_PATH pmi_path
--entropy_path ENTROPY_PATH
entropy_path
--model_path MODEL_PATH
model file path to save
--query QUERY input query
延迟加载机制
wordrank 采用延迟加载,并import wordrank不会from wordrank import WordRank立即启动词典及模型的加载,因此也有必要才开始启动词典。如果你想最终,可以手动启动wordrank。
from wordrank import WordRank
model = WordRank()
model.check_inited() # 手动初始化(可选)
你可以改变主模型的路径:
from wordrank import WordRank
model = WordRank(model_path='/your/model/path')
model.check_inited()
接触
- 问题(建议):
- 邮件我:xuming: xuming624@qq.com
- 微信我:加我微信号:xuming624 ,进Python-NLP交流群,备注:姓名-公司名-NLP
引文
如果你在研究中使用了wordrank,请按以下格式引用:
@software{wordrank,
author = {Xu Ming},
title = {wordrank: A Tool for query term weighting},
year = {2021},
url = {https://github.com/shibing624/wordrank},
}
执照
授权协议为Apache License 2.0,可免费用于商业用途。请在产品说明中添加词列的链接和授权协议。
贡献
项目代码还很粗糙,如果大家对代码项目有所改进,欢迎提交回本,在提交之前,注意以下两点:
- 在
tests添加相应的单元测试 - 使用
python setup.py test来运行所有单元测试,确保所有单测都是通过的
之后可以提交 PR。