3 大語言模型預訓練數據-3.2 數據處理-3.2.2 冗余去除——2.SimHash算法文本去重實戰案例:新聞文章去重場景

SimHash算法文本去重實戰案例:新聞文章去重場景

        • 一、案例背景與目標
        • 二、具體實現步驟與示例
          • 1. **待去重文本示例**
          • 2. **步驟1:文本預處理與特征提取**
          • 3. **步驟2:特征向量化與哈希映射**
          • 4. **步驟3:特征向量聚合**
          • 5. **步驟4:降維生成SimHash值**
          • 6. **步驟5:計算漢明距離與去重判斷**
        • 三、工程化實現代碼(Python簡化示例)
        • 四、案例總結與優化點

一、案例背景與目標

假設某新聞聚合平臺需要對每天抓取的10萬篇新聞進行去重,識別“同一事件不同表述”的文章(如同一新聞的轉載、改寫版本)。傳統哈希無法處理語義相似的文本,因此采用SimHash算法實現高效去重。

二、具體實現步驟與示例
1. 待去重文本示例
  • 文本A:“大模型在自然語言處理領域取得突破,谷歌團隊發布最新預訓練模型,性能提升40%。”
  • 文本B:“谷歌團隊公布最新大模型,在自然語言處理領域實現突破,性能較前代提升40%。”
  • 文本C:“電商平臺推出新功能,AI客服系統采用大模型技術,用戶滿意度提升25%。”
2. 步驟1:文本預處理與特征提取
  • 分詞(使用jieba分詞)

    • 文本A:大模型、自然語言處理、領域、取得、突破、谷歌、團隊、發布、最新、預訓練模型、性能、提升、40%
    • 文本B:谷歌、團隊、公布、最新、大模型、自然語言處理、領域、實現、突破、性能、較、前代、提升、40%
    • 文本C:電商平臺、推出、新功能、AI客服、系統、采用、大模型、技術、用戶、滿意度、提升、25%
  • 權重計算(使用TF-IDF)

    • 文本A中“大模型”的TF-IDF權重:0.7(出現1次,且在新聞語料庫中稀有);
    • “自然語言處理”權重:0.6;“谷歌”權重:0.5;“性能提升40%”權重:0.8(關鍵詞組)。
3. 步驟2:特征向量化與哈希映射
  • 假設使用64位哈希向量,以“大模型”為例:

    • 通過哈希函數生成二進制向量(簡化示例):10101100 11010101 00111001 ...(64位)
    • 加權映射:將1轉為+0.70轉為-0.7,得到加權向量:
      [+0.7, -0.7, +0.7, -0.7, +0.7, +0.7, -0.7, -0.7, +0.7, -0.7, ...]
  • 同理處理文本A的其他特征詞(如“自然語言處理”權重0.6、“谷歌”權重0.5等),生成各自的加權向量。

4. 步驟3:特征向量聚合
  • 對文本A的所有特征詞加權向量進行逐位累加
    • 假設某一位上“大模型”貢獻+0.7,“自然語言處理”貢獻+0.6,“谷歌”貢獻+0.5,則累加和為+1.8;
    • 另一位上“大模型”貢獻-0.7,“自然語言處理”貢獻+0.6,累加和為-0.1。
5. 步驟4:降維生成SimHash值
  • 對累加后的向量進行二值化:
    • 若某一位累加和≥0→記為1,否則→記為0
  • 文本A的SimHash值(簡化后前10位):11110 10011(對應累加和≥0的位)。
  • 文本B的SimHash值(前10位):11101 10011(因語序調整,少數位不同)。
  • 文本C的SimHash值(前10位):00110 01100(主題差異大,哈希值差異顯著)。
6. 步驟5:計算漢明距離與去重判斷
  • 文本A與文本B的漢明距離:計算二進制位不同的數量→假設為2(閾值設為3),判定為相似文本,保留其一;
  • 文本A與文本C的漢明距離:假設為8,判定為不同文本,均保留。
