1. 程式人生 > >Doc2Vec計算句子相似度

Doc2Vec計算句子相似度

X_train  就是自己的訓練語料

“”“
date:2018_7_25
doc2vec計算句子相似性
”“”
# coding:utf-8

import sys
import time
import csv
import glob
import gensim
import sklearn
import numpy as np
import jieba.posseg as pseg
import jieba

from gensim.models.doc2vec import Doc2Vec, LabeledSentence

TaggededDocument = gensim.models.doc2vec.TaggedDocument

def loadPoorEnt(path2 = 'G:/project/sentimation_analysis/data/stopwords.csv'):
    csvfile = open(path2,encoding='UTF-8')
    stopwords  = [line.strip() for line in csvfile.readlines()]
    return stopwords
stop_words = loadPoorEnt()

def cut(data):
    result=[]    #pos=['n','v']
    res = pseg.cut(data)
    list = []
    for item in res:
        #if item.word not in stop_words and (item.flag == 'n' or item.flag == 'a' or item.flag == 'v'):
        if item.word not in stop_words :
            list.append(item.word)
    result.append(list)
    return result


def get_all_content():
    #abel_dir = [path + x for x in os.listdir(path) if os.path.isdir(path + x)]
    all_files = glob.glob(r'D:/GFZQ/GFZQ/xuesu2018/xuesu/*.csv')
    return all_files

def get_wenben(path):
	csvfile = open(path,'r',encoding='UTF-8')
	reader = csv.reader(csvfile)
	return reader

def get_QA(wenben):
    Q_all =[]
    A_all =[]
    for QA in wenben :
        Q_all.append(QA[1])
        A_all.append(QA[2])
    all = Q_all + A_all
    return all,Q_all,A_all


def get_datasest(all_csv):
    docs =  all_csv
    print( len(docs))
    x_train = []
    # y = np.concatenate(np.ones(len(docs)))
    all_sent = []
    for file_one in docs:
        for sent in file_one:
            #print (sent)
            all_sent.append(sent)
    for i,text in enumerate(all_sent):
        word_list = cut(text)
        #print(word_list[0])
        l = len(word_list[0])
        print (l)
        document = TaggededDocument(word_list[0], tags=[i])
        x_train.append(document)
    return x_train

def getVecs(model, corpus, size):
    vecs = [np.array(model.docvecs[z.tags[0]].reshape(1, size)) for z in corpus]
    return np.concatenate(vecs)

def train(x_train, size=200, epoch_num=1):
    model_dm = Doc2Vec(x_train, min_count=1, window=3, size=size, sample=1e-3, negative=5, workers=4)
    model_dm.train(x_train, total_examples=model_dm.corpus_count, epochs=70)
    model_dm.save('G:/project/sentimation_analysis/data/conference.model')
    return model_dm

def get_csvfile ():
    all_files = get_all_content()
    length = 28  # len(all_files)
    print ("統計了%d家公司的情感詞" %length)
    all_csv = []
    for i in range(length):
        print ("正在解析第%d家公司" %i)
        file_one = all_files[i]
        wenben = get_wenben(file_one)
        all, Q_all, A_all = get_QA(wenben)
        all_csv.append(all)
    return all_csv

def stest():
    model_dm = Doc2Vec.load('G:/project/sentimation_analysis/data/conference_model.csv')
    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)
    return sims


if __name__ == '__main__':

    start = time.clock()
    all_csv = get_csvfile()
    x_train = get_datasest(all_csv)
    model_dm = train(x_train)
    sims = stest()
    for count, sim in sims:
        sentence = x_train[count]
        print  ( sentence, sim, )

相關推薦

Doc2Vec計算句子相似

X_train  就是自己的訓練語料 “”“ date:2018_7_25 doc2vec計算句子相似性 ”“” # coding:utf-8 import sys import time import csv import glob import gensim impo

用gensim doc2vec計算文字相似,Python可以跑通的程式碼

Python3.7版本,轉載自:https://blog.csdn.net/juanjuan1314/article/details/75124046 wangyi_title.txt檔案下載地址:連結:https://pan.baidu.com/s/1uL75P13t98YHMqgv3Kx7T

用gensim doc2vec計算文字相似

最近開始接觸gensim庫,之前訓練word2vec用Mikolov的c版本程式,看了很久才把程式看明白,在gensim庫中,word2vec和doc2vec只需要幾個介面就可以實現,實在是方便。python,我越來越愛你了。 這個程式很簡單,直接上程式了。 # codin

機器學習演算法Python實現:doc2vec句子相似

# coding:utf-8 import sys import gensim import sklearn import numpy as np from gensim.models.doc2vec import Doc2Vec, LabeledSentence Ta

Doc2Vec計算句子文件向量、求文字相似

注:本文主要是記錄自己常用的關於Doc2Vec的簡單程式程式碼。因此不做過多的解釋,直接寫出程式碼,如有問題可以討論交流。 一、doc2vec求文件向量 import sys import numpy as np import gensim from gensim.mod

