TF-IDF忽略词序问题思考

自从开始做自然语言处理的业务,TF-IDF就是使用很频繁的文本特征技术,他的优点很多,比如:容易理解,不需要训练,提取效果好,可以给予大规模数据使用,总之用的很顺手,但是人无千面好,花无百日红,TF-IDF也有一些局限的地方,这次我们聊聊忽略词序的问题和解决的思路。

忽略词序

TF-IDF主要是计算词频和逆向词频了计算文本特征的(一个词在文档中出现的频率越高(TF),同时在所有文档中出现的频率越低(IDF),则该词对当前文档的代表性越强。),那么对于词的位置(就是词的顺序)实际上考虑的不多,但是中文当中,词的位置可能导致反转的效果,网上最多的举例就是:‘人咬狗’和‘狗咬人’。那么这样就导致了忽略词序的问题。

解决思路

一、基础改进方法

1. N-gram特征扩展

思路:将相邻词的组合作为新特征

from sklearn.feature_extraction.text import TfidfVectorizer
​
# 使用二元语法(bigram)
vectorizer = TfidfVectorizer(ngram_range=(1, 2))  # 同时包含unigram和bigram

优点

  • 简单直接,兼容现有TF-IDF流程

  • 能捕获局部词序关系

缺点

  • 特征空间爆炸(n越大,维度越高)

  • 仍无法捕获长距离依赖

2. 滑动窗口加权

思路:给窗口内的词对添加位置权重

from collections import defaultdict
​
def sliding_window_tfidf(docs, window_size=3):# 先计算普通TF-IDF# 然后为窗口内的词对添加额外权重co_occur = defaultdict(float)for doc in docs:words = doc.split()for i in range(len(words)-window_size+1):window = words[i:i+window_size]for j in range(len(window)):for k in range(j+1, len(window)):pair = (window[j], window[k])co_occur[pair] += 1# 将共现信息融入TF-IDF权重

二、进阶混合方法

3. TF-IDF与词嵌入结合

思路:用词向量补充语义信息

import numpy as np
from gensim.models import Word2Vec
​
# 训练或加载词向量模型
w2v_model = Word2Vec(sentences, vector_size=100, window=5, min_count=1)
​
def enhanced_tfidf(doc):words = doc.split()tfidf_vec = tfidf_model.transform([doc])  # 常规TF-IDFw2v_vec = np.mean([w2v_model.wv[word] for word in words if word in w2v_model.wv], axis=0)return np.concatenate([tfidf_vec.toarray()[0], w2v_vec])  # 拼接两种特征
4. 短语检测预处理

思路:先识别固定短语再计算TF-IDF

from gensim.models.phrases import Phrases
​
# 自动检测常见短语
phrases = Phrases(sentences)
doc_with_phrases = ["_".join(words) for words in phrases[sentences]]
​
# 然后在这些处理后的文本上计算TF-IDF

三、最新预训练模型方法

5. BERT + TF-IDF混合

思路:结合上下文嵌入与传统特征

from transformers import BertTokenizer, TFBertModel
import tensorflow as tf
​
bert_model = TFBertModel.from_pretrained('bert-base-chinese')
tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
​
def get_bert_tfidf_features(text):# BERT特征inputs = tokenizer(text, return_tensors="tf", truncation=True, padding=True)outputs = bert_model(**inputs)bert_features = tf.reduce_mean(outputs.last_hidden_state, axis=1)# TF-IDF特征tfidf_features = tfidf_vectorizer.transform([text])# 合并特征return tf.concat([bert_features, tfidf_features.toarray()], axis=1)

四、设想

  1. 评估指标选择

    • 对于分类任务:准确率/F1值

    • 对于检索任务:MAP/MRR/NDCG

    • 计算开销:特征维度/推理时间

  2. 实施路线图

    
    
  3. 资源权衡

    • 低资源环境:N-gram + 短语检测

    • 中等资源:TF-IDF + 词嵌入

    • 充足资源:BERT/Transformer混合模型

当然还有很多方法,比如基于RNN也可以解决,由于篇幅就不在列举了,欢迎各位给出跟多的方法大家一起交流。上面的这些方法可以根据具体场景组合使用,例如先进行短语检测,再使用N-gram扩展,最后与词向量特征拼接,能在多个层面上改善原始TF-IDF忽略词序的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/75932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL122 删除索引

alter table examination_info drop index uniq_idx_exam_id; alter table examination_info drop index full_idx_tag; 描述 请删除examination_info表上的唯一索引uniq_idx_exam_id和全文索引full_idx_tag。 后台会通过 SHOW INDEX FROM examination_info 来对比输出结果。…

Langchat平台知识库测试

平台介绍: LangChat是Java生态下企业级AIGC项目解决方案,集成RBAC和AIGC大模型能力,帮助企业快速定制AI知识库、企业AI机器人。 支持的AI大模型:Gitee AI / 阿里通义 / 百度千帆 / DeepSeek / 抖音豆包 / 智谱清言 / 零一万物 /…

Vue3 Composition API 深度开发指南

