import jieba
import gensim
from gensim.models.doc2vec import doc2vec, labeledsentence
taggededdocument = gensim.models.doc2vec.taggeddocument
tag_list =
cut_list =
with open
('a.txt'
,'r'
, encoding=
'utf-8'
) as f:
docs = f.
readlines()
for doc in docs:
cut_doc = jieba.
cut(doc) # 將文字的每一行進行分詞
cut_line_list =
' '.
join
(cut_doc)
.split
(' '
) cut_list.
(cut_line_list) #把每一行的分詞結果存入cut_list中
for i, text in
enumerate
(cut_list)
: length =
len(text)
document =
taggededdocument
(text, tags=
[i]) # 給每一行的句子打個標籤為i
tag_list.
(document)
model_dm =
doc2vec
(tag_list, min_count=
1, window=
3, size=
200, sample=
1e-3
, negative=
5, workers=4)
a = jieba.
cut(
"玉淵潭公園位於北京市海淀區"
)test_text =
' '.
join
(a).
split
(" "
)print
(test_text)
inferred_vector_dm = model_dm.
infer_vector
(test_text)
print
(inferred_vector_dm)
sims = model_dm.docvecs.
most_similar
([inferred_vector_dm]
, topn=
10) # 找出相似度最高的十個句子
print
(sims)
for count, sim in sims:
sentence = tag_list[count]
words =
''for word in sentence[0]
: words = words + word +
' 'print
(words, sim,
len(sentence[0]
))#可以用句向量模型直接根據詞向量查詢相似度
print
(model_dm.wv.
most_similar
('中國'
))
執行結果(句子向量200維)
相似度計算:
最相關的十個句子
分布式表示和分布表示
書上說 在分布式表示中,每個實體被表示為值的向量,並且實體的含義及其與其他實體的關係由向量中的啟用以及不同向量之間的相似性來捕獲。在語音處理的上下文中,這意味著不應將詞 和句子 對映到離散維度,而是對映到共享的低維空間,其中每個單詞將與d為向量相關聯,詞將被其與其他單詞的關係和其向量中的啟用值所捕獲...
文字向量表示及TFIDF詞彙權值
文字相似計算是進行文字聚類的基礎,和傳統結構化數值資料的聚類方法類似,文字聚類是通過計算文字之間 距離 來表示文字之間的相似度並產生聚類。文字相似度的常用計算方法 有餘弦定理和jaccard係數。但是文字資料與普通的數值資料或類屬資料不同,文字資料是一種半結構化資料,在進行文字挖掘之前必須要對文字資...
文字向量表示及TFIDF詞彙權值
文字相似計算是進行文字聚類的基礎,和傳統結構化數值資料的聚類方法類似,文字聚類是通過計算文字之間 距離 來表示文字之間的相似度並產生聚類。文字相似度的常用計算方法有餘弦定理和jaccard係數。但是文字資料與普通的數值資料或類屬資料不同,文字資料是一種半結構化資料,在進行文字挖掘之前必須要對文字資料...