Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
NGT-ONNGによる近似最近傍探索
Search
po3rin
May 31, 2021
Programming
0
80
NGT-ONNGによる近似最近傍探索
po3rin
May 31, 2021
Tweet
Share
More Decks by po3rin
See All by po3rin
M3におけるCI/CDパイプラインを新鮮に保つ仕組み
po3rin
0
300
Go Templateを使った フロントエンド開発を採用した 経緯と所感
po3rin
1
310
検索基盤移行時の思考
po3rin
0
4.2k
Go1.19で採用された Pattern-defeating Quicksort の紹介
po3rin
7
5.7k
Elasticsearchを負荷から守るesguard
po3rin
0
260
Sudachi×Elasticsearchへの移行と医療検索システム精度改善
po3rin
1
860
eskeeperを使ったファイル定義によるindex管理
po3rin
2
480
M3 情報検索/推薦論文輪読会 ~SIGIR祭~ (SIGIR2021: Session 6D – IR Models)
po3rin
0
96
Handling Temporal Query for Health Search with ja-timex
po3rin
3
320
Other Decks in Programming
See All in Programming
一休.com のログイン体験を支える技術 〜Web Components x Vue.js 活用事例と最適化について〜
atsumim
0
520
動作確認やテストで漏れがちな観点3選
starfish719
6
1k
Rubyで始める関数型ドメインモデリング
shogo_tksk
0
110
Spring gRPC について / About Spring gRPC
mackey0225
0
220
技術を根付かせる / How to make technology take root
kubode
1
250
ソフトウェアエンジニアの成長
masuda220
PRO
11
1.6k
お前もAI鬼にならないか?👹Bolt & Cursor & Supabase & Vercelで人間をやめるぞ、ジョジョー!👺
taishiyade
6
4k
『GO』アプリ バックエンドサーバのコスト削減
mot_techtalk
0
140
なぜイベント駆動が必要なのか - CQRS/ESで解く複雑系システムの課題 -
j5ik2o
11
4k
Introduction to kotlinx.rpc
arawn
0
700
責務と認知負荷を整える! 抽象レベルを意識した関心の分離
yahiru
4
600
パスキーのすべて ── 導入・UX設計・実装の紹介 / 20250213 パスキー開発者の集い
kuralab
3
790
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
330
Unsuck your backbone
ammeep
669
57k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
114
50k
Build The Right Thing And Hit Your Dates
maggiecrowley
34
2.5k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
9
450
Embracing the Ebb and Flow
colly
84
4.6k
VelocityConf: Rendering Performance Case Studies
addyosmani
328
24k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
10
1.3k
Designing for Performance
lara
604
68k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
550
Transcript
M3 ใݕࡧจಡΈձ #2 hiromu-nakamura @po3rin 3FBEJOHQBQFSl0QUJNJ[BUJPOPG*OEFYJOH#BTFEPOL /FBSFTU/FJHICPS(SBQIGPS1SPYJNJUZ4FBSDIJO)JHI EJNFOTJPOBM%BUBz /(50//(ʹΑΔۙࣅ࠷ۙ୳ࡧ
தଜ߂ ΤϜεϦʔͷ"*ɾػցֶशνʔϜͰݕࡧج൫पΓ Λ୲͍ͯ͠Δɻ(P͕͖ɻ ֤छΞΧϯτQPSJOͰͬͯ·͢ɻ )*SPNV/BLBNVSB
$POUFOUT *OUSPEVDUJPOdϕϯνϚʔΫ͔ΒݟΔ"//ͷݱঢ়d /(50//(3FMBUFE8PSL /(50//( ͓·͚
*OUSPEVDUJPO dϕϯνϚʔΫ͔ΒݟΔ"//ͷݱঢ়d
"// ߴ࣍ݩͷϕΫτϧۭؒͰσʔλͷ࠷ۙΛݕࡧ͢Δ͜ͱॏཁͳλεΫͰ͋Δɻ ը૾σʔληοτ͔Βྨࣅͨ͠ը૾Λݟ͚ͭΔ ใݕࡧͰɺςΩετຒΊࠐΈΛ༻ͯ͠ɺྨࣅهࣄΛࢀর͢Δ ಛʹਂֶशϞσϧͷ࣍ݩ૿Ճ͢Δ͕͋ΔͨΊɺඦສΛ͑Δߴ࣍ݩ ϕΫτϧΛݕࡧ͢Δඞཁ͕͋Γɺۙࣅ࠷ۙ୳ࡧ BQQSPYJNBUFOFBSFTU OFJHICPS "//
ݕࡧํ๏ओྗɻ
"// ఏҊ͞Ε͍ͯΔ࠷ۙݕࡧํ๏ଟଘࡏ IOTX GBJTT 'BDFCPPL ONTMJC લճՏ߹͞Μ͕༻
qBOO 0QFO$7Ͱ࣮͞Ε͍ͯΔ &UDʜ ࠷ۙ୳ࡧͷϕϯνϚʔΫΛߦ͏ϓϩδΣΫτʮ#FODINBSLJOHOFBSFTUOFJHICPSTʯ <>Ͱ֤ख๏ΛλεΫ͝ͱʹൺֱՄೳɻ <>IUUQTHJUIVCDPNFSJLCFSOBOOCFODINBSLT
"// ͳʹΒ:BIPP+"1"/ΒʹΑͬͯ/(5ͱ͍͏ͷ͕ੈքτοϓϨϕϧୡͨ͠Β͍͠<> <>IUUQTUFDICMPHZBIPPDPKQFOUSZ
#FODINBSLJOHOFBSFTUOFJHICPST <>IUUQTHJUIVCDPNFSJLCFSOBOOCFODINBSLT
#FODINBSLJOHOFBSFTUOFJHICPST <>IUUQTHJUIVCDPNFSJLCFSOBOOCFODINBSLT
IUUQTBSYJWPSHBCT Αͬͯࠓճͷจ /(5 /FJHICPSIPPEHSBQIBOEUSFF ͷจ
/(50//(3FMBUFE8PSL d/(50//(ొ·ͰͷܦҢΛ͓͑͞Δd
3FMBUFE8PSL ࠷ۙ୳ࡧɺπϦʔϕʔεͱάϥϑϕʔεʹେ͖͘ྨ͞ΕΔɻଠࣈ/(5ʹ࣮͞Ε͍ͯΔΞϧΰϦζϜɻ ˙πϦʔϕʔε LEUSFF "// LEπϦʔʹۙࣅݕࡧΛద༻͢Δํ๏ '-"// ෳͷLEπϦʔ͕ฒߦͯ͠ݕࡧ͞ΕΔϥϯμϜԽ͞ΕͨLEπϦʔ
˙άϥϑϕʔε )/48 ۙࣅۙάϥϑʹϨΠϠʔͷ֓೦Λಋೖ "//( ۙࣅ,//( 1"//( ΫΤϦ࣌ؒΛॖ͢ΔͨΊʹ"//(ͷ֤ϊʔυͷΤοδΛআ͢Δ 0//( ϕϯνϚʔΫτοϓϨϕϧ
"//( ϊʔυʹLݸͷ࠷ۙϊʔυͷ࿈Λߦ͏άϥϑɻ ࿈݁άϥϑΛอূ͠ͳ͍ͷͰ͞Εͨάϥϑ͕ൃੜ͢Δ ਤ ɻ L//( "//(<>ϊʔυͣͭແΤοδͰஞ࣍తʹ࿈݁͢Δ͜ͱͰ࿈݁άϥϑΛอূ͢Δ ਤ ɻ "//(
<>IUUQTTZJNHKQJEPDTSFTFBSDI@MBCBSUJDMFTNJXBTBLJJQTKUPEQEG
"//(5 ϥϯμϜʹબͨ͠ϊʔυ͔ΒάϥϑΛ୳ࡧ͢ΔͷͰάϥϑ͕େྔͷϊʔυΛ༗͢Δ ߹ʹ୳ࡧίετ͕૿Ճ͢Δɻಛʹ୳ࡧى࣍ୈͰίετ͕Ͷ্͕Δɻ "//(5<>"//(ʹ͓͍ͯ୳ࡧىΛܾఆ͢ΔͷʹEWQUSFF<>Λར༻͢Δ͜ͱʹ ΑΓίετͰۙϊʔυΛ୳ࡧͰ͖Δ ਤ ɻ "//( <>IUUQTTZJNHKQJEPDTSFTFBSDI@MBCBSUJDMFTNJXBTBLJJQTKKOMQEG
"//(5
"//(5 EWQUSFF EZOBNJDWBOUBHFQPJOUUSFF ୳ࡧىΛબͿͨΊ͚ͩʹΘΕΔɻ͜ͷྫͰۭؒશମΛͷಉ ৺ԁɺΦϨϯδͷಉ৺ԁɺ੨ͷಉ৺ԁʹΑΓॱʹׂ͢Δ͜ͱͰ෦ۭؒࡉԽ͠ɺͦͷ෦ۭؒͷแؚؔ Λࣔ͢πϦʔߏΛੜ͢Δɻ͜ΕͰ୳ࡧىΛେ෯ʹߜΓࠐΊΔɻಈతͷߏஙΞϧΰϦζϜޙௐࠪʜ
/(50//( d/(50//(ʹΑΔΤοδௐd
.PUJWBUJPO "//( "//(5ͰΤοδʹΑͬͯ࣍ͷ͕ൃੜ͢Δɻ ೖྗΤοδ͕ۃʹগͳ͍ϊʔυ౸ୡ͢Δ͕֬Լ͕ΔͷͰݕࡧ࿙Ε͢ΔՄೳ Τοδ͕શମతʹগͳ͍ͱԕճΓʹͳΔՄೳੑ͕͋Γɺݕࡧ࿙Ε͢ΔՄೳੑ্͕͕Δ Τοδ͕ଟ͍ͱ୳ࡧ͕࣌ؒ૿͑Δɻ ͭ·Γ ೖྗΤοδͷϊʔυͰҰఆʹ͍ͨ͠ ग़ྗΤοδͷ૿ՃʹΑΔԼ͕ൃੜ͠ͳ͍ൣғͰ֤ϊʔυͷೖྗΤοδΛ૿͢ɻ ͜ΕΒΛϊʔυʹΤοδͷௐʹΑͬͯղܾ͢Δͷ͕/(50//(
0QUJNJ[FE/FBSFTU /FJHICPST(SBQI Ͱ͋Γɺ"//(5ʹΤοδௐύεௐΛ͔͚ͨͷͰ͋Δɻ
EFHSFFBEKVTUNFOUNFUIPET QBUIBEKVTUNFOUNFUIPE /(50//(ͰͭΤοδௐ๏ͱݕࡧ࣌ͷύεௐ๏ΛఏҊ͍ͯ͠Δɻ ੩త࣍ௐ,//(ͷΤοδͱసΤοδ͔Β࡞ͬͨάϥϑͰೖग़࣍Λେ·͔ʹௐ͢Δ ੍͖੩త࣍ௐೖग़࣍ΛΑΓਖ਼֬ʹௐ͢Δ ಈత࣍ௐݕࡧ࣌ʹཁٻ͞ΕΔਫ਼͔Βग़࣍Λಈతʹܾఆ͢Δ γϣʔτΧοτΤοδআڈʹΑΔύεௐ ϊʔυͷग़͕࣍ߴ͘ͳΓɺΫΤϦ͕࣌ؒ͘ͳΔͷΛͳΜͱ͔͍ͨ͠
੩త࣍ௐ d,//(ͷΤοδͱసΤοδ͔Β࡞ͬͨάϥϑͰೖग़࣍Λେ·͔ʹௐd ·ͣϊʔυͷೖग़࣍Λେࡶʹἧ͍͑ͨ F@P F@J͕༩͑ΒΕͨ࣌ɺ֤ϊʔυ͔Βڑ͕͍ॱʹ F@Pݸͷग़ྗΤοδ͕બ͞ΕΔɻF@Jݸͷग़ྗΤοδ ͍ॱʹબ͞ΕΔɻ બΕͨF@Pݸͷग़ྗΤοδ܈ͦͷ··࠾༻͠ɺF@J ݸͷग़ྗΤοδ܈શͯసͯ͠ೖྗΤοδͱͯ͠࠾ ༻͢Δɻ
ࠨਤL F@P F@Jͷ࣌Λࣔ͢ɻେ·͔ʹFP FJʹ͕࣍ἧ͑ΒΕ͍ͯΔɻ จͰ͜ΕΛௐάϥϑͱ໋໊͍ͯ͠Δɻ ௐ ݸͷΤοδ eo ݸͷసΤοδ ei
੍͖࣍ௐ தଜ͕·ͩཧղͰ͖ͯͳ͍આ dೖग़࣍ΛΑΓਖ਼֬ʹௐ͢ΔͨΊͷ੍͖ͷ࣍ௐd ઌ΄Ͳͷํ๏ͩͱେࡶʹ࣍ΛௐͰ͖Δ͕ɺҰ෦ͷϊʔυߴ ͍ग़࣍Λ͕࣋ͭ͋Δɻͦ͜Ͱɺग़ࣗΛ૿͞ͳ͍Α͏ʹೖ ग़࣍Λௐ͢Δํ๏͕ՃͰఏҊ͞Ε͍ͯΔɻ ઌ΄ͲͷΞϧΰϦζϜͰF@PͰੜ͞ΕΔௐάϥϑ(@UΛੜ ͢Δɻ(@JΛߏஙதͷάϥϑ(@Fͷసஔάϥϑͱ͢Δɻ (@Uͷϊʔυͷग़࣍ͷঢॱͰͭͷϊʔυ͕બ͞Εɺͦͷ
ϊʔυͷྡϊʔυͷ͍ۙॱͦΕͧΕʹ͍ͭͯɺ(@Jͷྡϊʔυ ͷग़͕࣍F@JΑΓ͘ɺ(@Fͷϊʔυͷग़͕࣍F@PΑΓ͍ ߹ɺྡϊʔυͱͷΤοδ͕(@FʹՃ͞ΕΔɻ (@FϊʔυʹF@PݸͷΤοδؚ͕·ΕΔ·ͰɺݩͷάϥϑͷΤοδ ͕ϊʔυʹՃ͞Ε·͢ɻ
ௐ Gt Ge Gi Gt Ge Gi F@J F@P L
Ge TUBHF݁Ռ ˔ ˔ ˔ ࠷ޙͷϊʔυ·Ͱॲཧ ੍ݶ͖੩త࣍ௐTUBHF ඞͣ͠࿈άϥϑʹͳΒͳ͍ʁ
Ge Ge G 4UBHF ੍ݶ͖੩త࣍ௐTUBHF F@J F@P L ඞͣ͠࿈άϥϑʹͳΒͳ͍ʁΜʁʁ ࠓޙཁௐࠪ
γϣʔτΧοτΤοδআڈʹΑΔ ύεௐ EWQUSFFΛ༻ͯ͠ΫΤϦʹ΄΅ྡ͢ΔϊʔυΛ୳ ࡧىͱ͍ͯ͠ΔͨΊɺγϣʔτΧοτΤοδແବ ʹग़࣍Λ૿͍ͯ͠Δ߹͕͋Δɻ ͜ͷΑ͏ͳΤοδΛআ͢ΔͱΫΤϦ࣌ؒΛॖͰ͖ Δɻ ସύε͕ͭҎ্ͷϊʔυͰߏ͞Ε͍ͯΔ߹ ࠨ ਤB
Λআ͠Α͏ͱ͢ΔͱΫΤϦ࣌ؒͷํ͕େ͖͘ͳ ΔͨΊͭͷϊʔυͰߏ͞Ε͍ͯΔύεͷΈ͕আ͞ ΕΔ ࠨਤCͷ߹ ɻ γϣʔτΧοτΤοδ͕ସύεͷΤοδΑΓ͍ ߹ ࠨਤD ͷΑ͏ͳ߹আ͞Εͳ͍ɻ
ಈత࣍ௐ dݕࡧ࣌ʹཁٻ͞ΕΔਫ਼͔Βग़࣍Λಈతʹܾఆ͢Δd ߴਫ਼͕ඞཁͳ߹ߴ͍ग़͕࣍ඞཁɻҰํͰ ͕༏ઌ͞ΕΔ߹ߴ͍ग़࣍ෆཁɻ͕ͨͬͯ͠ɺ ग़࣍ݕࡧ࣌ʹಈతʹௐͰ͖Δͱخ͍͠ɻ ୳ࡧ࣌ʹߟྀ͢Δग़࣍ਫ਼ௐύϥϝʔλЏͷؔ Ͱ͋ΔFQΛೖྗͱͯ͠ௐ͢Δɻ ਫ਼ௐύϥϝʔλͷЏ୳ࡧܘʹӨڹΛ༩͑ Δɻͭ·Γ,OO4FBSDIͷਫ਼Λೋͭͷ؍Ͱܾఆ͢ Δɻ
74NFUIPET %"͕࠷ڑܭࢉ͕গͳ͘ࡁΉɻ σʔληοτʹΑͬͯ4"Ͱ͑͞΄΅࠷ྑͷάϥϑߏΛߏஙͰ͖Δɻ 4"$ɺ(*45ͷΑ͏ͳߴ࣍ݩͷσʔληοτʹޮՌత͔͠Εͳ͍ɻ 4"ͱ4"$ͷ࣍%"ͷ࣍ΑΓগͳ͍ͨΊϝϞϦ༻ྔͷݮΛ༏ઌ͢Δඞཁ͕͋Δ߹ɺ4"·ͨ 4"$͕બࢶͱͳΔɾ
3FTVMUT σʔληοτ͝ͱͷ֤छ࠷ۙ୳ࡧख๏ൺֱ
ग़࣍ΛݮΒ͢ɻೖ࣍Ұఆʹ͢ΔΤοδௐͱ͍͏ΞΠσΞ໘ന͍ɻ ͨͩಈతͳߋ৽ɺআΛߟྀͯ͠ͳ͍ͷͰɺΞϓϦέʔγϣϯͰ͏ͷෆ ͖ɻ੩తͳݕࡧʹ͑Δ͚Ͳͦ͏ͳΔͱ͍Ͳ͜Ζ͕ɻɻ 7BME/(50//(αϙʔτ͠ͳ͍ͱݴ͍ͬͯΔɻͦΓΌͦ͏ɻ Γੈ)/48࣌ͳͷ͔ ॴײ
͓·͚ͱิ
<>IUUQTHJUIVCDPNWEBBTWBME 7BME<>/(5ϥΠϒϥϦΛͬͨࢄϕΫτϧݕࡧΤϯδϯɻLTGSJFOEMZͰɺ )FMNͰҰܸͰσϓϩΠ͕Մೳɻ௨৴H31$Λ͍ͬͯΔɻ͔͠(PΧοέΣɻ ΫϥΠΞϯτϥΠϒϥϦఏڙ͞Ε͓ͯΓ1ZUIPO (P /PEFKTͳͲʹରԠ͍ͯ͠Δɻ
ͨͩ7BMEͩͱ/(5"0//(͔͠ରԠͯ͠ͳ͍͍͘͞ɻɻɻ ࠶ߏஙͱࢄΤϯδϯ͕ͦ͠͏ͩ͠ɻɻɻ OHUίϚϯυΤοδௐܥΞϧΰϦζϜ໌ࣔతʹ࠶ߏஙΛୟ͘ܗࣜʹͳ͍ͬͯΔɻ ϕϯνϚʔΫݟΔͱΤοδௐ͕ಈతʹͰ͖ͳ͍ͱ·ͩ)/48ܥʹ܉ഋ্͕͕Γͦ͏ɻ
ͻΌʔʔʔ
͓·͚ େ·͔ͳ੩తͳ࣍ௐํ๏ͷग़ॴ ͳͥ͜ͷΞΠσΞ͕ग़ͯ͘Δ͔ɻ
͓·͚ σʔληοτ͝ͱͷग़࣍ͷฏۉ
શͯΛաڈʹ͢Δ4DB//