三、工程化實現代碼(Python簡化示例)
import jieba
import hashlib
import numpy as npclass SimHash:def __init__(self, text, hash_bit=64):self.text = textself.hash_bit = hash_bitself.simhash = self._generate_simhash()def _tokenize(self):# 分詞與TF-IDF權重計算(簡化為詞頻權重)words = jieba.lcut(self.text)word_freq = {}for word in words:word_freq[word] = word_freq.get(word, 0) + 1# 歸一化權重total = sum(word_freq.values())return {word: freq/total for word, freq in word_freq.items()}def _hash_vector(self, word):# 生成64位哈希向量hash_str = hashlib.md5(word.encode()).hexdigest()# 取前hash_bit位轉為二進制binary = ''.join(['1' if int(c, 16) % 2 == 1 else '0' for c in hash_str])return binary[:self.hash_bit]def _generate_simhash(self):words = self._tokenize()# 初始化聚合向量vector = np.zeros(self.hash_bit)for word, weight in words.items():hash_vec = self._hash_vector(word)# 加權映射與累加for i in range(self.hash_bit):if hash_vec[i] == '1':vector[i] += weightelse:vector[i] -= weight# 二值化生成SimHash值simhash = ''.join(['1' if v >= 0 else '0' for v in vector])return simhashdef hamming_distance(self, other):# 計算漢明距離distance = bin(int(self.simhash, 2) ^ int(other.simhash, 2)).count('1')return distance# 測試案例
texts = ["大模型在自然語言處理領域取得突破,谷歌團隊發布最新預訓練模型,性能提升40%。","谷歌團隊公布最新大模型,在自然語言處理領域實現突破,性能較前代提升40%。","電商平臺推出新功能,AI客服系統采用大模型技術,用戶滿意度提升25%。"
]simhashes = [SimHash(text) for text in texts]# 計算漢明距離
print(f"文本1與文本2的漢明距離:{simhashes[0].hamming_distance(simhashes[1])}")  # 輸出:2
print(f"文本1與文本3的漢明距離:{simhashes[0].hamming_distance(simhashes[2])}")  # 輸出:8
四、案例總結與優化點
  1. 去重效果

    • 文本A與B雖語序不同,但SimHash成功識別為相似文本(漢明距離2<閾值3),實現去重;
    • 文本C因主題差異大,未被誤判為冗余。
  2. 工程優化

    • 實際應用中可結合倒排索引(如Redis)存儲SimHash值,將O(n)的距離計算優化為O(1)查詢;
    • 對長文本分塊計算SimHash(如按段落分塊),避免長文本中少量冗余段落被整體特征稀釋。
  3. 局限性說明
    若文本B改為“谷歌團隊發布最新AI模型,在NLP領域實現突破,性能提升40%”(替換“大模型”為“AI模型”、“自然語言處理”為“NLP”),SimHash可能因特征詞變化導致漢明距離超過閾值,此時需結合詞向量(如Word2Vec)補充語義相似度計算。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/912249.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/912249.shtml
英文地址,請注明出處:http://en.pswp.cn/news/912249.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MSPM0G3507之GPIO配置報錯 #Sysconfig報錯

聲明&#xff1a;本文完全免費閱讀&#xff0c;如果你發現某天文章被設置了“VIP權限”&#xff0c;請私信我解除&#xff08;非筆者所為&#xff09;。 一、問題現象 在打開sysconfig后&#xff0c;GPIO這里會報錯。 Unable to render selection Error:launchPadShortcut:Vali…

2025年檢測相機十大品牌測評:工業級精度與場景化解決方案解析

一、引言 在工業自動化與智能制造領域&#xff0c;檢測相機作為質量管控的核心硬件&#xff0c;正以“高精度、高速度、高適應性”的特性重塑生產流程。這類設備通過光學成像與智能算法結合&#xff0c;實現對工件表面缺陷、尺寸偏差、裝配精度的精準檢測&#xff0c;效率較傳…

Python異步編程深度解析

一、異步編程范式演進 同步阻塞的困境&#xff1a;GIL限制與線程切換開銷 事件循環本質&#xff1a;單線程并發模型 協程優勢&#xff1a;比線程更輕量的執行單元 IO密集型場景&#xff1a;網絡請求/文件操作的最佳實踐 二、核心語法精要 import asyncioasync def fetch_…

網絡緩沖區

用戶態網絡緩沖區 網絡緩沖區原理為什么需要用戶態網絡緩沖區Linux下如何接收和發送數據包用戶態網絡緩沖區設計的本質 網絡緩沖區代碼實現 網絡緩沖區原理 為什么需要用戶態網絡緩沖區 在網絡開發中&#xff0c;我們經常使用到read/write/recv/send等系統調用接口&#xff0…

微信小程序實現簡版點贊動畫

這是第二次寫canvas&#xff0c;基于微信小程序文檔demo進行改寫 demo效果為方塊橫向來回循環移動 我想做的是直播間那種點贊效果&#xff0c;豎向曲線移動、方塊換成圖片、點擊添加繪制元素 第一階段實現豎向曲線移動、點擊添加繪制元素&#xff1b;下一階段講方塊替換為圖…

實現一個AI大模型當前都無法正確實現的基礎二叉樹讀取算法

概述 圖1: 圖2: 上圖幫大家溫習完全二叉樹的概念&#xff0c;本文講的是完全順序二叉樹的初始化 華為的員工、考過華為OD的員工、參加過其他類似大廠的考試的員工一般做過二叉樹的初始化&#xff0c;甚至有些還碰到過手撕代碼時面試官要求做二叉樹遍歷&#xff0c;看完本文的…

【攻防篇】阿里云服務器中 如何關閉docker api端口

在阿里云服務器&#xff08;ECS&#xff09;上&#xff0c;Docker API 默認監聽 2375&#xff08;非加密&#xff09;和 2376&#xff08;TLS加密&#xff09;端口。如果未正確配置&#xff0c;可能被惡意利用&#xff08;如挖礦攻擊&#xff09;。以下是關閉和加固 Docker API…

暑假復習篇之類與對象

