ちょっと変わった検索… と言うか、こっちが世界の潮流になりそう… Document A Document を 分差表現にして… [0.23, 0.54,…] [0.22, 0.58,…] ユーザーの好み Document A Document B Document C Document B Document C
Computer Programming, Volume 3: Sorting and Searching The Flexible Pattern Matching in Strings: Practical On-Line Search Algorithms for Texts and Biological Sequences $ grep $ awk $ sed 正規表現
Information Retrieval Modern Information Retrieval Information Retrieval: Implementing and Evaluating Search Engines IR=情報検索 https://www.cambridge.org/highereducatio n/books/introduction-to-information- retrieval/669D108D20F556C5C30957D63B5 AB65C#overview Modern Information Retrieval - Home (uchile.cl) https://plg.uwaterloo.ca/~ir/ir/book/
10,320件 30,483件 500,020件 UNIX BSD mmap kernel Linux 520件 1 1 1 2 3 3 4 5 5 6 6 7 S. Ding and T. Suel. Faster top-k document retrieval using block-max indexes. In Proceedings of the 34th Annual International ACM SIGIR Conference on Research and development in Information Retrieval, pages 993-1002, 2011. ↑の成果は Lucene 8 (2019/3/14 リリース) で実装 • https://fosdem.org/2019/schedule/event/apache_lucene_solr_8/attachments/slides/3325/export/events/attachments/apache_lucene_s olr_8/slides/3325/Sch indlerLucene8Slides.pdf • https://medium.com/@mocobeta/lucene-8-%E3%81%AE-top-k- %E3%82%AF%E3%82%A8%E3%83%AA%E3%83%97%E3%83%AD%E3%82%BB%E3%83%83%E3%82%B7%E3%83%B3%E3%82%B0%E6%9C%80% E9%81%A9%E5%8C%96-1-%E5%B0%8E%E5%85%A5%E7%B7%A8-5a6387076e8e 今でも効率的なアルゴリズムの研究が続いている
2024. 60 https://github.com/apache/lucene/blob/main/lucene/core/src/java/org/apache/lucene/codecs/MultiLevelSkipListWriter.java * Example for skipInterval = 3: * c (skip level 2) * c c c (skip level 1) * x x x x x x x x x x (skip level 0) * d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d (posting list) * 3 6 9 12 15 18 21 24 27 30 (df) * * d – document * x - skip data * c - skip data with child pointer
recommendation is to give 50% of the available memory to Elasticsearch heap, while leaving the other 50% free. It won’t go unused; Lucene will happily gobble up whatever is left over.” ※ Set the JVM heap size 【注意】Java の世界から逸脱している(Java のヒープ外でアロケートされてる)
理解しよう • 可用性を上げるにはどうしたらよい か?体験しよう • スケールすると(インデックスサイ ズが大きくなると)何が大変になる か?理解しよう 課題のゴール Index ① Request /and?term=AAAAA,BBBBB ② 分散検索 /get?term=AAAAA ③ local 検索 ③ local 検索 ② 分散検索 /get?term=BBBBB
扱う index は Practice②と同じ • 通信は http • 分散検索は • /and?term=AAAAA,BBBBBで AND 検 索 • /or?term=AAAA,BBBBBで OR 検索 • 単純に1個の term の Posting List を GET する API を追加(追加といっても /and と /or のどちらかを流用すれば OK) • /get?term=AAAA • マージ処理(実際の AND と OR の処理)は リクエストを受け取ったサーバーで OK Index ① Request /and?term=AAAAA,BBBBB ② 分散検索 /get?term=AAAAA ③ local 検索 ③ local 検索 ② 分散検索 /get?term=BBBBB
検索拡張生成(RAG)とは? • Amazon (AWS): • RAG とは何ですか? • Google (Google Cloud): • Your RAGs powered by Google Search technology, part 1 • Your RAGs powered by Google Search technology, part 2 • Arxiv.org: • Retrieval-Augmented Generation for Large Language Models: A Survey