spaCy文檔-03:詞向量和相似度

spaCy能夠比較兩個(gè)對(duì)象代乃,并預(yù)測它們的相似程度。 預(yù)測相似性對(duì)于構(gòu)建推薦系統(tǒng)或標(biāo)記重復(fù)項(xiàng)很有用。 例如颈渊,您可以建議與當(dāng)前正在查看的用戶內(nèi)容相似的用戶內(nèi)容,或者將支持憑單標(biāo)記為與現(xiàn)有內(nèi)容非常相似的副本终佛。

每個(gè)Doc俊嗽、Span和Token都有一個(gè).similarity()方法,它允許您將其與另一個(gè)對(duì)象進(jìn)行比較铃彰,并確定相似度绍豁。當(dāng)然,相似性總是主觀的——“狗”和“貓”是否相似取決于你如何看待它牙捉。spaCy的相似模型通常假定一個(gè)相當(dāng)通用的相似性定義妹田。

tokens = nlp(u'dog cat banana')

for token1 in tokens:
    for token2 in tokens:
        print(token1.similarity(token2))
1.png

在這種情況下,模型的預(yù)測是很準(zhǔn)確的鹃共。狗和貓非常相似鬼佣,而香蕉卻不是很相似。相同的標(biāo)記顯然是100%相似的(并不總是精確的1.0霜浴,因?yàn)橄蛄繑?shù)學(xué)和浮點(diǎn)數(shù)的不精確)晶衷。

相似性是通過比較詞向量或“詞嵌入”來確定的,即一個(gè)詞的多維意思表示阴孟。單詞向量可以通過像word2vec這樣的算法生成晌纫,通常是這樣的:

