国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

自然語言處理真實項目實戰(zhàn)

王巖威 / 2010人閱讀

摘要:在自然語言處理中,一個很重要的技術(shù)手段就是將文檔轉(zhuǎn)換為一個矢量,這個過程一般是使用這個庫進(jìn)行處理的。自然語言處理中,一般來說,代表詞。自然語言預(yù)處理中,一個很重要的步驟就是將你收集的句子進(jìn)行分詞,將一個句子分解成詞的列表。

前言

本文根據(jù)實際項目撰寫,由于項目保密要求,源代碼將進(jìn)行一定程度的刪減。本文撰寫的目的是進(jìn)行公司培訓(xùn),請勿以任何形式進(jìn)行轉(zhuǎn)載。由于是日語項目,用到的分詞軟件等,在中文任務(wù)中需要替換為相應(yīng)的中文分詞軟件。例如結(jié)巴分詞 : https://github.com/fxsjy/jieba

前提知識和術(shù)語解釋

如果需要獲得更多知識,請自行百度,谷歌。中文資料不是很多,有能力請閱讀相關(guān)論文資料。

余弦相似度

余弦相似度,又稱為余弦相似性,是通過計算兩個向量的夾角余弦值來評估他們的相似度。余弦相似度將向量根據(jù)坐標(biāo)值,繪制到向量空間中,如最常見的二維空間。

余弦相似度

將向量根據(jù)坐標(biāo)值,繪制到向量空間中。如最常見的二維空間。 求得他們的夾角,并得出夾角對應(yīng)的余弦值,此余弦值就可以用來表征,這兩個向量的相似性。夾角越小,余弦值越接近于1,它們的方向更加吻合,則越相似。

單位矢量

單位向量是指模等于1的向量。由于是非零向量,單位向量具有確定的方向。一個非零向量除以它的模,可得所需單位向量。單位向量有無數(shù)個。(矢量和向量是同一個意思,Vector,這里習(xí)慣用矢量這個詞語)

向量加減

平行四邊形定則解決向量加法的方法:將兩個向量平移至公共起點,以向量的兩條邊作平行四邊形,結(jié)果為公共起點的對角線。平行四邊形定則解決向量減法的方法:將兩個向量平移至公共起點,以向量的兩條邊作平行四邊形,結(jié)果由減向量的終點指向被減向量的終點。

image.png

向量點積

代數(shù)定義設(shè)二維空間內(nèi)有兩個向量

,定義它們的數(shù)量積(又叫內(nèi)積、點積)為以下實數(shù):

更一般地,n維向量的內(nèi)積定義如下:

點乘的結(jié)果就是兩個向量的模相乘,然后再與這兩個向量的夾角的余弦值相乘。或者說是兩個向量的各個分量分別相乘的結(jié)果的和。很明顯,點乘的結(jié)果就是一個數(shù),這個數(shù)對我們分析這兩個向量的特點很有幫助。如果點乘的結(jié)果為0,那么這兩個向量互相垂直;如果結(jié)果大于0,那么這兩個向量的夾角小于90度;如果結(jié)果小于0,那么這兩個向量的夾角大于90度。

TF-IDF

TF-IDF是一種統(tǒng)計方法,用以評估一字詞對于一個文件集或一個語料庫中的其中一份文件的重要程度。字詞的重要性隨著它在文件中出現(xiàn)的次數(shù)成正比增加,但同時會隨著它在語料庫中出現(xiàn)的頻率成反比下降。TF-IDF加權(quán)的各種形式常被搜索引擎應(yīng)用,作為文件與用戶查詢之間相關(guān)程度的度量或評級。除了TF-IDF以外,因特網(wǎng)上的搜索引擎還會使用基于鏈接分析的評級方法,以確定文件在搜尋結(jié)果中出現(xiàn)的順序。

Doc2Vec

在自然語言處理中,一個很重要的技術(shù)手段就是將文檔轉(zhuǎn)換為一個矢量,這個過程一般是使用gensim這個庫進(jìn)行處理的。gensim官網(wǎng)地址如果你需要Java版本的Doc2Vec:https://github.com/NLPchina/W...

Token

Token在詞法分析中是標(biāo)記的意思。自然語言處理中,一般來說,Token代表“詞”。自然語言預(yù)處理中,一個很重要的步驟就是將你收集的句子進(jìn)行分詞,將一個句子分解成“詞”的列表。

交叉驗證

