文本表示基礎(chǔ)
單詞和句子的表示
迭代1:one-hot表示
詞庫(kù):[今天 天氣 很好]
句子1:[今天 天氣 很好] = [1,1,1]
缺點(diǎn):沒(méi)有順序和權(quán)重;稀疏;無(wú)法比較語(yǔ)義相似度
迭代2:出現(xiàn)次數(shù)
句子1:[今天 天氣 很好 很好 啊] = [1,1,2]
缺點(diǎn):所以,如果只記錄單詞的個(gè)數(shù)也是不夠的,我們還需要考慮單詞的權(quán)重,也可以認(rèn)為是質(zhì)量。這有點(diǎn)類似于,一個(gè)人有很多朋友不代表這個(gè)人有多厲害,還需要社交的質(zhì)量,其實(shí)是同一個(gè)道理。 那如何把這種所謂的“質(zhì)量”引入到表示中呢?答案是tf-idf
迭代3:TF-IDF
首先,單詞在該篇文檔中的頻率要高,同時(shí),單詞不能出現(xiàn)在過(guò)多的文檔中。例如,“的”會(huì)100%出現(xiàn)在任何一篇文檔中,因此 idf("的") = log(100/100) = 0
向量長(zhǎng)度為詞庫(kù)的長(zhǎng)度
對(duì)每一個(gè)詞庫(kù)的單詞進(jìn)行計(jì)算tfidf(w)

image.png
計(jì)算向量相似度
歐氏距離,沒(méi)有考慮方向;通常使用 余弦相似度
import numpy as np
def cos_sim(a, b):
"""給定兩個(gè)向量,a和b,計(jì)算它倆之間的余弦相似度
"""
dot_product = np.dot(a,b)
norm_a = np.linalg.norm(a)
norm_b = np.linalg.norm(b)
return dot_product / (norm_a * norm_b)
詞向量基礎(chǔ)

image.png

image.png
詞向量到句向量
mean_pooling