日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

通过共现矩阵和余弦相似度实现机器对单词的认知、python实现

發(fā)布時間:2025/3/12 python 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过共现矩阵和余弦相似度实现机器对单词的认知、python实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

通過共現(xiàn)矩陣和余弦相似度實現(xiàn)機器對單詞的認知、python實現(xiàn)

    • 本文介紹的定義:
    • 一、語料庫預處理
    • 二、單詞的分布式表示
    • 三、單詞的相似度
    • 四、相似單詞排序

本文介紹的定義:

語料庫、計數(shù)方法的目的、語料庫預處理、單詞的分布式表示、分布式假設、上下文、窗口大小、基于計數(shù)的方法表示單詞、用向量表示單詞、共現(xiàn)矩陣、單詞的相似度、余弦相似度、相似單詞排序。

一、語料庫預處理

語料庫:大量的文本數(shù)據(jù)。

計數(shù)方法的目的:從語料庫中提取語言的本質。

語料庫預處理:將文本分割為單詞,并將分割后的單詞列表轉化為單詞ID列表。實現(xiàn)代碼如下,其中corpus 是單詞ID列表,word_to_id 是單詞到單詞ID的字典,id_to_word是單詞ID到單詞的字典。

def preprocess(text):text = text.lower()text = text.replace('.', ' .')words = text.split(' ')word_to_id = {}id_to_word = {}for word in words:if word not in word_to_id:new_id = len(word_to_id)word_to_id[word] = new_idid_to_word[new_id] = wordcorpus = np.array([word_to_id[w] for w in words])return corpus, word_to_id, id_to_word

舉個例子:

text = 'You say goodbye and I say hello.' corpus, word_to_id, id_to_word = preprocess(text) print(corpus) print(word_to_id) print(id_to_word)

輸出:

[0 1 2 3 4 1 5 6] {'you': 0, 'say': 1, 'goodbye': 2, 'and': 3, 'i': 4, 'hello': 5, '.': 6} {0: 'you', 1: 'say', 2: 'goodbye', 3: 'and', 4: 'i', 5: 'hello', 6: '.'}

二、單詞的分布式表示

單詞的分布式表示:顏色通過RGB三原色分別存在多少來表示,RGB這樣的向量表示,可以更準確地指定顏色,顏色之間的關聯(lián)性(是否是相似的顏色)也更容易通過向量表示來判斷和量化。類似于顏色的向量表示方法運用到單詞上,形成單詞含義的向量表示,在自然語言處理領域,這稱為分布式表示。

分布式假設:某個單詞的含義由它周圍的單詞形成。單詞本身沒有含義,單詞含義由它所在的上下文(語境)形成。

上下文:上下文是指某個單詞的周圍詞匯。

窗口大小:將上下文的大小(即周圍的單詞有多少個)稱為窗口大小。

基于計數(shù)的方法表示單詞:如何基于分布式假設使用向量表示單詞?可以在關注某個單詞的情況下,對它的周圍出現(xiàn)了多少次什么單詞進行計數(shù),然后再匯總,稱為“基于計數(shù)的方法”。

用向量表示單詞:向量表示的是每個單詞的上下文(與窗口大小有關)所包含的單詞的頻數(shù)(出現(xiàn)次數(shù))。

共現(xiàn)矩陣:如下圖所示,匯總所有單詞的向量表示的表格。

代碼:

def create_co_matrix(corpus, vocab_size, window_size=1):'''生成共現(xiàn)矩陣:param corpus: 語料庫(單詞ID列表):param vocab_size:詞匯個數(shù):param window_size:窗口大小(當窗口大小為1時,左右各1個單詞為上下文):return: 共現(xiàn)矩陣'''corpus_size = len(corpus)co_matrix = np.zeros((vocab_size, vocab_size), dtype=np.int32)for idx, word_id in enumerate(corpus):for i in range(1, window_size + 1):left_idx = idx - iright_idx = idx + iif left_idx >= 0:left_word_id = corpus[left_idx]co_matrix[word_id, left_word_id] += 1if right_idx < corpus_size:right_word_id = corpus[right_idx]co_matrix[word_id, right_word_id] += 1return co_matrix C = create_co_matrix(corpus, vocab_size, window_size=1) for i in range(7):print(C[i])

