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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

中文词向量的训练

發(fā)布時(shí)間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 中文词向量的训练 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近在做畢設(shè),需要對(duì)中文進(jìn)行向量化表示,現(xiàn)有的最全中文詞向量預(yù)訓(xùn)練向量有:最全中文詞向量

part 1:以上鏈接中的詞向量介紹:

格式

預(yù)先訓(xùn)練好的向量文件是文本格式。每行包含一個(gè)單詞和它的向量。每個(gè)值由空格分隔。第一行記錄元信息:第一個(gè)數(shù)字表示文件中的字?jǐn)?shù),第二個(gè)數(shù)字表示向量大小。

除了密集的單詞向量(用SGNS訓(xùn)練)之外,我們還提供稀疏向量(用PPMI訓(xùn)練)。它們與liblinear的格式相同,其中“:”之前的數(shù)字表示維度索引,“:”之后的數(shù)字表示該值。

預(yù)訓(xùn)練的中文單詞矢量

基本設(shè)置

Window SizeDynamic WindowSub-samplingLow-Frequency WordIterationNegative Sampling*
5Yes1e-51055

各種領(lǐng)域詞向量

用不同的表示法,上下文特征和語(yǔ)料庫(kù)訓(xùn)練的中文單詞向量。下面的下載鏈接都是我的百度網(wǎng)盤, 因?yàn)榕沦Y料丟失, 所以統(tǒng)一保存在了我的網(wǎng)盤, 后期可能回不時(shí)更新。

Word2vec / Skip-Gram with Negative Sampling (SGNS)
CorpusContext Features
WordWord + NgramWord + CharacterWord + Character + Ngram
Baidu Encyclopedia 百度百科300d300d300d300d
Wikipedia_zh 中文維基百科300d300d300d300d
People’s Daily News 人民日?qǐng)?bào)300d300d300d300d
Sogou News 搜狗新聞300d300d300d300d
Financial News 金融新聞300d300d300d300d
Zhihu_QA 知乎問(wèn)答300d300d300d300d
Weibo 微博300d300d300d300d
Literature 文學(xué)作品300d300d300d300d
Complete Library in Four Sections
四庫(kù)全書
300d300dNANNAN
Mixed-large 綜合300d300d300d300d
Positive Pointwise Mutual Information (PPMI)
CorpusContext Features
WordWord + NgramWord + CharacterWord + Character + Ngram
Baidu Encyclopedia 百度百科300d300d300d300d
Wikipedia_zh 中文維基百科300d300d300d300d
People’s Daily News 人民日?qǐng)?bào)300d300d300d300d
Sogou News 搜狗新聞300d300d300d300d
Financial News 金融新聞300d300d300d300d
Zhihu_QA 知乎問(wèn)答300d300d300d300d
Weibo 微博300d300d300d300d
Literature 文學(xué)作品300d300d300d300d
Complete Library in Four Sections
四庫(kù)全書
300d300dNANNAN
Mixed-large 綜合300d300d300d300d

詞共現(xiàn)性

我們發(fā)布的詞向量來(lái)自不同的共現(xiàn)統(tǒng)計(jì)量。目標(biāo)和上下文向量在一些相關(guān)論文中通常被稱為輸入和輸出向量。

在這一部分中,可以獲得超出單詞的任意語(yǔ)言單位的向量。例如,字符向量(word-character)。

所有向量均由SGNS在百度百科上進(jìn)行訓(xùn)練

?

?

FeatureCo-occurrence TypeTarget Word VectorsContext Word Vectors
WordWord → Word300d300d
NgramWord → Ngram (1-2)300d300d
Word → Ngram (1-3)300d300d
Ngram (1-2) → Ngram (1-2)300d300d
CharacterWord → Character (1)300d300d
Word → Character (1-2)300d300d
Word → Character (1-4)300d300d
RadicalRadical300d300d
PositionWord → Word (left/right)300d300d
Word → Word (distance)300d300d
GlobalWord → Text300d300d
Syntactic FeatureWord → POS300d300d
Word → Dependency300d300d