Vue3 Composition API 深度开发指南 响应式系统核心解析 1.1 响应式原理解构 Vue3 基于 Proxy 实现响应式追踪,其核心流程为: const reactiveHandler {get(target, key, receiver) {track(target, key) // 依赖收集return Reflect.get(target, key, …

基于自回归模型的酒店评论生成

《DeepSeek大模型高性能核心技术与多模态融合开发(人工智能技术丛书)》(王晓华)【摘要 书评 试读】- 京东图书 我们使用新架构的模型完成情感分类,可以看到,使用注意力机制可以很好地对特征进行抽取从而完成二分类的情感分类任务…

关于转置卷积

🧠 具体讲解神经网络中的转置卷积(Transposed Convolution) 🧭 1. 转置卷积的动机:为什么我们需要它? 标准卷积通常会降低特征图的空间尺寸(比如从 64x64 → 32x32),这对…

JavaScript 模块化详解( CommonJS、AMD、CMD、ES6模块化)

一.CommonJS 1.概念 CommonJS 规范概述了同步声明依赖的模块定义。这个规范主要用于在服务器端实现模块化代码组 织,但也可用于定义在浏览器中使用的模块依赖。CommonJS 模块语法不能在浏览器中直接运行;在浏览器端,模块需要提前编译打包处理…

TCP BBR 的优化

前段时间,老板发了篇资料,下面是我学习的相关记录整理。 https://aws.amazon.com/cn/blogs/china/talking-about-network-optimization-from-the-flow-control-algorithm/ PS:ubuntu24默认使用的tcp控制算法。还是 cubic sysctl net.ipv4.tc…

什么是异步?

什么是异步? 异步是一个术语,用于描述不需要同时行动或协调就能独立运行的流程。这一概念在技术和计算领域尤为重要,它允许系统的不同部分按自己的节奏运行,而无需等待同步信号或事件。在区块链技术中,异步是指网络中…

SSM婚纱摄影网的设计

🍅点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅 项目视频 SS…

石头剪刀布游戏

自己写的一个石头剪刀布游戏&#xff0c;如果有需要更改的地方请指出 #define _CRT_SECURE_NO_WARNINGS // scanf_s编写起来太过于麻烦&#xff0c;直接把这个警告关掉&#xff0c;便于编写。 #include <stdio.h> #include <stdlib.h> #include <time.h> //…

大数据系列之:Kerberos

大数据系列之&#xff1a;Kerberos 基本概念工作流程安全特性应用场景总结加密原理Kerberos认证流程更改您的密码授予账户访问权限票证管理Kerberos 票据属性使用 kinit 获取票据使用 klist 查看票据使用 kdestroy 销毁票据.k5identity 文件描述 Kerberos 是一种网络认证协议&a…

WPF 免费UI 控件HandyControl

示例效果和代码 直接可以用 Button 按钮 | HandyOrg 1.安装 , 输入 HandyControl 2.<!--配置HandyControl--> <!--配置HandyControl--> <ResourceDictionary Source"pack://application:,,,/HandyControl;component/Themes/SkinDefault.xaml"/> …

windows部署docker

1.下载docker 打开浏览器&#xff0c;访问 Docker Desktop 下载页面。 2.安装 Docker Desktop 运行安装程序&#xff1a; 双击下载的 Docker Desktop 安装包&#xff0c;启动安装程序。 选择安装选项&#xff1a; 按照屏幕上的指示进行操作。建议选择默认选项&#xff0c;包…

【Linux】远程登录时,使用图形界面报错:MoTTY X11 proxy: Unsupported authorisation protocol

1、问题描述 使用 MobaXterm 远程登录Ubuntu后,使用sudo权限运行图形界面程序报错: MoTTY X11 proxy: Unsupported authorisation protocol (gpartedbin:10518): Gtk-WARNING **: 22:01:34.377: cannot open display: localhost:10.02、查看SSH配置 修改 SSH 服务端配置,…

解决 Hugging Face SentenceTransformer 下载失败的完整指南:ProxyError、SSLError与手动下载方案

问题背景 在使用 Hugging Face 的 SentenceTransformer 加载预训练模型 all-MiniLM-L6-v2 时&#xff0c;遇到了以下错误&#xff1a; 代理连接失败&#xff08;ProxyError / SSLError: KRB5_S_TKT_NYV&#xff09;大文件下载中断&#xff08;unexpected EOF while reading&a…

MySQL——DQL的单表查询

1、查询表中所有的字段&#xff08;列&#xff09; 语法&#xff1a;select * from 表名; * 是通配符&#xff0c;用来表示所有的字段&#xff08;列&#xff09;。 select 表示查询哪些列。 from 表示从哪张表中查询。 2、查询表中指定的字段 语法&#xff1a;select 列…

开源RuoYi AI助手平台的未来趋势

近年来&#xff0c;人工智能技术的迅猛发展已经深刻地改变了我们的生活和工作方式。 无论是海外的GPT、Claude等国际知名AI助手&#xff0c;还是国内的DeepSeek、Kimi、Qwen等本土化解决方案&#xff0c;都为用户提供了前所未有的便利。然而&#xff0c;对于那些希望构建属于自…

[WUSTCTF2020]CV Maker1

进来是个华丽的界面&#xff0c;我们先跟随这个网页创造一个用户 发现了一个上传端口&#xff0c;尝试上传一个php文件并抓包 直接上传进不去&#xff0c;加个GIF89A uploads/d41d8cd98f00b204e9800998ecf8427e.php 传入 并且报告了 上传路径&#xff0c;然后使用蚁剑连接

Spring 中的 IOC

&#x1f331; 一、什么是 IOC&#xff1f; &#x1f4d6; 定义&#xff08;通俗理解&#xff09;&#xff1a; IOC&#xff08;Inversion of Control&#xff0c;控制反转&#xff09; 是一种设计思想&#xff1a;对象不再由你自己创建和管理&#xff0c;而是交给 Spring 容器…

Vue2-实现elementUI的select全选功能

文章目录 使用 Element UI 的全选功能自定义选项来模拟全选 在使用 Element UI 的 el-select组件时&#xff0c;实现“全选”功能&#xff0c;通常有两种方式&#xff1a;一种是使用内置的全选功能&#xff0c;另一种是通过自定义选项来模拟全选。 使用 Element UI 的全选功能…