交叉驗證(Cross validation),有時亦稱循環(huán)估計, 是一種統(tǒng)計學(xué)上將數(shù)據(jù)樣本切割成較小子集的實用方法。于是可以先在一個子集上做分析, 而其它子集則用來做后續(xù)對此分析的確認(rèn)及驗證。 一開始的子集被稱為訓(xùn)練集。而其它的子集則被稱為驗證集或測試集。交叉驗證是一種評估統(tǒng)計分析、機器學(xué)習(xí)算法對獨立于訓(xùn)練數(shù)據(jù)的數(shù)據(jù)集的泛化能力(generalize)least-one-out cross-validation(loocv)假設(shè)dataset中有n個樣本,那LOOCV也就是n-CV,意思是每個樣本多帶帶作為一次測試集,剩余n-1個樣本則做為訓(xùn)練集。優(yōu)點:1)每一回合中幾乎所有的樣本皆用于訓(xùn)練model,因此最接近母體樣本的分布,估測所得的generalization error比較可靠。2)實驗過程中沒有隨機因素會影響實驗數(shù)據(jù),確保實驗過程是可以被復(fù)制的。但LOOCV的缺點則是計算成本高,為需要建立的models數(shù)量與總樣本數(shù)量相同,當(dāng)總樣本數(shù)量相當(dāng)多時,LOOCV在實作上便有困難,除非每次訓(xùn)練model的速度很快,或是可以用平行化計算減少計算所需的時間。

LinearRegression from sklearn.linear_model import LinearRegression

fit(X, y[, n_jobs]) 對訓(xùn)練集X, y進(jìn)行訓(xùn)練。是對scipy.linalg.lstsq的封裝score(X, y[,]sample_weight) 定義為(1-u/v),其中u = ((y_true - y_pred)2).sum(),而v=((y_true-y_true.mean())2).mean()最好的得分為1.0,一般的得分都比1.0低,得分越低代表結(jié)果越差。其中sample_weight為(samples_n,)形狀的向量,可以指定對于某些sample的權(quán)值,如果覺得某些數(shù)據(jù)比較重要,可以將其的權(quán)值設(shè)置的大一些。

代碼和處理流程 語料庫的準(zhǔn)備

語料庫的準(zhǔn)備,就是將你準(zhǔn)備好的文章庫,轉(zhuǎn)換為一個語料庫。你的文章一般會被保存為TaggedDocument,也就是帶有標(biāo)簽的文檔。一篇文章對應(yīng)著一個TaggedDocument對象。TaggedDocument里面存放的是Token列表和Tag:其中Token列表就是將文章通過分詞軟件分成的詞語的列表,Tag這里保存著原來文章的編號。下面這個代碼中 tdocs變量表示一個TaggedDocument數(shù)組。

注意:在gensim以前版本中TaggedDocument是LabeledSentence

關(guān)于這個函數(shù)的參數(shù)介紹,可以參考這里,全英文非常晦澀難懂的介紹:https://radimrehurek.com/gens...

dm defines the training algorithm. By default (dm=1), ‘distributed memory’ (PV-DM) is used. Otherwise, distributed bag of words (PV-DBOW) is employed.dm:定義了訓(xùn)練的算法,默認(rèn)值為1,使用 ‘distributed memory’方法,不然則使用分布式的“bag of words” 方法。(dm,應(yīng)該是doc model的意思,文檔模型,這個需要進(jìn)一步調(diào)查)size is the dimensionality of the feature vectors.size:是向量的維度,本項目維度設(shè)定是300。維度這個參數(shù)也是需要通過大量實驗獲得最佳的值。dm_mean = if 0 (default), use the sum of the context word vectors. If 1, use the mean. Only applies when dm is used in non-concatenative mode.dm_mean:如果是默認(rèn)值0,則使用上下文向量的和(SUM),如果是1的話,則使用上下文向量的平均值。這個僅僅在dm使用non-concatenative的模式才發(fā)生效果。workers = use this many worker threads to train the model (=faster training with multicore machines).如果是多核處理器,這里可以指定并行數(shù)iter = number of iterations (epochs) over the corpus. The default inherited from Word2Vec is 5, but values of 10 or 20 are common in published ‘Paragraph Vector’ experiments.迭代次數(shù):默認(rèn)的迭代次數(shù)是5,但是最佳實踐應(yīng)該是10或者20.min_count = ignore all words with total frequency lower than this.如果出現(xiàn)頻率少于min_count,則忽略window is the maximum distance between the predicted word and context words used for prediction within a document.window是被預(yù)測詞語和上下文詞語在同一個文檔中的最大的距離。

語料庫也是支持序列化操作的,語料庫可以保存為磁盤上的文件:

Save the object to file (also see load).fname_or_handle is either a string specifying the file name to save to, or an open file-like object which can be written to. If the object is a file handle, no special array handling will be performed; all attributes will be saved to the same file.

