NLP 中文文字相似度實戰

2021-08-18 07:50:59 字數 2047 閱讀 1840

原文:

(1) 基於詞向量: 余弦相似度, 曼哈頓距離, 歐幾里得距離, 明式距離(是前兩種距離測度的推廣)

(2) 基於字元: 編輯距離, simhash(適用於海量資料), 共有字元數(有點類似 onehot 編碼, 直接統計兩個文字的共有字元數, 最*****)

(3) 基於概率統計: 傑卡德相似係數

(4) 基於詞嵌入模型: word2vec/doc2vec

tf-idf = term frequency–inverse document frequency = 詞頻-逆文字頻率指數

思想: 如果某個詞或短語在一篇文章中出現的頻率tf高, 並且在其他文章中很少出現, 則認為此詞或者短語具有很好的類別區分能力, 適合用來分類.

具體原理描述:

tf: 某個詞在該檔案中出現的次數(往往會被歸一化).

idf: 度量詞語的普遍性, 某一詞語的id

f=log包含該

詞語的文

件數目總

檔案數目id

f=

log⁡包含

該詞語的

檔案數目

總檔案數

目如果乙個詞語的tf很高而idf很低, 則它的tf-idf權重就會很高, 即該詞語有很好的分類能力.

sklearn是基於numpy和scipy的乙個機器學習演算法庫.

3.1 該庫共包括三大模組:

監督學習: neighbors, svm, kernel-ridge, discriminant_analysis 等

無監督學習: cluster, manifold, mixture, neural_network 等

資料變換: feature_extraction, feature_selection, preprocess 等

tmt.txt, eng.txt, food.txt: 這三個txt檔案是訓練資料, 每一行都是乙個物品的介紹, 檔名指的是產品的類別(訓練集共包含三個類別的產品).

test.txt: 這個txt檔案是測試資料, 和訓練資料一樣每一行都是乙個物品的介紹, 要訓練乙個模型來判斷每一行說的是那種物品.

在訓練之前, 我把這些txt檔案都按行拆分為了很多小txt, 如tmt_1.txt中的內容是tmt.txt第一行的內容. txt檔案的按行拆分可以使用」txt殺手」這個小工具.

(1) 用jieba分詞(corpus_segment.py).

主要使用了jieba這個工具庫.

(2) 把分好的詞轉換為sklearn庫中的bunch格式(corpus2bunch.py).

分詞後的結果依然是一系列的txt檔案, 這一步是把它們變成變數, 採用的是sklearn庫中的bunch資料結構. bunch結構可以理解為字典, 它的每一行都包含了四個資訊: 類別(target_name, 包括tmt, eng, food, test), 檔名(filenames), 文字標籤(label, 包括tmt, eng, food), 文字內容(contents).

bunch =bunch(target_name=, label=, filenames=, contents=)
(3) 用tf-idf構建有權詞向量空間(tfidf_space.py).

這部分的任務是構建詞向量空間w.

每乙個詞都是w的乙個維度(好比是三維空間中的x, y, z), 該維度上的值是該詞的權重(由tf-idf算出). 為了減少w的維度, 要把沒用的詞(如」的」, 「了」等)去掉, 為實現這個功能可以使用乙個停用詞表, 把沒用的詞剔除.

注意測試集和訓練集要用同乙個詞向量空間w. 因此測試集出現但是訓練集中沒有出現的詞將不再設為w的乙個維度.

該部分最後的執行結果有兩個: (1) 詞典(單詞及其對應的序號), (2) 權重矩陣tdm(該矩陣是二維的, 即tdm[i][j]表示第i個詞在第j個類別中的權值).

(4) 用樸素貝葉斯演算法對test資料進行分類(nbayes_predict.py).

所有原始碼:

計算文字相似度 最準的中文文字相似度計算工具

向ai轉型的程式設計師都關注了這個號?text2vec,chinese text to vetor.文字向量化表示工具,包括詞向量化 句子向量化 本文相關 獲取 ai專案體驗位址 文字相似度計算 query和docs的相似度比較 result 文字相似度計算 儘管文字相似度計算的基準方法很簡潔,但用...

NLP 文字相似度(一)

乙份文字,從結構上劃分可以是 字 詞 句 段 篇。文字比較的粒度是詞,一篇文章,可以劃分成n個不同的詞,選取其中包含重要資訊的m個詞作為這片文章的特徵。m個詞構成了m維的向量,兩個文字之間的比較就是兩個m維向量之間的比較。向量之間如何比較?我們可以採用余弦相似度,其描述如下 對於n維的向量a,b,其...

自然語言處理的中文文字相似度

前言 人與計算機的互動過程中,如果能提供人類的自然語言形式來進行交流,那麼人與計算機就能更加親密友好。而要實現這一機制就需要自然語言處理來處理,一般來說自然語言處理會涉及幾個學科 電腦科學 語言學 統計學和數學等。不同語言的自然語言處理也存在差別,對於中文來說,很多時候都無法直接套用英語自然語言處理...