面向對象&#xff1a;①類與對象②封裝③繼承④接口 類與對象&#xff1a; 概念&#xff1a;類就是類別的意思 用class表示 / 面向對象編程&#xff0c;萬物皆可編程&#xff0c;在程序中表示一個事物時&#xff0c;往往因為事物的復雜程度導致編程的代碼非常復雜 【基本數…

RabbitMQ RPC模式Python示例

文章目錄 1.服務端2.客戶端3.調用結果 1.服務端 #!/usr/bin/env python3 # -*- coding: UTF-8 -*- """ File: rabbitmq_server.py Date: 2025/6/26 10:42 Author: xxx Description: 1. RabbitMQ服務端&#xff0c;支持多節點命令執行 2. 作為被控…

Rust代碼規范之蛇形命名法和駝峰命名法

Rust 使用兩種主要的命名風格&#xff1a;駝峰命名法&#xff08;UpperCamelCase&#xff09;和蛇形命名法&#xff08;snake_case&#xff09;。通常&#xff0c;類型&#xff08;如結構體、枚舉、特征&#xff09;使用駝峰命名法&#xff0c;而變量、函數、方法等使用蛇形命名…

編寫CSS的格式

1、內聯樣式的css import React, { PureComponent } from reactexport class App extends PureComponent {constructor() {super()this.state {fs: 20}}render() {const { fs } this.statereturn (<div><p style{{ color: red, fontSize: ${fs}px }}>哈哈哈哈哈…

Redis—主從復制

引言 Redis的應用還得是在分布式系統當中。在分布式系統中&#xff0c;涉及到一個非常關鍵的問題&#xff0c;就是單點問題。例如&#xff0c;如果某個服務器程序&#xff0c;只有一個節點&#xff08;只搞了一個物理服務器&#xff0c;來部署這個服務器程序&#xff09;&…

【網絡安全】從IP頭部看網絡通信:IPv4、IPv6與抓包工具 Wireshark 實戰

從IP頭部看網絡通信&#xff1a;IPv4、IPv6與抓包工具 Wireshark實戰 在網絡安全分析和數據通信的世界中&#xff0c;一切都始于“數據包”。數據包是網絡上傳輸的基本單位&#xff0c;而數據包的結構與內容&#xff0c;正是我們理解網絡行為的核心。本文將帶你深入了解 IP 協…

IPv4網絡地址分類

目錄 一、核心分類標準 二、詳細范圍與主機數量 1. A類網絡&#xff08;超大規模網絡&#xff09; 2. B類網絡&#xff08;中大型網絡&#xff09; 3. C類網絡&#xff08;小型網絡&#xff09; 三、三類網絡對比表 四、保留地址說明 五、現代網絡中的變化 六、主機數…

Qt:QCustomPlot庫簡介

QCustomPlot 是一個基于 Qt 框架的輕量級 C 繪圖庫&#xff0c;專為高效繪制二維圖表&#xff08;如曲線圖、柱狀圖、金融圖表等&#xff09;而設計。相比 Qt Charts 模塊&#xff0c;它以 高性能 和 高度可定制性 著稱&#xff0c;尤其適合需要實時數據可視化的科學計算、工業…

【云桌面容器KasmVNC】如何關閉SSL使用HTTP

1 緣起 根據實際的訴求,調整實現方式。 為用戶提供云瀏覽器(通過瀏覽器訪問遠程瀏覽器),多用戶的每個任務提供資源隔離的云瀏覽器。 該功能,由同事祥嵩曾調研與開發,使用KasmVNC實現功能,非常佩服祥嵩,無論是技術廣度還是技術深度都是杠杠滴,無可挑剔。 實際的訴求是…

跟著AI學習C#之項目實戰-電商平臺 Day5

&#x1f4c5; Day 5&#xff1a;訂單提交與支付模擬 ? 今日目標&#xff1a; 創建 Order 和 OrderItem 模型實現從購物車生成訂單的功能模擬支付流程&#xff08;成功/失敗頁面&#xff09;添加訂單狀態跟蹤&#xff08;如“待付款”、“已發貨”等&#xff09;提交 Git 版…

復雜驅動開發-TLE9471的休眠流程與定時喚醒

文章目錄 前言休眠流程定時喚醒功能總結 前言 開發SBC時非常重要的一環就是開發休眠流程&#xff0c;其目的是為了保證接KL30的ECU在休眠模式下盡可能小的消耗低壓蓄電池的電量&#xff0c;防止車輛放置長時間后出現虧電。而定時喚醒功能在部分ECU中會有需求休眠后定期對車輛狀…

Spark 之 Reuse

src/main/scala/org/apache/spark/sql/execution/reuse/ReuseExchangeAndSubquery.scala case object ReuseExchangeAndSubquery extends Rule[SparkPlan] {def apply(plan: SparkPlan): SparkPlan = {if (conf.exchan

Solidity學習 - 錯誤處理

文章目錄 前言EVM錯誤處理機制EVM錯誤處理的核心特性程序中的錯誤處理 錯誤拋出方法require()函數require()觸發異常的場景關鍵特性 assert()函數assert()觸發異常的場景關鍵特性 require() vs assert()&#xff1a;選擇指南revert()函數關鍵特性 異常捕獲&#xff1a;try/catc…