Skip to main content

用于查询和文档的词排名、上下文感知词袋词权重。

项目描述

词级

PyPI 版本 欢迎投稿 GitHub 贡献者 许可 Apache 2.0 python_vesion GitHub 问题 微信群

Word Rank(术语权重),计算文档和查询的上下文感知词袋术语权重。

基于特征工程的词度分析工具,支持词打分、词干提取权重等查询分析,扩展性强,开箱用。

指导

特征

如何计算查询中各个词的权重呢?

思路

特征工程的解决思路

  1. 采用时采用打分方法,以搜索查询为原始语料,标注句子中各词重要度

重要度共分4级:

  • 超级重要:主要包括POI核心词,例如“方特、欢乐谷”
  • 必填:包括行政区词、品类词等,如“北京温泉”中“北京”和“温泉”重要
  • 重要:包括品类词、门票等,比如“顺景温泉”中“温泉”相关没有什么重要,用户搜“顺景温泉”都是有需求的
  • 不重要:包括语气词、代词、泛需词、用词等

上例中可见“温泉”在不同的查询中重要程度是不同的。

  1. 模型方面采用树模型(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包:

数据依赖

用法

词权重计算

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()

接触

  • 问题(建议):GitHub 问题
  • 邮件我: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。

参考

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

wordrank-0.1.6.tar.gz (1.5 MB 查看哈希)

已上传 source