輸出:

[0 1 0 0 0 0 0] [1 0 1 0 1 1 0] [0 1 0 1 0 0 0] [0 0 1 0 1 0 0] [0 1 0 1 0 0 0] [0 1 0 0 0 0 1] [0 0 0 0 0 1 0]

三、單詞的相似度

單詞的相似度:兩個單詞含義相近的程度。

前面通過共現(xiàn)矩陣將單詞表示為了向量,如何測量向量間的相似度?有代表性的方法有向量內積、歐式距離、余弦相似度等。

余弦相似度:設有x、y兩個向量,他們的余弦相似度公式如下。余弦相似度直觀表示了兩個向量在多大程度上指向同一方向,兩個向量完全指向相同的方向時,余弦相似度為 1;完全指向相反的方向時,余弦相似度為 -1。

實現(xiàn)余弦相似度:需要解決除數(shù)為0問題,可以在執(zhí)行除法時加上一個微小值。

實現(xiàn)代碼:

def cos_similarity(x, y, eps=1e-8):'''計算余弦相似度:param x: 向量:param y: 向量:param eps: 用于防止“除數(shù)為0”的微小值:return:'''nx = x / (np.sqrt(np.sum(x ** 2)) + eps)ny = y / (np.sqrt(np.sum(y ** 2)) + eps)return np.dot(nx, ny)

例子:求you和i的相似度 。

text = 'You say goodbye and I say hello.' corpus, word_to_id, id_to_word = preprocess(text) vocab_size = len(word_to_id) C = create_co_matrix(corpus, vocab_size)c0 = C[word_to_id['you']] #you的單詞向量 c1 = C[word_to_id['i']] #i的單詞向量 print(cos_similarity(c0, c1))

輸出:

0.7071067691154799

四、相似單詞排序

相似單詞排序:當某個單詞被作為查詢詞時,將與這個查詢詞相似的單詞按降序顯示出來。

實現(xiàn)步驟:

1.取出查詢詞的單詞向量:

query_id = word_to_id[query] query_vec = word_matrix[query_id]

2.求查詢詞的單詞向量和其他所有單詞向量的余弦相似度。

vocab_size = len(id_to_word) similarity = np.zeros(vocab_size) for i in range(vocab_size):similarity[i] = cos_similarity(word_matrix[i], query_vec)

3.基于余弦相似度的結果,按降序顯示它們的值。argsort()方法可以按升序對 NumPy 數(shù)組的元素進行排序,返回值是數(shù)組的索引。將 NumPy 數(shù)組的各個元素乘以 -1 后,再使用 argsort() 方法,可以按降序輸出單詞相似度。

count = 0for i in (-1 * similarity).argsort():if id_to_word[i] == query:continueprint(' %s: %s' % (id_to_word[i], similarity[i]))count += 1if count >= top:return

完整代碼:

def most_similar(query, word_to_id, id_to_word, word_matrix, top=5):'''相似單詞的查找:param query: 查詢詞:param word_to_id: 從單詞到單詞ID的字典:param id_to_word: 從單詞ID到單詞的字典:param word_matrix: 匯總了單詞向量的矩陣,假定保存了與各行對應的單詞向量:param top: 顯示到前幾位'''if query not in word_to_id:print('%s is not found' % query)returnprint('\n[query] ' + query)query_id = word_to_id[query]query_vec = word_matrix[query_id]vocab_size = len(id_to_word)similarity = np.zeros(vocab_size)for i in range(vocab_size):similarity[i] = cos_similarity(word_matrix[i], query_vec)count = 0for i in (-1 * similarity).argsort():if id_to_word[i] == query:continueprint(' %s: %s' % (id_to_word[i], similarity[i]))count += 1if count >= top:return