?

表示

現(xiàn)有的單詞表示方法分為兩類,即密集稀疏向量。 SGNS模型(word2vec工具包中的一個(gè)模型)和PPMI模型分別是這兩類的典型方法。 SGNS模型通過(guò)淺層神經(jīng)網(wǎng)絡(luò)訓(xùn)練低維實(shí)數(shù)(密集)向量。它也被稱為神經(jīng)嵌入方法。 PPMI模型是一種稀疏的特征表示,通過(guò)PPM加權(quán)方案進(jìn)行加權(quán)。

上下文特征

三個(gè)上下文特征: word ngram character 常見(jiàn)于文獻(xiàn)中。大多數(shù)單詞表示方法主要利用單詞共現(xiàn)統(tǒng)計(jì),即使用單詞作為上下文特征(單詞特征)。受語(yǔ)言建模問(wèn)題的啟發(fā),我們?cè)谏舷挛闹幸肓薾gram特性。 word-word和word-ngram共現(xiàn)統(tǒng)計(jì)都用于訓(xùn)練(ngram特征)。對(duì)于中國(guó)人來(lái)說(shuō),漢字(漢字)通常表達(dá)強(qiáng)烈的語(yǔ)義。為此,我們考慮使用單詞和單詞字符共現(xiàn)統(tǒng)計(jì)來(lái)學(xué)習(xí)單詞向量。字符級(jí)ngram的長(zhǎng)度范圍從1到4 (字符特征)

除了word,ngram和character之外,還有其他對(duì)單詞向量的屬性具有實(shí)質(zhì)影響的特征。例如,使用整個(gè)文本作為上下文特征可以將更多的主題信息引入詞向量;使用依賴關(guān)系解析作為上下文特征可以為詞向量添加語(yǔ)法約束。本項(xiàng)目考慮了17種同現(xiàn)類型。

語(yǔ)料庫(kù)

我們費(fèi)了很大勁收集各個(gè)領(lǐng)域的語(yǔ)料。所有文本數(shù)據(jù)都通過(guò)刪除html和xml標(biāo)簽進(jìn)行預(yù)處理。只保留純文本,并且[HanLP(v_1.5.3)](https://github.com/hankcs/HanLP)用于分詞。詳細(xì)的語(yǔ)料庫(kù)信息如下所示:

?

CorpusSizeTokensVocabulary SizeDescription
Baidu Encyclopedia
百度百科
4.1G745M5422KChinese Encyclopedia data from
https://baike.baidu.com/
Wikipedia_zh
中文維基百科
1.3G223M2129KChinese Wikipedia data from
https://dumps.wikimedia.org/
People’s Daily News
人民日?qǐng)?bào)
3.9G668M1664KNews data from People’s Daily(1946-2017)
http://data.people.com.cn/
Sogou News
搜狗新聞
3.7G649M1226KNews data provided by Sogou labs
http://www.sogou.com/labs/
Financial News
金融新聞
6.2G1055M2785KFinancial news collected from multiple news websites
Zhihu_QA
知乎問(wèn)答
2.1G384M1117KChinese QA data from
https://www.zhihu.com/
Weibo
微博
0.73G136M850KChinese microblog data provided by NLPIR Lab
http://www.nlpir.org/download/weibo.7z
Literature
文學(xué)作品
0.93G177M702K8599 modern Chinese literature works
Mixed-large
綜合
22.6G4037M10653KWe build the large corpus by merging the above corpora.
Complete Library in Four Sections
四庫(kù)全書
1.5G714M21.8KThe largest collection of texts in pre-modern China.


所有的單詞都考慮在內(nèi),包括低頻詞。

?

工具包