BANANA.VECTOR
array([2.02280000e-01,  -7.66180009e-02,   3.70319992e-01,
       3.28450017e-02,  -4.19569999e-01,   7.20689967e-02,
      -3.74760002e-01,   5.74599989e-02,  -1.24009997e-02,
       5.29489994e-01,  -5.23800015e-01,  -1.97710007e-01,
      -3.41470003e-01,   5.33169985e-01,  -2.53309999e-02,
       1.73800007e-01,   1.67720005e-01,   8.39839995e-01,
       5.51070012e-02,   1.05470002e-01,   3.78719985e-01,
       2.42750004e-01,   1.47449998e-02,   5.59509993e-01,
       1.25210002e-01,  -6.75960004e-01,   3.58420014e-01,
      -4.00279984e-02,   9.59490016e-02,  -5.06900012e-01,
      -8.53179991e-02,   1.79800004e-01,   3.38669986e-01,
       1.32300004e-01,   3.10209990e-01,   2.18779996e-01,
       1.68530002e-01,   1.98740005e-01,  -5.73849976e-01,
      -1.06490001e-01,   2.66689986e-01,   1.28380001e-01,
      -1.28030002e-01,  -1.32839993e-01,   1.26570001e-01,
       8.67229998e-01,   9.67210010e-02,   4.83060002e-01,
       2.12709993e-01,  -5.49900010e-02,  -8.24249983e-02,
       2.24079996e-01,   2.39749998e-01,  -6.22599982e-02,
       6.21940017e-01,  -5.98999977e-01,   4.32009995e-01,
       2.81430006e-01,   3.38420011e-02,  -4.88150001e-01,
      -2.13589996e-01,   2.74010003e-01,   2.40950003e-01,
       4.59500015e-01,  -1.86049998e-01,  -1.04970002e+00,
      -9.73049998e-02,  -1.89080000e-01,  -7.09290028e-01,
       4.01950002e-01,  -1.87680006e-01,   5.16870022e-01,
       1.25200003e-01,   8.41499984e-01,   1.20970003e-01,
       8.82389992e-02,  -2.91959997e-02,   1.21510006e-03,
       5.68250008e-02,  -2.74210006e-01,   2.55640000e-01,
       6.97930008e-02,  -2.22580001e-01,  -3.60060006e-01,
      -2.24020004e-01,  -5.36990017e-02,   1.20220006e+00,
       5.45350015e-01,  -5.79980016e-01,   1.09049998e-01,
       4.21669990e-01,   2.06619993e-01,   1.29360005e-01,
      -4.14570011e-02,  -6.67770028e-01,   4.04670000e-01,
      -1.52179999e-02,  -2.76400000e-01,  -1.56110004e-01,
      -7.91980028e-02,   4.00369987e-02,  -1.29439995e-01,
      -2.40900001e-04,  -2.67850012e-01,  -3.81150007e-01,
      -9.72450018e-01,   3.17259997e-01,  -4.39509988e-01,
       4.19340014e-01,   1.83530003e-01,  -1.52600005e-01,
      -1.08080000e-01,  -1.03579998e+00,   7.62170032e-02,
       1.65189996e-01,   2.65259994e-04,   1.66160002e-01,
      -1.52810007e-01,   1.81229994e-01,   7.02740014e-01,
       5.79559989e-03,   5.16639985e-02,  -5.97449988e-02,
      -2.75510013e-01,  -3.90489995e-01,   6.11319989e-02,
       5.54300010e-01,  -8.79969969e-02,  -4.16810006e-01,
       3.28260005e-01,  -5.25489986e-01,  -4.42880005e-01,
       8.21829960e-03,   2.44859993e-01,  -2.29819998e-01,
      -3.49810004e-01,   2.68940002e-01,   3.91660005e-01,
      -4.19039994e-01,   1.61909997e-01,  -2.62630010e+00,
       6.41340017e-01,   3.97430003e-01,  -1.28680006e-01,
      -3.19460005e-01,  -2.56330013e-01,  -1.22199997e-01,
       3.22750002e-01,  -7.99330026e-02,  -1.53479993e-01,
       3.15050006e-01,   3.05909991e-01,   2.60120004e-01,
       1.85530007e-01,  -2.40429997e-01,   4.28860001e-02,
       4.06219989e-01,  -2.42559999e-01,   6.38700008e-01,
       6.99829996e-01,  -1.40430003e-01,   2.52090007e-01,
       4.89840001e-01,  -6.10670000e-02,  -3.67659986e-01,
      -5.50890028e-01,  -3.82649988e-01,  -2.08430007e-01,
       2.28320003e-01,   5.12179971e-01,   2.78679997e-01,
       4.76520002e-01,   4.79510017e-02,  -3.40079993e-01,
      -3.28729987e-01,  -4.19669986e-01,  -7.54989982e-02,
      -3.89539987e-01,  -2.96219997e-02,  -3.40700001e-01,
       2.21699998e-01,  -6.28560036e-02,  -5.19029975e-01,
      -3.77739996e-01,  -4.34770016e-03,  -5.83010018e-01,
      -8.75459984e-02,  -2.39289999e-01,  -2.47109994e-01,
      -2.58870006e-01,  -2.98940003e-01,   1.37150005e-01,
       2.98919994e-02,   3.65439989e-02,  -4.96650010e-01,
      -1.81600004e-01,   5.29389977e-01,   2.19919994e-01,
      -4.45140004e-01,   3.77979994e-01,  -5.70620000e-01,
      -4.69460003e-02,   8.18059966e-02,   1.92789994e-02,
       3.32459986e-01,  -1.46200001e-01,   1.71560004e-01,
       3.99809986e-01,   3.62170011e-01,   1.28160000e-01,
       3.16439986e-01,   3.75690013e-01,  -7.46899992e-02,
      -4.84800003e-02,  -3.14009994e-01,  -1.92860007e-01,
      -3.12940001e-01,  -1.75529998e-02,  -1.75139993e-01,
      -2.75870003e-02,  -1.00000000e+00,   1.83870003e-01,
       8.14339995e-01,  -1.89129993e-01,   5.09989977e-01,
      -9.19600017e-03,  -1.92950002e-03,   2.81890005e-01,
       2.72470005e-02,   4.34089988e-01,  -5.49669981e-01,
      -9.74259973e-02,  -2.45399997e-01,  -1.72030002e-01,
      -8.86500031e-02,  -3.02980006e-01,  -1.35910004e-01,
      -2.77649999e-01,   3.12860007e-03,   2.05559999e-01,
      -1.57720000e-01,  -5.23079991e-01,  -6.47010028e-01,
      -3.70139986e-01,   6.93930015e-02,   1.14009999e-01,
       2.75940001e-01,  -1.38750002e-01,  -2.72680014e-01,
       6.68910027e-01,  -5.64539991e-02,   2.40170002e-01,
      -2.67300010e-01,   2.98599988e-01,   1.00830004e-01,
       5.55920005e-01,   3.28489989e-01,   7.68579990e-02,
       1.55279994e-01,   2.56359994e-01,  -1.07720003e-01,
      -1.23590000e-01,   1.18270002e-01,  -9.90289971e-02,
      -3.43279988e-01,   1.15019999e-01,  -3.78080010e-01,
      -3.90120000e-02,  -3.45930010e-01,  -1.94040000e-01,
      -3.35799992e-01,  -6.23340011e-02,   2.89189994e-01,
       2.80319989e-01,  -5.37410021e-01,   6.27939999e-01,
       5.69549985e-02,   6.21469975e-01,  -2.52819985e-01,
       4.16700006e-01,  -1.01079997e-02,  -2.54339993e-01,
       4.00029987e-01,   4.24320012e-01,   2.26720005e-01,
       1.75530002e-01,   2.30489999e-01,   2.83230007e-01,
       1.38820007e-01,   3.12180002e-03,   1.70570001e-01,
       3.66849989e-01,   2.52470002e-03,  -6.40089989e-01,
      -2.97650009e-01,   7.89430022e-01,   3.31680000e-01,
      -1.19659996e+00,  -4.71559986e-02,   5.31750023e-01], dtype=float32)