例子:按降序顯示與you最相似的前五個單詞。

text = 'You say goodbye and I say hello.' corpus, word_to_id, id_to_word = preprocess(text) vocab_size = len(word_to_id) C = create_co_matrix(corpus, vocab_size)most_similar('you', word_to_id, id_to_word, C, top=5)

輸出:結果和我們的感覺存在很大的差異。一個可能的原因是,這里的語料庫太小了。

[query] yougoodbye: 0.7071067691154799i: 0.7071067691154799hello: 0.7071067691154799say: 0.0and: 0.0

總結

以上是生活随笔為你收集整理的通过共现矩阵和余弦相似度实现机器对单词的认知、python实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 全程粗话对白视频videos | 久久妇女 | 先锋影音av资源站 | 一曲二曲三曲在线观看中文字幕动漫 | 黄色三级视频网站 | 日本老妇性生活 | 日韩精品人妻中文字幕有码 | 五月天婷婷爱 | 亚洲无av | 中文字幕在线观看视频一区二区 | 日韩wwww| 先锋资源av网 | 给我看高清的视频在线观看 | 欧美大片大全 | 99久久99久久免费精品蜜臀 | 欧美老熟| 国产人人干 | a国产精品| 国产中文字幕在线视频 | 91欧美成人 | 欧美大片免费在线观看 | 国产成人亚洲综合a∨婷婷 台湾a级片 | 亚洲 欧洲 日韩 | 网站在线看 | 欧洲亚洲一区二区 | 成人h动漫精品一区二区 | 色婷婷免费 | 日本五十路女优 | 久久视频在线免费观看 | sesese99| 亚洲成人偷拍 | a∨鲁丝一区鲁丝二区鲁丝三区 | 久久av高潮av| 九九热精彩视频 | 二区三区 | jul023被夫上司连续侵犯 | 亚洲激情自拍偷拍 | 一本久道久久综合 | 色女人综合 | 日韩欧美超碰 | 美女在线网站 | 亚洲av区无码字幕中文色 | 成人www| 日韩午夜激情电影 | 欧美精品aaa | 动漫艳母在线观看 | 91中文在线| 激情草逼 | 亚洲欧洲国产综合 | 制服丝袜国产精品 | 欧美精品 在线观看 | 少妇高潮灌满白浆毛片免费看 | 欧美综合精品 | 女女互磨互喷水高潮les呻吟 | 91精品观看 | 国产精品久久久久野外 | 蜜桃一区二区三区 | 香蕉婷婷 | 麻豆影视在线 | 国产系列在线观看 | 少妇毛片一区二区三区 | 超碰影院在线 | eeuss国产一区二区三区 | 久久精品亚洲精品国产欧美 | 久一精品 | 日韩专区在线观看 | 成人四色 | 欧美激情一区二区三区p站 欧美mv日韩mv国产网站app | 久久女同互慰一区二区三区 | 成人免费久久 | 奇米在线播放 | 色婷婷av一区二区三区大白胸 | 日韩在线播放一区二区 | 欧美亚洲国产一区二区三区 | 国产青草视频在线观看 | 一级爱爱免费视频 | 99久久婷婷国产综合精品电影 | 日本三级全黄 | 免费超爽大片黄 | 俺来也俺也啪www色 欧洲一区二区视频 | 国产中文字字幕乱码无限 | 边啃奶头边躁狠狠躁 | 免费观看一区二区三区 | 中国美女一级片 | 蜜桃91麻豆精品一二三区 | 波多野结衣免费观看视频 | 福利姬在线观看 | 欧美极品视频在线观看 | 狠狠撸在线观看 | 香蕉伊人| 欧美精品国产动漫 | 黄色成人毛片 | 国产一级做a爱免费视频 | 亚洲精品天堂成人片av在线播放 | 四虎影城库| 一二区在线观看 | 国产精品 日韩 | 国产精品国产三级国产专区52 | 午夜精品福利影院 |