語料庫建成之后,就可以進(jìn)行一些有趣的檢索了。例如參考文檔 [Algorithm & NLP] 文本深度表示模型——word2vec&doc2vec詞向量模型 中的句子相似度實驗:

下面是sentence2vec的結(jié)果示例。先利用中文sentence語料訓(xùn)練句向量,然后通過計算句向量之間的cosine值,得到最相似的句子。可以看到句向量在對句子的語義表征上還是相當(dāng)驚嘆的。

句子相似度結(jié)果 相似檢索

這里的相似度檢索是指,給定一個正面的句子,然后檢索和其相似度最大的句子。當(dāng)然,這里也可以指定一個負(fù)面的句子,也就是和這個句子越不相似越好。這里有一個限制,如果正面的句子和負(fù)面的句子,進(jìn)行分詞之后,沒有一個詞語是被訓(xùn)練過的(被訓(xùn)練過的詞語,是指語料庫里面存在的詞語),則無法進(jìn)行操作。

具體在求相似度的操作之前,檢索用向量需要進(jìn)行一下處理。假設(shè)positive變量是一個數(shù)組,數(shù)組里面存放著正面的Token。corpus[token]表示token的矢量,這里對矢量進(jìn)行按列求和,結(jié)果是一個和token維度一樣的矢量。換句話說,就是將多個矢量合并為單個矢量。(Token矢量的求和矢量)然后將上面那個“Token矢量的求和矢量”,和新的positive的推測矢量進(jìn)行相加,獲得一個新的"求相似度用矢量"。

(Negative和Positive類似)

在語料庫對象(Document Model)中有一個很有用的方法infer_vector,這個方法可以基于當(dāng)前的文檔模型快速,將一個文檔轉(zhuǎn)換(按照模型推測)成一個矢量。

infer_vector(doc_words, alpha=0.1, min_alpha=0.0001, steps=5)Infer a vector for given post-bulk training document.Document should be a list of (word) tokens.

在機器學(xué)習(xí)界,有兩種機器學(xué)習(xí)方式,一種是Online的,一種是Offline的。Online的方式,模型可以實時更新,新的樣本會被實時進(jìn)行訓(xùn)練,訓(xùn)練結(jié)果也實時反映到模型中去。Offline的方式,如果有新的樣本,則需要將新老樣本放在一起,重新進(jìn)行訓(xùn)練。這里的話,模型無法進(jìn)行Online的訓(xùn)練,所以新的樣本,只是基于訓(xùn)練好的模型,被轉(zhuǎn)換(推測 Infer,有些類似于預(yù)測Predict)為一個矢量。

相似度計算的核心方法是most_similar

most_similar(positive=[], negative=[], topn=10, clip_start=0, clip_end=None, indexer=None)Find the top-N most similar docvecs known from training. Positive docs contribute positively towards the similarity, negative docs negatively.This method computes cosine similarity between a simple mean of the projection weight vectors of the given docs. Docs may be specified as vectors, integer indexes of trained docvecs, or if the documents were originally presented with string tags, by the corresponding tags.The ‘clip_start’ and ‘clip_end’ allow limiting results to a particular contiguous range of the underlying doctag_syn0norm vectors. (This may be useful if the ordering there was chosen to be significant, such as more popular tag IDs in lower indexes.)尋找最相似的N個文檔。正面(Positive)文檔向相似度貢獻(xiàn)正面的值,負(fù)面(Negative)文檔貢獻(xiàn)負(fù)面的值。這個方法通過計算給定文章的矢量的加權(quán)平均值的余弦相似度來給出結(jié)果。可以通過矢量,被訓(xùn)練過的文檔矢量的下標(biāo),或者原始的字符串標(biāo)簽來指定文檔(正面或者負(fù)面文檔)。‘clip_start’ 和 ‘clip_end’則是指定了相似度檢索的范圍。

官方文檔其實說明的不是很清楚,很多地方還是不容易理解。topn這個參數(shù)應(yīng)該沒有問題,你想返回最相似的多少個,這里就指定多少即可。對于positive和nagative的指定,首先明確一下,這里必須是一個數(shù)組,即使只有一個值,也必須是數(shù)組。positive和nagative數(shù)組里面的值,可以是:1.具體的文檔的矢量2.被訓(xùn)練過的文檔的下標(biāo)3.文檔的Tag字符。(本項目里面的Tag就是文檔的編號)具體到這個項目中,Positive則是上文提到的"求相似度用矢量"。‘clip_start’ 和 ‘clip_end’則是指定了相似度檢索的范圍,這個一般是用來限定檢索范圍,例如只想在1年或者3年的資料中進(jìn)行檢索。