important note

為了使比較算法簡潔和快速,spaCy的小模型(所有以sm結(jié)尾的包)都不使用單詞向量永丝,而且這些sm包只包含上下文相關(guān)的向量锹漱。這意味著您仍然可以使用similarity()方法來比較文檔、span和token慕嚷,但是結(jié)果不會(huì)很好哥牍,單個(gè)token不會(huì)有任何指定的向量毕泌。所以為了使用真正的詞向量,你需要下載一個(gè)更大的模型:

python -m spacy download en_core_web_lg

內(nèi)置單詞向量的模型使它們成為可用的標(biāo)記嗅辣。Token.vector, Doc.vector, Span.vector撼泛。文本向量將默認(rèn)為它們的token向量的平均值。您還可以檢查一個(gè)token是否有分配的向量澡谭,并得到L2規(guī)范愿题,它可以用來使向量標(biāo)準(zhǔn)化。

nlp = spacy.load('en_core_web_lg')
tokens = nlp(u'dog cat banana sasquatch')

for token in tokens:
    print(token.text, token.has_vector, token.vector_norm, token.is_oov)
2.png

“dog”蛙奖、“cat”和“banana”在英語中都很常見潘酗,所以它們是模型詞匯的一部分,并且?guī)в幸粋€(gè)向量雁仲。另一方面仔夺,“sasquatch”這個(gè)詞不太常見,也不太常見——所以它的向量表示包含了300個(gè)0的維度伯顶,這意味著它實(shí)際上是不存在的囚灼。如果您的應(yīng)用程序需要包含更多向量的大型詞匯表,那么您應(yīng)該考慮使用一個(gè)較大的模型或裝入一個(gè)完整的向量包祭衩,例如灶体,en_vectors_web_lg,其中包含超過100萬個(gè)唯一的向量掐暮。

基于上下文的相似度

除了spaCy內(nèi)置的單詞向量蝎抽,還有一些根據(jù)上下文詞匯訓(xùn)練的一些向量,解析路克、標(biāo)記和NER模型也依賴于這種上下文中的單詞含義的向量表示樟结。當(dāng)處理管道被應(yīng)用時(shí),spaCy將文檔的內(nèi)部含義表示為浮點(diǎn)數(shù)組精算,也稱為張量瓢宦。這使得spaCy可以根據(jù)周圍的單詞對(duì)單詞的意思做出合理的猜測。即使spaCy以前沒有見過這個(gè)單詞灰羽,它也會(huì)有所了解驮履。因?yàn)閟paCy使用一個(gè)4層的卷積網(wǎng)絡(luò),所以張量對(duì)一個(gè)單詞的任意一邊的四個(gè)單詞都很敏感廉嚼。
例如玫镐,這里有三個(gè)句子,在不同的語境中包含了“l(fā)abrador”的單詞怠噪。