句子相似計算的幾種方法

在做自然語言處理的過程中,我們經常會遇到需要找出相似語句的場景,或者找出句子的近似表達,這時候我們就需要把類似的句子歸到一起,這裡面就涉及到句子相似度計算的問題,那麼本節就來了解一下怎麼樣來用 Python 實現句子相似度的計算。 基本方法 句子相似度計算我們一共歸類

中文句子相似計算思路

這裡主要面向初學者介紹句子相似度目前主流的研究方向。 從詞到句子,這是目前中文相似度計算的主要思想。而由這個-思想引申出來的演算法卻非常多,這裡面向初學者介紹比較容易實現的方法。 這裡要介紹的是二分法計算句子相似度。這個演算法實現簡單,思路清晰由此出現的技術分類變化萬千,主

使用 TF-IDF 加權的空間向量模型實現句子相似計算

使用 TF-IDF 加權的空間向量模型實現句子相似度計算 字元匹配層次計算句子相似度 計算兩個句子相似度的演算法有很多種,但是對於從未了解過這方面演算法的人來說,可能最容易想到的就是使用字串匹配相關的演算法,來檢查兩個句子所對應的字串的字元相似程度。比如單純的進行子串匹配,搜尋 A 串中能與 B 串匹配的

句子相似比較的歸一化

我們將不同長度的句子(預處理並分詞之後的長度)直接做比較其實是不公平的,舉個例子:   Sentence 1 =  長度為2 Sentence 2 = 長度為1 Sentence 3 = 長度為3 (在取相似詞TOP4,exp=0.7,的情況下) 即便Sent2與Sent1詞的

句子相似_tf/idf

import mathfrom math import isnanimport pandas as pd#結巴分詞,切開之後,有分隔符def jieba_function(sent): import jieba sent1 = jieba.cut(sent) s = [] for ea

NLP入門(一)詞袋模型及句子相似

  本文作為筆者NLP入門系列文章第一篇,以後我們就要步入NLP時代。   本文將會介紹NLP中常見的詞袋模型(Bag of Words)以及如何利用詞袋模型來計算句子間的相似度(餘弦相似度,cosine similarity)。   首先,讓我們來看一下,什麼是詞袋模型。我們以下面兩個

基於WMD(詞移距離)的句子相似分析簡介

word2vec word2vec是隻有一個隱層的全連線神經網路,對語料中的所有詞彙進行訓練並生成相應的詞向量(Word Embedding)WI 的大小是VxN, V是單詞字典的大小, 每次輸入是一個單詞, N是設定的隱層大小。word2vec的模型通過一種神經網路語言模型(Neu

計算字串相似的一些方法

產品出了一個奇怪的需求,想通過字串相似度取匹配城市= =(當然,最後證實通過字串相似度取判斷兩個字串是不是一個城市是不對的!!!) 這裡就記錄一下我計算字串(英文字串)相似度的方法吧~ 參考文件: L

DSSM演算法-計算文字相似

轉載請註明出處: http://blog.csdn.net/u013074302/article/details/76422551 導語 在NLP領域,語義相似度的計算一直是個難題:搜尋場景下query和Doc的語義相似度、feeds場景下Doc和Doc的語義相似度、機器翻譯場景下A句

[LeetCode] Sentence Similarity 句子相似

Given two sentences words1, words2 (each represented as an array of strings), and a list of similar word pairs pairs, determine if two sentences are simi

[LeetCode] Sentence Similarity II 句子相似之二

Given two sentences words1, words2 (each represented as an array of strings), and a list of similar word pairs pairs, determine if two sentences are simi

計算文字相似方法大全-簡單說

本編文章是方法論-主要給大家介紹原理思路 簡單講解 基於關鍵詞的空間向量模型的演算法,將使用者的喜好以文件描述並轉換成向量模型,對商品也是這麼處理,然後再通過計算商品文件和使用者偏好文件的餘弦相似度。 文字相似度計算在資訊檢索、資料探勘、機器翻譯、文件複製檢測等領域

應用實戰: 如何利用Spark叢集計算物品相似

本文是Spark調研筆記的最後一篇,以程式碼例項說明如何藉助Spark平臺高效地實現推薦系統CF演算法中的物品相似度計算。 在推薦系統中,最經典的推薦演算法無疑是協同過濾(Collaborative Filtering, CF),而item-cf又是CF演算法中一個實現簡單

LeetCode之計算字串相似或編輯距離EditDistance

問題描述: /** * Given two words word1 and word2, find the minimum number of steps required to * convert word1 to word2. (each oper

基於句子相似的FAQ問答系統

總結一波我的專案之一,歷史久遠,要把它理清一下。 Introduce:日趨增多的網路資訊使使用者很難迅速從搜尋引擎返回的大量資訊中找到所需內容。自動問答系統為人們提供了以自然語言提問的交流方式,為使用者直接返回所需的答案而不是相關的網頁,具有方便、快捷、高效等特點。