Share
Embed
Transcript
53 slides
-
ΞδΣϯμɺରͱ͢Δํ • ΞδΣϯμ – ઢܗͷجૅɺࣗવݴޠॲཧɺϓϩάϥϛϯάŋŋŋ – ্هΛֶతࢹ࠲ͱϓϩάϥϛϯά ϓϩάϥϚ తࢹ࠲Ͱݟ͍ͯ͘ •
ओʹରͱ͢Δํ – 8FCϓϩάϥϚͷํ – ֶʹৄ͍͠ํͰϓϩάϥϛϯάʹڵຯ͕͋Δํ – ࣗવݴޠॲཧใݕࡧɺϦίϝϯυΤϯδϯʹڵຯ͕͋Δํ -
ϕΫτϧ • ֶߍͰशͬͨҹͷϕΫτϧŋŋŋزԿϕΫτϧ – ํΛ࣋ͬͨྔ • ෳͷΛηοτͰදͨ͠ྔͱͯ͠ͷϕΫτϧŋŋŋతදݱ – ͭͷͳΒ࣍ݩ
– ͭͷͳΒ࣍ݩ – ສͷͳΒສ࣍ݩ a = 2 4 ⎡ ⎣ ⎢ ⎤ ⎦ ⎥ b = 2 4 1 ⎡ ⎣ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ -
ϓϩάϥϛϯάతͳࢹ࠲ͩͱŋŋŋ • εΧϥʔʹର͢ΔϦετ ྻ – ϓϩάϥϛϯάʹ͓͚Δ୯Ұͷ εΧϥʔ Λ·ͱΊͯѻ͏σʔλߏ ŋŋŋϦετɺྻ
– ϕΫτϧŋŋŋෳͷΛηοτͰѻ͏σʔλߏɺΈ͍ͨͳͷͱࢥ ͍͍͑ -
ϞσϧԽˠϕΫτϧͰදݱ • 5PCFPSOPUUPCFUIBUJTUIFRVFTUJPO – ͜ͷจॻΛ୯ޠͷग़ݱස 5FSN'SFRVFODZŋŋŋ5' ͰϞσϧԽ ୯७Խ ͢Δ –
લޙͷจ຺ߟྀͤͣɺ୯ޠΛାʹ์ΓࠐΉͷͰ#BHPG8PSETͱݺΕΔ • UPŋŋŋ • CFŋŋŋ • PSŋŋŋ • OPUŋŋŋ • UIBUŋŋŋ • JTŋŋŋ • UIFŋŋŋ • RVFTUJPOŋŋŋ d 1 = 2 2 1 1 1 1 1 1 ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ to be or จॻϕΫτϧ -
ϕΫτϧˠྻ d 1 = 2 2 1 1 1 1
1 1 ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ const d1 = [ 2, 2, 1, 1, 1, 1, 1, 1 ] console.log(d1[0]) // 2 -
• จॻΛϕΫτϧͱͯ͠දݱ • ࣙॻͷ୯ޠΛͱ͢Δແݶ࣍ݩϕΫτϧ Antony and Cleopatra Julius Caesar The
Tempest Hamlet Othello Macbeth Antony 157 73 0 0 0 0 Brutus 4 157 0 1 0 0 Caesar 232 227 0 2 1 1 Calpurnia 0 10 0 0 0 0 Cleopatra 57 0 0 0 0 0 mercy 2 0 3 5 5 1 worser 2 0 1 1 1 0 d1 จॻͷϕΫτϧԽ source: Introduc.on to Informa.on Retrieval h7p://nlp.stanford.edu/IR-book/ -
ൺֱํ๏ŋŋŋྫ͑ɺίαΠϯྨࣅ • ϕΫτϧͷྨࣅŋŋŋϕΫτϧ͕࡞ΔDPTВΛٻΊΔࣜʹ͍͠ – ͔͚ࢉͷූ߸ΛݟΕͱͷྨࣅ͕Θ͔Δ • BYCͷ݁Ռ͕ਖ਼ͳΒɺೋͭಉ • BYCͷ݁Ռ͕ෛͳΒɺೋͭٯ͖
ରͷੑ࣭ • BYCͷ݁Ռ͕ͳΒɺൺֱରͱͯ͠ෆత֬ – ϕΫτϧͷੵϕΫτϧͷ͝ͱʹֻ͚ͯ͠ࢉͯ͠Δ͚ͩ • BɾCB C B C B C ŋŋŋ • ੵ͕ਖ਼ͳΒಉɺෛͳΒٯ – ༨ݭఆཧ cosθ = a⋅b a b 参考: 「相関係数とは何か?」を 体系的に理解するための6ステップ h7p://language-and-engineering.hatenablog.jp/entry/20090128/1233151846 -
ͭͷখઆͷޠͷUG w 4FOTFBOE4FOTJCJMJUZ w 1SJEFBOE1SFKVEJDF w 8VUIFSJOH)FJHIUT ϕΫτϧͰਖ਼نԽ 4B4ɾ1B1 4B4ɾ8) 㱤4B4ʹ͍ۙͷ8)ΑΓ1B1 ྫ source:
Introduc.on to Informa.on Retrieval p.112 -
ϓϩάϥϜ +BWB4DSJQU ʹ͢Δͱ const _ = require('lodash') // 文書をベクトル (配列)
で表現する。TFをベクトル長で正規化した値 const docs = { sas: [0.996, 0.087, 0.017], pap: [0.993, 0.120, 0], wh: [0.847, 0.466, 0.254] } // 2ベクトルのコサイン類似度を計算 function sim(d1, d2) { // 各成分の掛け算 (zipWith で * ) を累積 (sum) return _.sum(_.zipWith(d1, d2, (a, b) => { return a * b })) } console.log(sim(docs.sas, docs.pap)) // 0.999 console.log(sim(docs.sas, docs.wh)) // 0.888 -
ֶ͔ΒϓϩάϥϛϯάŋŋŋϕΫτϧԽ˰σʔλߏ • จॻΛϕΫτϧʹ • ϕΫτϧʹ͢Δ͜ͱͰԋࢉͷೖΓޱ͕։͘ – ϕΫτϧۭؒϞσϧ – ϕΫτϧԽͷͨΊͷ୯७ͳख๏ŋŋŋ#BHPG8PSET 5'
5'*%' • ϕΫτϧΛྻͱ͍͏σʔλߏͰѻ͍ΞϧΰϦζϜΛద༻ – ΞϧΰϦζϜŋŋŋίαΠϯྨࣅ -
ҎԼಉ͡ૢ࡞Λ͍ͯ͠Δ • ϓϩάϥϛϯά – σʔλߏʹରͯ͠ԋࢉΛఆٛ͢Δ – ରΛσʔλߏʹམͱ͠ࠐΉ͜ͱ͕Ͱ͖Εɺͦͷԋࢉ͕͑Δ • ֶ –
ϕΫτϧߦྻͱ͍͏ߏʹϞσϧԽ͢Δ – ϕΫτϧߦྻͷԋࢉ͕͑Δ ྆ऀΛڮͨ͠͠ͷ͕ɺ ϕΫτϧˠྻͰͷ දݱ -
ҎԼಉ͡ • ʹΑΔநԽ – ݸͷͱݸͷΛ͠ࢉͨ͠Γֻ͚ࢉͨ͠Γŋŋŋͱߟ͑Δͱେ ม͕ͩŋŋŋ – ͦΕͧΕBɺCͱ͍͏ϕΫτϧͰմͱͯ͠දݱ͢ΔͱB CɺBɾCͱ ୯७Խ͢Δ͜ͱ͕Ͱ͖Δ
• ϓϩάϥϛϯάʹ͓͚ΔநԽ – ͨ͘͞ΜͷύϥϝʔλΛ࣋ͬͨσʔλಉ࢜ͷԋࢉΛݸผʹߟ͑Δͱେ ม͕ͩŋŋŋ – ಉҰίϯςΩετͷσʔλɺσʔλߏΦϒδΣΫτͱͯ͠մͱ ͯ͠දݱ͠ɺσʔλߏͷԋࢉɺΦϒδΣΫτͷ૬ޓ࡞༻ͱͯ͠ߟ ͑Δͱ୯७͔Ͱ͖Δ -
ߦྻ • ߦྻŋŋŋෳͷϕΫτϧΛ·ͱΊͯѻ͏͜ͱ͕Ͱ͖Δ • จॻू߹Λߦྻͱ͍͏ҰͭͷͰදݱͰ͖Δ D = 0.996 0.993 0.847
0.087 0.120 0.466 0.017 0 0.254 ⎡ ⎣ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ ୯ޠจॻߦྻ ֤ߦɺ֤ྻϕΫτϧ -
ߦྻͨͱ͑ೋ࣍ݩྻͰදݱͰ͖Δ D = 0.996 0.993 0.847 0.087 0.120 0.466 0.017
0 0.254 ⎡ ⎣ ⎢ ⎢ ⎢ ⎤ ⎦ ⎥ ⎥ ⎥ const documentMatrix = [ [0.996, 0.993, 0.847], [0.087, 0.120, 0.466], [0.017, 0 , 0.254] ] -
ߦྻΛରʹͨ͠ܭࢉ • ߦྻʹ͢Δ͜ͱͰɺߦྻΛରʹͨ͠ܭࢉ͕͑Δ • ྫŋŋŋಛҟղ 4JOHMVBS7BMVF%FDPNQPTJUJPOŋŋŋ47% C =UΣVT source:
Introduc.on to Informa.on Retrieval p.377 h7p://nlp.stanford.edu/IR-book/pdf/18lsi.pdf ・・・ C の自己相関行列の固有ベクトルを用いて分解。Σに特異値 -
ͭ·Γŋŋŋ • ֶతʹŋŋŋ – จॻ܈Λ୯ޠจॻߦྻͱͯ͠දݱ͢Δ – ߦྻͱͯ͠දݱͰ͖Ε47%ͰղͰ͖Δ – 47%Ͱղ͢Δͱɺಛҟ͕ɻಛҟͰϥϯΫۙࣅͳͲ͕Ͱ͖Δ •
ϓϩάϥϜతʹŋŋŋ – ୯ޠจॻߦྻΛ࣍ݩྻͱͯ͠දݱ͢Δ – 47%ͷܭࢉΛద༻͢Δ – ϥϯΫۙࣅΛ͢Δ͜ͱͰܭࢉྔΛݮΒͨ͠Γɺ࣍ݩѹॖͨ͠Γ͢Δ͜ͱ͕Ͱ͖Δ -
1ZUIPOͷOVNQZͰ47% > import numpy as np # 行列を二次元配列で > A
= np.array([[1, 0, 2], [0, 1, 0], [1, 0, 2]]) > A array([[1, 0, 2], [0, 1, 0], [1, 0, 2]]) # SVD を計算 > U, s, V = np.linalg.svd(A) > U array([[ -7.07106781e-01, -1.57009246e-16, -7.07106781e-01], [ 0.00000000e+00, 1.00000000e+00, 0.00000000e+00], [ -7.07106781e-01, 1.57009246e-16, 7.07106781e-01]]) > s array([ 3.16227766e+00, 1.00000000e+00, 4.24340278e-17]) > V array([[-0.4472136 , 0. , -0.89442719], [ 0. , 1. , 0. ], [ 0.89442719, 0. , -0.4472136 ]]) -
જࡏతҙຯΠϯσΫγϯά -BUFOU4FNBOUJD*OEFYJOH • จॻϕΫτϧۭؒͷ࣍ݩΛѹॖ͢Δ – ʮDBSʯͰݕࡧͨ͠ΒʮBVUPNPCJMFʯώοτ͢ΔΑ͏ʹ – 47%ͰߦྻΛղ͠ɺಛҟʹԠͯ͡ߦྻͷ֊ΛԼ͛Δ –
ϕΫτϧۭ͕ؒ࣍ݩͷۭؒʹࣹӨ͞ΕΔɻ͜ͷͱ͖୯ޠͷજࡏతҙຯ͕ ѹॖ͞ΕΔ • $6Є7UͷЄΛߏ͢Δಛҟͷ͏͕ͪখ͞ͳΛʹ – ϥϯΫ ֊ ͕Լ͕Δجఈͷ͕ݮΔ • ЄˠЄ L • $ L 6Є L 7U – ॏཁͳجఈ͚ͩΛͯ͠খ͞ͳߦྻʹۙࣅͨ͜͠ͱʹͳΔ – খ͘͞ͳͬͨ$ L ʹɺ͍ͭͷίαΠϯྨࣅͳͲ -
͍͜͠ͱΛ͍Ζ͍Ζड़·͕ͨ͠ŋŋŋ • ࣗવݴޠˠߦྻˠֶˠσʔλߏ ೋ࣍ݩྻ ˠΞϧΰϦ ζϜ – จॻΛ୯ޠϕΫτϧͰදݱ͠ɺϕΫτϧͷू߹ΛߦྻͰදݱ͢Δ – ͢Δͱɺ-4*ͷΑ͏ͳख๏ΛͬͯྨࣅจॻΛൃݟͨ͠ΓͰ͖Δ
• ϥΠϒϥϦ -4* ͕ཁٻ͢Δσʔλߏ ୯ޠจॻߦྻ Λೖྗͯ͠ ݁ՌΛಘͨɺΈ͍ͨͳײ͡ ࡶ -
/.' /POOFHBUJWF.BUSJY'BDUPSJ[BUJPO • ඇෛߦྻΛͭͷඇෛߦྻʹҼࢠղ͢ΔΞϧΰϦζϜ – Ͳ͏ͬͯղ͢Δ͔ޙड़ • ͱͷߦྻ͕࣋ͭજࡏཁૉ ಛ
ΛᖰΓग़͢ X = WF = x 文書 単語 文書 特徴 特徴 単語 X W F ಛ͕จॻʹରͯ͠Ͳ ͷఔॏཁ͔ͷॏΈ ୯ޠ͕ಛʹରͯ͠Ͳ ͷఔॏཁ͔ͷॏΈ -
/.'ͰςΩετϚΠχϯά • ΫΤϦ ୯ޠͷू߹ ͔Βؔ࿈͢ΔจॻΛಘ͍ͨͳΒŋŋŋ – '͔Β୯ޠू߹ͱద߹͢ΔಛϕΫτϧ ߦ ΛಘΔ –
࣍ʹ8͔ΒಛϕΫτϧʹద߹͢ΔߦΛબͿ = x 文書 単語 文書 特徴 特徴 単語 X W F ୯ޠ͕ಛʹରͯ͠Ͳ ͷఔॏཁ͔ͷॏΈ ಛ͕จॻʹରͯ͠Ͳ ͷఔॏཁ͔ͷॏΈ -
ҼࢠղͷΓํ • 98'ͷ8ɺ'ͷશཁૉΛϥϯμϜͳਖ਼ͷͰຒΊΔ • શཁૉΛߋ৽͠ͳ͕Β෮ܭࢉ • ཁૉͷͷߋ৽ͷͨͼɺ9ͱ8'ͷڑΛܭࢉ – ڑŋŋŋೋޡࠩ,-μΠόʔδΣϯε •
ڑ͕ʹͳΔ͔ɺ༧ΊܾΊͨճ͚ͩߋ৽ΛߦͬͨΒऴΘΓ -
୯ޠYจॻҎ֎ʹ • ΛߦɺྻʹങͬͨϢʔβʔɺཁૉ͕ߪೖ͔ͨ͠Ͳ͏͔ – ͷϨίϝϯυ – ࣅͨΑ͏ͳΛങͬͯΔϢʔβʔͷϨίϝϯυ • ۂΛߦɺྻʹϢʔβʔɺཁૉ͕ϨϏϡʔͷ –
ಉ͡Α͏ͳϢʔβʔಉ͡Α͏ͳۂΛΉˠۂͷϨίϝϯυ ͦͷଞख๏Ͱߟ͑ํҰॹ ϕΫτϧߦྻʹͯ͠ɺͦΕΛର ʹܭࢉͰϨίϝϯυ -
(PPHMFͷ1BHF3BOL • ΣϒάϥϑΛߦྻͱͯ͠දݱ͠ɺߦྻͷओݻ༗ϕΫτϧΛٻΊΔ – ཁૉ͕ϦϯΫΛḷΔ֬ɻ֬ߦྻ – ݻ༗ϕΫτϧŋŋŋઢܗมͷಛΛද͢ϕΫτϧ – ओݻ༗ϕΫτϧࢉग़͖ଇʹΑΓܭࢉྔΛݮͰ͖Δ –
ओݻ༗ϕΫτϧͷ͕ɺΫΤϦʹର͢Δจॻͷద߹ 1BHF3BOL ※ 現在の検索アルゴリズムは単純な PageRank のみよりも遙かに複雑な計算が行われています -
ઢܗͷ͕ओͰ͕ͨ͠ŋŋŋ • ͨͱ͑ɺରΛ֬Ͱදݱ͢Δ㱺֬౷ܭֶతͳख๏ΛԠ ༻Ͱ͖Δ • ࣗવݴޠॲཧͳΒŋŋŋྫ֬తݴޠϞσϧ Md1 d1 Md2 d2
Mdn d2 ・・・ 文書コレクション (M はモデル) クエリ 情報要求 ) | ( d M Q P 生成 -
8PSE7FDͷੑ࣭ • 8PSE7FDͷϕΫτϧۭؒʹݴ༿ͷʮҙຯʯΛతʹදݱ͠ ͍ͯΔ͔ͷΑ͏ͳੑ࣭ source: 米googleの研究者が開発したWord2Vecで自然言語処理 h7p://qiita.com/okappy/items/e16639178ba85edfee72 > イチロー -
野球 + 本田 サッカー 0.612238 初戦 0.588327 バスケ 0.562973 > 日本 - 東京 + フランス 札幌 0.569258 パリ 0.566437 ミラノ 0.560036 > ご飯 - 卵 + そば 鶏 0.686967 ネギ 0.670782 塩 0.663107 ୯ޠϕΫτϧͷՃࢉɺ ݮࢉ͕ఆٛ͞Ε͍ͯΔ -
8PSE7FD͔Β%PD7FDɺ*UFN7FD • ࢄදݱΛԠ༻ – 8PSE7FDͷ୯ޠࢄදݱͰจॻϕΫτϧΛߏஙˠ%PD7FD – ࢄදݱͰ*UFN FUD Λߏஙˠਪનɺྨ –
σΟʔϓϥʔχϯάͷૉੑʹ͑ΔͨΊେਓؾ • ྫϦΫϧʔτςΫϊϩδʔζాࢯ IUUQXXXTMJEFTIBSFOFUSFDSVJUDPKQTT – ߦಈϩάΛ୯ޠͱΈͳ͠8PSE7FDͰϕΫτϧԽɺίαΠϯྨࣅͰ Ϩίϝϯυͨ͠ͱ͜Ζਫ਼্͕ݟΒΕͨͱͷ͜ͱ -
ϕΫτϧԽΛߟ͑Δ • #BHPG8PSETͰ୯ޠεΧϥʔ – จॻϕΫτϧŋŋŋ୯ޠ εΧϥʔ ͷू߹ŋŋŋ୯ޠͷྻ – ϓϩάϥϛϯάతࢹ࠲ŋŋŋྻͱ͍͏ɺϓϦϛςΟϒͳσʔλߏ
• 8PSE7FDͰ୯ޠࢄදݱ – ΑΓෳࡶͳߏ – ϓϩάϥϛϯάతࢹ࠲ŋŋŋΑΓߴͳσʔλߏ -
͔ͭͯͷֶͱ·ͬͨ͘ҟͳΔҹ • ֶֶ͕ੜͷͱ͖ʹ৮Εͨͷͱશ͘ผͷֶʹײͨ͡ – ܭࢉී௨ͷࢉज़ͰʹΑͬͯߦΘΕɺֶऀͷؒͰจࣈʹ ΑͬͯߦΘΕΔɻ͍ͣΕಉ͡ݪཧͷ্ʹ͖͔ͣΕ͓ͯΓɺಉ͡త Λ͍ͬͯΔ͕ɺࢉज़ҰఆͰಛघͰ͋ΓɺෆఆͰීวతͰ͋ Δ – ΛͨͩͳΒΔ͚ͩͰɺ͜ͱ৽͘͠ߦྻͱ͍͏ͷΛߟ͑Δޮೳ
ͳ͍ɻߦྻͲ͏͠ͷ͍͋ͩʹ͏·͘ Y ×ͷԋࢉΛߟ͑ΔΑ͏ʹ ͳͬͯɺ͡ΊͯߦྻͷҖྗ͕Θ͔ͬͯ͘ΔͷͰ͋Δ -
ϓϩάϥϛϯάͱͷطࢹײ • ϕΫτϧɺߦྻŋŋŋ – ʮΛ·ͱΊ͔ͯ͋ͭ͏ŋŋŋ͜Εσʔλߏͷ͜ͱͩΘʯ • " #͕ͨͩͷͰͳ͘ߦྻͱ͍͏ෳࡶͳߏΛͬͨͷΈ ߹ΘͤͰ͋ͬͯɺ" #ɺ"#ɺ"#ͱ͔͚ɺ͔͋ͨࠓ·Ͱͷ
Ͱ͋Δ͔ͷΑ͏ʹߟ͑ͯɺࣅͨΑ͏ͳํ๏Ͱܭࢉ͕Ͱ͖ΔΘ͚Ͱ ͋Δ – ҟͳΔσʔλߏʹಉ͡ΠϯλϑΣʔε ܭࢉ Λఆٛ͢ΕͦΕΒ ΛಉҰࢹͰ͖Δ – ʮ͜ΕμοΫλΠϐϯά ϙϦϞʔϑΟζϜ ͩɻͦ͏͔ɺநԽ͔ʯ -
ࣗʹͱͬͯͷϓϩάϥϛϯάͱֶͷɺͦͷೖΓޱ • ରͷͷσʔλߏΛଊ͑Δ ϞσϧԽ • ϕΫτϧɺߦྻŋŋŋˠֶ ઢܗFUD ͷ͕։͘ •
ֶͷੈքΛඈͤɺ૾ྗͷݶքΛಥഁͰ͖Δ – ສ࣍ݩͷϕΫτϧۭؒ૾Ͱ͖ͳ͍͕ɺֶͳΒͦΕΛѻ͏͜ ͱ͕Ͱ͖Δ -
·ͱΊ ݴ͍͔ͨͬͨ͜ͱ • ϓϩάϥϛϯάͱֶͷࢥͬͯΔΑΓ͘͠ͳ͍ – ࠓճઢܗΛςʔϚʹ – ֩ʹͳΔͷσʔλߏ ϕΫτϧɺߦྻ
– ϓϩάϥϛϯάͱֶͷੈքΛڮ͢͠Δͷ͕Ϟσϧ • 8FCϓϩάϥϚతͳʮৄࡉΑ͘Θ͔Βͳ͍͚Ͳ"1*ݺ݁Ռ खʹೖΔͰ͠ΐʯͰ࠷ॳ͍͍ͱࢥ͏ – ͦΕ͕͖͔͚ͬʹͳͬͯɺࣝཉ͕͘ • ֶੜͷͱ͖ʹֶͬͨ ܭࢉͷ܇࿅ ΑΓɺڵຯ͕࣋ͯΔͣ -
ࢀߟจݙ • $%.BOOJOH 13BHIBWBO )4DIVU[Fʰ*OUSPEVDUJPOUP *OGPSNBUJPO3FUSJFWBMʱ $BNCSJEHF6OJWFSTJUZ1SFTT • 5PCZ4FHSBO
ஶ ᙛࢁਔ݈ יᖒᚸ ༁ ʰू߹ϓϩάϥ ϛϯάʱ ΦϥΠϦʔδϟύϯ • ۚ୩݈Ұʰ͜ΕͳΒ͔ΔԠ༻ֶڭࣨʕ࠷খೋ๏͔ΒΣʔϒ Ϩοτ·Ͱʱ ڞཱग़൛ • ԕࢁܒʰֶೖ্ʱ ؠ৽ॻ • ԕࢁܒʰֶೖԼʱ ؠ৽ॻ