所有的單詞向量由[ngram2vec](https://github.com/zhezhaoa/ngram2vec/)工具箱進(jìn)行訓(xùn)練。 Ngram2vec工具箱是[word2vec](https://github.com/svn2github/word2vec)和[fasttext](https://github.com/facebookresearch/fastText)工具箱的超集,支持任意上下文特性和模型。

中文推理基準(zhǔn)

詞向量的質(zhì)量通常通過(guò)推理問(wèn)題任務(wù)來(lái)評(píng)估。在這個(gè)項(xiàng)目中,有兩個(gè)基準(zhǔn)被用于評(píng)估。首先是CA翻譯,其中大多數(shù)類比問(wèn)題直接從英語(yǔ)基準(zhǔn)轉(zhuǎn)換而來(lái)。雖然CA翻譯已被廣泛用于許多中文word embedding論文,但它只包含三個(gè)語(yǔ)義問(wèn)題的問(wèn)題,涵蓋了134個(gè)中文單詞。相比之下,CA8是專門為中文而設(shè)計(jì)的。它包含了17813個(gè)類比問(wèn)題,涵蓋了全面的形態(tài)和語(yǔ)義關(guān)系。 CA轉(zhuǎn)換后的CA8及其詳細(xì)描述在[ testsets ](https://github.com/Embedding/Chinese-Word-Vectors/tree/master/testsets)文件夾中提供。

評(píng)估工具包

我們?cè)赱evaluation](https://github.com/Embedding/Chinese-Word-Vectors/tree/master/evaluation)文件夾中提供評(píng)估工具包。

運(yùn)行以下代碼來(lái)評(píng)估密集向量。

?

1 2 `$ python ana_eval_dense.py -v <vector.txt> -a CA8/morphological.txt $` python ana_eval_dense.py -v <vector.txt> -a CA8/semantic.txt

?

運(yùn)行以下代碼來(lái)評(píng)估稀疏向量。
`
$ python ana_eval_sparse.py -v <vector.txt> -a CA8/morphological.txt $

?

part 2: word2vec預(yù)訓(xùn)練詞向量介紹:

Word2vec詞向量的獲得是根據(jù)神經(jīng)語(yǔ)言模型進(jìn)行訓(xùn)練的,主要有CBOW和Skip-Gram兩種方式得到相應(yīng)的預(yù)訓(xùn)練方式:

part3: Glove詞向量訓(xùn)練方法:

glove在word2vec的基礎(chǔ)上引入了詞的共現(xiàn)矩陣。

part4: Fasttext詞向量訓(xùn)練方法:

首先會(huì)介紹一些預(yù)備知識(shí),比如softmax、ngram等,然后簡(jiǎn)單介紹word2vec原理,之后來(lái)講解fastText的原理,并著手使用keras搭建一個(gè)簡(jiǎn)單的fastText分類器,最后,我們會(huì)介紹fastText在達(dá)觀數(shù)據(jù)的應(yīng)用

NO.1 ? ?預(yù)備知識(shí)

?

1?Softmax回歸

?

Softmax回歸(Softmax Regression)又被稱作多項(xiàng)邏輯回歸(multinomial logistic regression),它是邏輯回歸在處理多類別任務(wù)上的推廣。

在邏輯回歸中, 我們有m個(gè)被標(biāo)注的樣本:,其中。因?yàn)轭悩?biāo)是二元的,所以我們有。我們的假設(shè)(hypothesis)有如下形式:

代價(jià)函數(shù)(cost function)如下:

在Softmax回歸中,類標(biāo)是大于2的,因此在我們的訓(xùn)練集

中,。給定一個(gè)測(cè)試輸入x,我們的假設(shè)應(yīng)該輸出一個(gè)K維的向量,向量?jī)?nèi)每個(gè)元素的值表示x屬于當(dāng)前類別的概率。具體地,假設(shè)形式如下:

代價(jià)函數(shù)如下:

?

其中1{·}是指示函數(shù),即1=1,1=0

既然我們說(shuō)Softmax回歸是邏輯回歸的推廣,那我們是否能夠在代價(jià)函數(shù)上推導(dǎo)出它們的一致性呢?當(dāng)然可以,于是:

可以看到,邏輯回歸是softmax回歸在K=2時(shí)的特例。

2?分層Softmax

?

你可能也發(fā)現(xiàn)了,標(biāo)準(zhǔn)的Softmax回歸中,要計(jì)算y=j時(shí)的Softmax概率:,我們需要對(duì)所有的K個(gè)概率做歸一化,這在|y|很大時(shí)非常耗時(shí)。于是,分層Softmax誕生了,它的基本思想是使用樹的層級(jí)結(jié)構(gòu)替代扁平化的標(biāo)準(zhǔn)Softmax,使得在計(jì)算時(shí),只需計(jì)算一條路徑上的所有節(jié)點(diǎn)的概率值,無(wú)需在意其它的節(jié)點(diǎn)。

下圖是一個(gè)分層Softmax示例:

樹的結(jié)構(gòu)是根據(jù)類標(biāo)的頻數(shù)構(gòu)造的霍夫曼樹。K個(gè)不同的類標(biāo)組成所有的葉子節(jié)點(diǎn),K-1個(gè)內(nèi)部節(jié)點(diǎn)作為內(nèi)部參數(shù),從根節(jié)點(diǎn)到某個(gè)葉子節(jié)點(diǎn)經(jīng)過(guò)的節(jié)點(diǎn)和邊形成一條路徑,路徑長(zhǎng)度被表示為。于是,就可以被寫成:

其中:

表示sigmoid函數(shù);

表示n節(jié)點(diǎn)的左孩子;

是一個(gè)特殊的函數(shù),被定義為:

是中間節(jié)點(diǎn)的參數(shù);X是Softmax層的輸入。

上圖中,高亮的節(jié)點(diǎn)和邊是從根節(jié)點(diǎn)到??的路徑,路徑長(zhǎng)度

可以被表示為:

于是,從根節(jié)點(diǎn)走到葉子節(jié)點(diǎn),實(shí)際上是在做了3次二分類的邏輯回歸。

通過(guò)分層的Softmax,計(jì)算復(fù)雜度一下從|K|降低到log|K|。

?

3?n-gram特征

?

在文本特征提取中,常常能看到n-gram的身影。它是一種基于語(yǔ)言模型的算法,基本思想是將文本內(nèi)容按照字節(jié)順序進(jìn)行大小為N的滑動(dòng)窗口操作,最終形成長(zhǎng)度為N的字節(jié)片段序列。看下面的例子:

我來(lái)到達(dá)觀數(shù)據(jù)參觀

相應(yīng)的bigram特征為:我來(lái) 來(lái)到 到達(dá) 達(dá)觀 觀數(shù) 數(shù)據(jù) 據(jù)參 參觀

相應(yīng)的trigram特征為:我來(lái)到 來(lái)到達(dá) 到達(dá)觀 達(dá)觀數(shù) 觀數(shù)據(jù) 數(shù)據(jù)參 據(jù)參觀

?

注意一點(diǎn):n-gram中的gram根據(jù)粒度不同,有不同的含義。它可以是字粒度,也可以是詞粒度的。上面所舉的例子屬于字粒度的n-gram,詞粒度的n-gram看下面例子:

?

我 來(lái)到 達(dá)觀數(shù)據(jù) 參觀

?

相應(yīng)的bigram特征為:我/來(lái)到 來(lái)到/達(dá)觀數(shù)據(jù) 達(dá)觀數(shù)據(jù)/參觀

相應(yīng)的trigram特征為:我/來(lái)到/達(dá)觀數(shù)據(jù) 來(lái)到/達(dá)觀數(shù)據(jù)/參觀?

n-gram產(chǎn)生的特征只是作為文本特征的候選集,你后面可能會(huì)采用信息熵、卡方統(tǒng)計(jì)、IDF等文本特征選擇方式篩選出比較重要特征。

?

NO.2 ??Word2vec

?

?

你可能要問(wèn),這篇文章不是介紹fastText的么,怎么開(kāi)始介紹起了word2vec?

最主要的原因是word2vec的CBOW模型架構(gòu)和fastText模型非常相似。于是,你看到facebook開(kāi)源的fastText工具不僅實(shí)現(xiàn)了fastText文本分類工具,還實(shí)現(xiàn)了快速詞向量訓(xùn)練工具。word2vec主要有兩種模型:skip-gram 模型和CBOW模型,這里只介紹CBOW模型,有關(guān)skip-gram模型的內(nèi)容請(qǐng)參考達(dá)觀另一篇技術(shù)文章:

漫談Word2vec之skip-gram模型

1?模型架構(gòu)

CBOW模型的基本思路是:用上下文預(yù)測(cè)目標(biāo)詞匯。架構(gòu)圖如下所示:

輸入層由目標(biāo)詞匯y的上下文單詞 組成, 是被onehot編碼過(guò)的V維向量,其中V是詞匯量;隱含層是N維向量h;輸出層是被onehot編碼過(guò)的目標(biāo)詞y。輸入向量通過(guò) 維的權(quán)重矩陣W連接到隱含層;隱含層通過(guò) 維的權(quán)重矩陣 ?連接到輸出層。因?yàn)樵~庫(kù)V往往非常大,使用標(biāo)準(zhǔn)的softmax計(jì)算相當(dāng)耗時(shí),于是CBOW的輸出層采用的正是上文提到過(guò)的分層Softmax。

2?前向傳播

輸入是如何計(jì)算而獲得輸出呢?先假設(shè)我們已經(jīng)獲得了權(quán)重矩陣和(具體的推導(dǎo)見(jiàn)第3節(jié)),隱含層h的輸出的計(jì)算公式:

即:隱含層的輸出是C個(gè)上下文單詞向量的加權(quán)平均,權(quán)重為W。

接著我們計(jì)算輸出層的每個(gè)節(jié)點(diǎn):

這里是矩陣的第j列,最后,將作為softmax函數(shù)的輸入,得到:

3?反向傳播學(xué)習(xí)權(quán)重矩陣

在學(xué)習(xí)權(quán)重矩陣和過(guò)程中,我們首先隨機(jī)產(chǎn)生初始值,然后feed訓(xùn)練樣本到我們的模型,并觀測(cè)我們期望輸出和真實(shí)輸出的誤差。接著,我們計(jì)算誤差關(guān)于權(quán)重矩陣的梯度,并在梯度的方向糾正它們。

首先定義損失函數(shù),objective是最大化給定輸入上下文,target單詞的條件概率。因此,損失函數(shù)為:

這里,表示目標(biāo)單詞在詞庫(kù)V中的索引。

如何更新權(quán)重?

我們先對(duì)E關(guān)于求導(dǎo):

函數(shù)表示:

于是,的更新公式:

如何更新權(quán)重W?

我們首先計(jì)算E關(guān)于隱含層節(jié)點(diǎn)的導(dǎo)數(shù):

然后,E關(guān)于權(quán)重的導(dǎo)數(shù)為:

于是,的更新公式:

?

NO.3 ??fastText分類

?

?

終于到我們的fastText出場(chǎng)了。這里有一點(diǎn)需要特別注意,一般情況下,使用fastText進(jìn)行文本分類的同時(shí)也會(huì)產(chǎn)生詞的embedding,即embedding是fastText分類的產(chǎn)物。除非你決定使用預(yù)訓(xùn)練的embedding來(lái)訓(xùn)練fastText分類模型,這另當(dāng)別論。

1?字符級(jí)別的n-gram

word2vec把語(yǔ)料庫(kù)中的每個(gè)單詞當(dāng)成原子的,它會(huì)為每個(gè)單詞生成一個(gè)向量。這忽略了單詞內(nèi)部的形態(tài)特征,比如:“apple” 和“apples”,“達(dá)觀數(shù)據(jù)”和“達(dá)觀”,這兩個(gè)例子中,兩個(gè)單詞都有較多公共字符,即它們的內(nèi)部形態(tài)類似,但是在傳統(tǒng)的word2vec中,這種單詞內(nèi)部形態(tài)信息因?yàn)樗鼈儽晦D(zhuǎn)換成不同的id丟失了。

?

為了克服這個(gè)問(wèn)題,fastText使用了字符級(jí)別的n-grams來(lái)表示一個(gè)單詞。對(duì)于單詞“apple”,假設(shè)n的取值為3,則它的trigram有:

“<ap”, ?“app”, ?“ppl”, ?“ple”, “l(fā)e>”

其中,<表示前綴,>表示后綴。于是,我們可以用這些trigram來(lái)表示“apple”這個(gè)單詞,進(jìn)一步,我們可以用這5個(gè)trigram的向量疊加來(lái)表示“apple”的詞向量。

這帶來(lái)兩點(diǎn)好處:

1. 對(duì)于低頻詞生成的詞向量效果會(huì)更好。因?yàn)樗鼈兊膎-gram可以和其它詞共享。

2. 對(duì)于訓(xùn)練詞庫(kù)之外的單詞,仍然可以構(gòu)建它們的詞向量。我們可以疊加它們的字符級(jí)n-gram向量。

2?模型架構(gòu)

之前提到過(guò),fastText模型架構(gòu)和word2vec的CBOW模型架構(gòu)非常相似。下面是fastText模型架構(gòu)圖:

注意:此架構(gòu)圖沒(méi)有展示詞向量的訓(xùn)練過(guò)程。可以看到,和CBOW一樣,fastText模型也只有三層:輸入層、隱含層、輸出層(Hierarchical Softmax),輸入都是多個(gè)經(jīng)向量表示的單詞,輸出都是一個(gè)特定的target,隱含層都是對(duì)多個(gè)詞向量的疊加平均。

不同的是,CBOW的輸入是目標(biāo)單詞的上下文,fastText的輸入是多個(gè)單詞及其n-gram特征,這些特征用來(lái)表示單個(gè)文檔;CBOW的輸入單詞被onehot編碼過(guò),fastText的輸入特征是被embedding過(guò);CBOW的輸出是目標(biāo)詞匯,fastText的輸出是文檔對(duì)應(yīng)的類標(biāo)。

值得注意的是,fastText在輸入時(shí),將單詞的字符級(jí)別的n-gram向量作為額外的特征;在輸出時(shí),fastText采用了分層Softmax,大大降低了模型訓(xùn)練時(shí)間。這兩個(gè)知識(shí)點(diǎn)在前文中已經(jīng)講過(guò),這里不再贅述。

fastText相關(guān)公式的推導(dǎo)和CBOW非常類似,這里也不展開(kāi)了。

3?核心思想

現(xiàn)在拋開(kāi)那些不是很討人喜歡的公式推導(dǎo),來(lái)想一想fastText文本分類的核心思想是什么?

仔細(xì)觀察模型的后半部分,即從隱含層輸出到輸出層輸出,會(huì)發(fā)現(xiàn)它就是一個(gè)softmax線性多類別分類器,分類器的輸入是一個(gè)用來(lái)表征當(dāng)前文檔的向量;模型的前半部分,即從輸入層輸入到隱含層輸出部分,主要在做一件事情:生成用來(lái)表征文檔的向量。那么它是如何做的呢?疊加構(gòu)成這篇文檔的所有詞及n-gram的詞向量,然后取平均。疊加詞向量背后的思想就是傳統(tǒng)的詞袋法,即將文檔看成一個(gè)由詞構(gòu)成的集合。

于是fastText的核心思想就是:將整篇文檔的詞及n-gram向量疊加平均得到文檔向量,然后使用文檔向量做softmax多分類。這中間涉及到兩個(gè)技巧:字符級(jí)n-gram特征的引入以及分層Softmax分類。

4?關(guān)于分類效果

還有個(gè)問(wèn)題,就是為何fastText的分類效果常常不輸于傳統(tǒng)的非線性分類器?

假設(shè)我們有兩段文本:

我 來(lái)到 達(dá)觀數(shù)據(jù)

俺 去了 達(dá)而觀信息科技

這兩段文本意思幾乎一模一樣,如果要分類,肯定要分到同一個(gè)類中去。但在傳統(tǒng)的分類器中,用來(lái)表征這兩段文本的向量可能差距非常大。傳統(tǒng)的文本分類中,你需要計(jì)算出每個(gè)詞的權(quán)重,比如tfidf值, “我”和“俺” 算出的tfidf值相差可能會(huì)比較大,其它詞類似,于是,VSM(向量空間模型)中用來(lái)表征這兩段文本的文本向量差別可能比較大。

?

但是fastText就不一樣了,它是用單詞的embedding疊加獲得的文檔向量,詞向量的重要特點(diǎn)就是向量的距離可以用來(lái)衡量單詞間的語(yǔ)義相似程度,于是,在fastText模型中,這兩段文本的向量應(yīng)該是非常相似的,于是,它們很大概率會(huì)被分到同一個(gè)類中。

使用詞embedding而非詞本身作為特征,這是fastText效果好的一個(gè)原因;另一個(gè)原因就是字符級(jí)n-gram特征的引入對(duì)分類效果會(huì)有一些提升?。

?

NO.4 ?手寫一個(gè)fastText

?

?

keras是一個(gè)抽象層次很高的神經(jīng)網(wǎng)絡(luò)API,由python編寫,底層可以基于Tensorflow、Theano或者CNTK。它的優(yōu)點(diǎn)在于:用戶友好、模塊性好、易擴(kuò)展等。所以下面我會(huì)用keras簡(jiǎn)單搭一個(gè)fastText的demo版,生產(chǎn)可用的fastText請(qǐng)移步https://github.com/facebookresearch/fastText。

如果你弄懂了上面所講的它的原理,下面的demo對(duì)你來(lái)講應(yīng)該是非常明了的。

為了簡(jiǎn)化我們的任務(wù):

1. 訓(xùn)練詞向量時(shí),我們使用正常的word2vec方法,而真實(shí)的fastText還附加了字符級(jí)別的n-gram作為特征輸入;

2. 我們的輸出層使用簡(jiǎn)單的softmax分類,而真實(shí)的fastText使用的是Hierarchical Softmax。

首先定義幾個(gè)常量:

VOCAB_SIZE = 2000

EMBEDDING_DIM =100

MAX_WORDS = 500

CLASS_NUM = 5

VOCAB_SIZE表示詞匯表大小,這里簡(jiǎn)單設(shè)置為2000;

EMBEDDING_DIM表示經(jīng)過(guò)embedding層輸出,每個(gè)詞被分布式表示的向量的維度,這里設(shè)置為100。比如對(duì)于“達(dá)觀”這個(gè)詞,會(huì)被一個(gè)長(zhǎng)度為100的類似于[ 0.97860014, 5.93589592, 0.22342691, -3.83102846, -0.23053935, …]的實(shí)值向量來(lái)表示;

MAX_WORDS表示一篇文檔最多使用的詞個(gè)數(shù),因?yàn)槲臋n可能長(zhǎng)短不一(即詞數(shù)不同),為了能feed到一個(gè)固定維度的神經(jīng)網(wǎng)絡(luò),我們需要設(shè)置一個(gè)最大詞數(shù),對(duì)于詞數(shù)少于這個(gè)閾值的文檔,我們需要用“未知詞”去填充。比如可以設(shè)置詞匯表中索引為0的詞為“未知詞”,用0去填充少于閾值的部分;

CLASS_NUM表示類別數(shù),多分類問(wèn)題,這里簡(jiǎn)單設(shè)置為5。

模型搭建遵循以下步驟:

1.?添加輸入層(embedding層)。Embedding層的輸入是一批文檔,每個(gè)文檔由一個(gè)詞匯索引序列構(gòu)成。例如:[10, 30, 80, 1000] 可能表示“我 昨天 來(lái)到 達(dá)觀數(shù)據(jù)”這個(gè)短文本,其中“我”、“昨天”、“來(lái)到”、“達(dá)觀數(shù)據(jù)”在詞匯表中的索引分別是10、30、80、1000;Embedding層將每個(gè)單詞映射成EMBEDDING_DIM維的向量。于是:input_shape=(BATCH_SIZE, MAX_WORDS), output_shape=(BATCH_SIZE,MAX_WORDS, EMBEDDING_DIM);

2.?添加隱含層(投影層)。投影層對(duì)一個(gè)文檔中所有單詞的向量進(jìn)行疊加平均。keras提供的GlobalAveragePooling1D類可以幫我們實(shí)現(xiàn)這個(gè)功能。這層的input_shape是Embedding層的output_shape,這層的output_shape=( BATCH_SIZE, EMBEDDING_DIM);

3.?添加輸出層(softmax層)。真實(shí)的fastText這層是Hierarchical Softmax,因?yàn)閗eras原生并沒(méi)有支持Hierarchical Softmax,所以這里用Softmax代替。這層指定了CLASS_NUM,對(duì)于一篇文檔,輸出層會(huì)產(chǎn)生CLASS_NUM個(gè)概率值,分別表示此文檔屬于當(dāng)前類的可能性。這層的output_shape=(BATCH_SIZE, CLASS_NUM)

4.?指定損失函數(shù)、優(yōu)化器類型、評(píng)價(jià)指標(biāo),編譯模型。損失函數(shù)我們?cè)O(shè)置為categorical_crossentropy,它就是我們上面所說(shuō)的softmax回歸的損失函數(shù);優(yōu)化器我們?cè)O(shè)置為SGD,表示隨機(jī)梯度下降優(yōu)化器;評(píng)價(jià)指標(biāo)選擇accuracy,表示精度。

用訓(xùn)練數(shù)據(jù)feed模型時(shí),你需要:

1.?將文檔分好詞,構(gòu)建詞匯表。詞匯表中每個(gè)詞用一個(gè)整數(shù)(索引)來(lái)代替,并預(yù)留“未知詞”索引,假設(shè)為0;

2.?對(duì)類標(biāo)進(jìn)行onehot化。假設(shè)我們文本數(shù)據(jù)總共有3個(gè)類別,對(duì)應(yīng)的類標(biāo)分別是1、2、3,那么這三個(gè)類標(biāo)對(duì)應(yīng)的onehot向量分別是[1, 0,
0]、[0, 1, 0]、[0, 0, 1];

3.?對(duì)一批文本,將每個(gè)文本轉(zhuǎn)化為詞索引序列,每個(gè)類標(biāo)轉(zhuǎn)化為onehot向量。就像之前的例子,“我 昨天 來(lái)到 達(dá)觀數(shù)據(jù)”可能被轉(zhuǎn)化為[10, 30,
80, 1000];它屬于類別1,它的類標(biāo)就是[1, 0, 0]。由于我們?cè)O(shè)置了MAX_WORDS=500,這個(gè)短文本向量后面就需要補(bǔ)496個(gè)0,即[10, 30, 80, 1000, 0, 0, 0, …, 0]。因此,batch_xs的 維度為( BATCH_SIZE,MAX_WORDS),batch_ys的維度為(BATCH_SIZE, CLASS_NUM)。

下面是構(gòu)建模型的代碼,數(shù)據(jù)處理、feed數(shù)據(jù)到模型的代碼比較繁瑣,這里不展示。

?

NO.5 ?fastText在達(dá)觀數(shù)據(jù)的應(yīng)用

fastText作為誕生不久的詞向量訓(xùn)練、文本分類工具,在達(dá)觀得到了比較深入的應(yīng)用。主要被用在以下兩個(gè)系統(tǒng):

1. 同近義詞挖掘。Facebook開(kāi)源的fastText工具也實(shí)現(xiàn)了詞向量的訓(xùn)練,達(dá)觀基于各種垂直領(lǐng)域的語(yǔ)料,使用其挖掘出一批同近義詞;

2. 文本分類系統(tǒng)。在類標(biāo)數(shù)、數(shù)據(jù)量都比較大時(shí),達(dá)觀會(huì)選擇fastText 來(lái)做文本分類,以實(shí)現(xiàn)快速訓(xùn)練預(yù)測(cè)、節(jié)省內(nèi)存的目的。

?

?

總結(jié)

以上是生活随笔為你收集整理的中文词向量的训练的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。