情感模型建立 MiniBatchKMeans

情感分析是建立在文檔的聚類基礎(chǔ)上的。由于計算量比較巨大,項目使用的是MiniBatchKMeans。在有效減少計算時間的同時,也能保證計算誤差在可接受范圍中。項目中使用的是Leave-One-Out Cross Validation,每次將一個樣本作為測試集,一共進(jìn)行n次交叉驗證。

K-Means算法是常用的聚類算法,但其算法本身存在一定的問題,例如在大數(shù)據(jù)量下的計算時間過長就是一個重要問題。為此,Mini Batch K-Means,這個基于K-Means的變種聚類算法應(yīng)運而生。

Mini Batch K-Means

Compute the centroids on X by chunking it into mini-batches.fit擬合操作,實際上就是計算每個簇的質(zhì)心。所以說,如果簇只有一個的話,擬合的意義是求出整個數(shù)據(jù)的質(zhì)心。predict(X)Predict the closest cluster each sample in X belongs to.predict預(yù)測操作,是給出每個樣本屬于哪個簇的結(jié)果

訓(xùn)練樣本的分類和整理

項目中將所有樣本按照時間分為:1年期樣本和3年期樣本。同時根據(jù)其他業(yè)務(wù)規(guī)則進(jìn)行了分類(分類規(guī)則需要保密)。由于收集樣本的渠道不同(不同的公司,組織提供的樣本數(shù)據(jù)),所有的樣本還需要進(jìn)行Remove Common Factor的操作:1.樣本的分類并沒有按照渠道進(jìn)行分類,所以這里同一收集渠道的樣本,也會被分在不同的類中2.所有分類樣本,例如1年期,3年期的樣本,都必須進(jìn)行Remove Common Factor3.同一樣本可能同時存在于不同分類組里面,因為有些是按照時間分類的,有些是按照業(yè)務(wù)分類的,分類的維度不同。

代碼的邏輯如下:fit:XX[tag]里面的tag表示收集渠道,XX[tag]表示某個渠道的樣本矢量數(shù)組:_cf[tag]:表示某個渠道的Common Factor矢量,這里使用np.array(XX[tag]).mean(axis=0)按列求均值獲得的。每一個渠道有一個Common Factor矢量。remove代碼則是將某個渠道里面所有的矢量,都剪去Common Factor矢量(代碼有刪減,原來代碼里面有對于未知渠道的防御代碼,這里已經(jīng)簡化)

在我們的訓(xùn)練樣本(document)中,有一個權(quán)重(weight)屬性,這個屬性是和業(yè)務(wù)有關(guān)的,也是這個項目需要進(jìn)行預(yù)測的。例如,有一些用戶對于商品的評論,可以看作一個訓(xùn)練樣本(document),這個商品的銷量可以看作權(quán)重屬性(weight)。我們需要訓(xùn)練的模型就是獲得一個商品評論和銷量的關(guān)系模型,利用這個模型能夠通過商品評論去預(yù)測一個商品的銷量。這里假設(shè)我們的權(quán)重分為5個級別,-2(無人問津),-1(滯銷),0(正常),1(暢銷),2(爆款) 分別對應(yīng)5種銷量級別。然后我們將所有樣本通過MiniBatchKMeans分到8個不同簇里面,注意,這里的簇數(shù)和級別數(shù)是不一樣的。另外請注意,訓(xùn)練后的簇,其簇的編號和權(quán)重也是沒有任何關(guān)系的,簇號0-7和權(quán)重-2到2,完全是兩個獨立的體系。

同時,我們還需要獲得一個訓(xùn)練的得分(score)

評價訓(xùn)練得分的部分使用了余弦原理,通過單位向量的點乘(點積)結(jié)果來獲得相似度。注意,一定要將兩個矢量都單位化,轉(zhuǎn)換為模為1的矢量,這樣點乘出來的結(jié)果才是余弦值。負(fù)分?jǐn)?shù) = 矢量單位化(待預(yù)測矢量 - 簇的權(quán)重為正數(shù)的矢量均值)點積 單位矢量化簇的正負(fù)差

Python語言

推薦通過網(wǎng)絡(luò)上的 廖雪鋒的Python教程 學(xué)習(xí)python語法

numpy sum

axis:求和的維。

numpy mean

axis:求平均的維。

lambda 和浮點數(shù)

python中使用 .1 代表浮點數(shù) 0.1 或者 1. 代表浮點數(shù) 1.0。原因是要保證結(jié)果的精度,防止程序自動強制轉(zhuǎn)換。