doc1 = nlp(u"The labrador barked.")
doc2 = nlp(u"The labrador swam.")
doc3 = nlp(u"the labrador people live in canada.")
#這邊需要注意的是恐似,導(dǎo)入模型不能是md,lg模型傍念,這兩個(gè)模型計(jì)算出來的三個(gè)結(jié)果是一樣

for doc in [doc1, doc2, doc3]:
    labrador = doc[1]
    dog = nlp(u"dog")
    print(labrador.similarity(dog))

盡管模型從來沒有見過“l(fā)abrador”這個(gè)詞矫夷,但它可以很準(zhǔn)確地預(yù)測它在不同情況下與“dog”的相似性葛闷。


3.png

整個(gè)文檔也一樣。 在這里口四,相似性的差異較小孵运,因?yàn)樗袉卧~及其順序都被考慮在內(nèi)秦陋。 但是蔓彩,特定于上下文的相似性通常仍然非常準(zhǔn)確地反映出來。

doc1 = nlp(u"Paris is the largest city in France.")
doc2 = nlp(u"Vilnius is the capital of Lithuania.")
doc3 = nlp(u"An emu is a large bird.")

for doc in [doc1, doc2, doc3]:
    for other_doc in [doc1, doc2, doc3]:
        print(doc.similarity(other_doc))

即使關(guān)于巴黎和維爾紐斯的句子由不同的詞匯和實(shí)體組成驳概,它們都描述了相同的概念赤嚼,并被認(rèn)為比關(guān)于ems的句子更相似。 在這種情況下顺又,即使拼寫錯(cuò)誤的“維爾紐斯”版本仍然會(huì)產(chǎn)生非常相似的結(jié)果更卒。


4.png

由相同單詞組成的句子可能會(huì)被認(rèn)為是非常相似的,但永遠(yuǎn)不會(huì)完全相同稚照。

docs = [nlp(u"dog bites man"), nlp(u"man bites dog"),
        nlp(u"man dog bites"), nlp(u"dog man bites")]

for doc in docs:
    for other_doc in docs:
        print(doc.similarity(other_doc))

有趣的是蹂空,“人咬狗”和“狗咬人”被認(rèn)為比“人咬狗”和“狗咬人”更相似。這可能是一個(gè)巧合——或者是“人”被解釋為兩個(gè)句子的主語的結(jié)果果录。


5.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末上枕,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子弱恒,更是在濱河造成了極大的恐慌辨萍,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件返弹,死亡現(xiàn)場離奇詭異锈玉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)义起,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門拉背,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人默终,你說我怎么就攤上這事椅棺。” “怎么了穷蛹?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵土陪,是天一觀的道長。 經(jīng)常有香客問我肴熏,道長鬼雀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任蛙吏,我火速辦了婚禮源哩,結(jié)果婚禮上鞋吉,老公的妹妹穿的比我還像新娘。我一直安慰自己励烦,他們只是感情好谓着,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坛掠,像睡著了一般赊锚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上屉栓,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天舷蒲,我揣著相機(jī)與錄音,去河邊找鬼友多。 笑死牲平,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的域滥。 我是一名探鬼主播纵柿,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼启绰!你這毒婦竟也來了昂儒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤酬土,失蹤者是張志新(化名)和其女友劉穎荆忍,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撤缴,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刹枉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了屈呕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片微宝。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖虎眨,靈堂內(nèi)的尸體忽然破棺而出蟋软,到底是詐尸還是另有隱情,我是刑警寧澤嗽桩,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布岳守,位于F島的核電站,受9級(jí)特大地震影響碌冶,放射性物質(zhì)發(fā)生泄漏湿痢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望譬重。 院中可真熱鬧拒逮,春花似錦、人聲如沸臀规。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽塔嬉。三九已至玩徊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間邑遏,已是汗流浹背佣赖。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國打工恰矩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留记盒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓外傅,卻偏偏與公主長得像纪吮,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子萎胰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349