score = lambda X, y: 1.-((y-X)**2).sum()/((y-y.mean())**2).sum() percentile

幾つかの數(shù)値データを小さい順に並べたとき、小さい方から數(shù)えて全體のX%に位置する値をXパーセンタイルと言います。(數(shù)值按照從小到大進(jìn)行排列,從小的數(shù)字開始計算,全體數(shù)字的X%的位置,數(shù)值是多少)

例えば10人のクラスがあるとして、各生徒のテストの點數(shù)が[40, 50, 60, 70, 75, 80, 83, 86, 89, 95]だったとします。その時、下から95%に位置する點數(shù)(逆に言うと上位5%に位置する點數(shù))が何點なのか示すものが95パーセンタイルになります。

以下、numpyを使ったサンプルです。

>>> import numpy as np>>> a = np.array([40, 50, 60, 70, 75, 80, 83, 86, 89, 95])>>> np.percentile(a, 95) # 95パーセンタイルを求めます(逆に言うと上位5%に位置する點數(shù))92.299999999999997# 95パーセンタイルは約92.3點であることがわかります>>> np.percentile(a, 30) # 30パーセンタイルを求めます(逆に言うと上位70%に位置する點數(shù))67.0# 30パーセンタイルは67.0點であることがわかります

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/41985.html

相關(guān)文章

  • 編程語言排行榜迎來歷史性時刻!C語言和Java均敗了!

    摘要:持續(xù)更新多年的編程語言排行榜,迎來了一個歷史性時刻第一次擁有一個新的領(lǐng)導(dǎo)者編程語言。黑馬程序員推出課程體系,除了個月的大綱課程學(xué)習(xí)以外,同時提供個月課程內(nèi)容的在線學(xué)習(xí)提供給畢業(yè)之后進(jìn)入工作崗位的學(xué)員繼續(xù)學(xué)習(xí)。 ...

    philadelphia 評論0 收藏0
  • 【完結(jié)匯總】iKcamp出品基于Koa2搭建Node.js實戰(zhàn)共十一堂課(含視頻)

    摘要:云集一線大廠有真正實力的程序員團(tuán)隊云集一線大廠經(jīng)驗豐厚的碼農(nóng),開源奉獻(xiàn)各教程。融合多種常見的需求場景網(wǎng)絡(luò)請求解析模板引擎靜態(tài)資源日志記錄錯誤請求處理。結(jié)合語句中轉(zhuǎn)中間件控制權(quán),解決回調(diào)地獄問題。注意分支中的目錄為當(dāng)節(jié)課程后的完整代碼。 ?? ?與眾不同的學(xué)習(xí)方式,為你打開新的編程視角 獨特的『同步學(xué)習(xí)』方式 文案講解+視頻演示,文字可激發(fā)深層的思考、視頻可還原實戰(zhàn)操作過程。 云...

    sPeng 評論0 收藏0
  • 開始連載啦~每周2更共11堂iKcamp課|基于Koa2搭建Node.js實戰(zhàn)項目教學(xué)(含視頻)|

    摘要:玩轉(zhuǎn)同時全面掌握潮流技術(shù)采用新一代的開發(fā)框架更小更富有表現(xiàn)力更健壯。融合多種常見的需求場景網(wǎng)絡(luò)請求解析模板引擎靜態(tài)資源日志記錄錯誤請求處理。結(jié)合語句中轉(zhuǎn)中間件控制權(quán),解決回調(diào)地獄問題。注意分支中的目錄為當(dāng)節(jié)課程后的完整代碼。 ?? ?與眾不同的學(xué)習(xí)方式,為你打開新的編程視角 獨特的『同步學(xué)習(xí)』方式 文案講解+視頻演示,文字可激發(fā)深層的思考、視頻可還原實戰(zhàn)操作過程。 云集一線大廠...

    B0B0 評論0 收藏0
  • (生命周期鉤子)vue 項目實戰(zhàn)

    摘要:生命周期簡單來說就是一個組件從創(chuàng)建到初始化到銷毀的一個過程,在這個過程中有這些生命周期鉤子函數(shù)我們可以更方便的去操作整一個組件。 Vue實例的生命周期鉤子函數(shù)(8個) beforeCreate   剛 new了一個組件,無法訪問到數(shù)據(jù)和真實的dom,基本上這個好像不能干啥 created    data屬性完成了賦值,可以對數(shù)據(jù)進(jìn)行修改但是不會觸發(fā)updated,在這里可以做初始數(shù)據(jù)的...

    neuSnail 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<