ã¯ããã«
ChatGPTãªã©ã®çæAIãäŒæ¥ã§æŽ»çšããã«ã¯ãç¬èªã®ããŒã¿ãçµã¿åãããRAGïŒæ€çŽ¢æ¡åŒµçæïŒãæçã§ãã
ããããRAGã®äžæ žãæ
ããåã蟌ã¿ãã®ä»çµã¿ã¯æå€ãšç¥ãããŠããŸããã
ãã®èšäºã§ã¯ãåã蟌ã¿ã®åºç€ãããã¯ãã«æ€çŽ¢ãããã¹ã/ç»åã®åé¡ãŸã§ãå®äŸã亀ããŠè§£èª¬ããŸãã
åã蟌ã¿ã®çè§£ãæ·±ããããšã§ããã广çãªRAGã·ã¹ãã ã®æ§ç¯ãå¯èœã«ãªããŸãã
ååŠè ã®æ¹ã«ããçæAIãå®çšã¬ãã«ã§æŽ»çšããããšã³ãžãã¢ã®æ¹ã«ãã圹ã«ç«ãŠãŠããã ããå 容ãç®æããŠããŸãã
ãã®èšäºã®å 容ã¯ãŠã§ãããŒãOracle AI JAM Session #23 çæAIãæŽ»ããã«ã¯åã蟌ã¿ã®çè§£ããïŒRAGã®å¿èïŒåã蟌ã¿ã®åºç€ããå¿çšãŸã§ïŒãïŒ2025幎3æ26æ¥ïŒã«ãŠã玹ä»ãããŠããã ãããã®ã§ãã
ã³ãŒãã¯ãGitHub Repo ã«ãŠå ¬éããŠããŸãã
ãã®èšäºã§ã¯ãRAG ãšã¯äœãïŒ ã«ã€ããŠã¯ç°¡åãªã玹ä»ã«çããŠããŸããRAG ã®åºæ¬ã®è©³çްã€ããŠã¯ ãOracle AI JAM Session #20 çæAIãããè³¢ã ㌠ãšã³ãžãã¢ã®ããã®RAGå ¥éã ïŒ2024幎12æ18æ¥ïŒã§ã玹ä»ããŠããŸãã®ã§ãäžèšã®ã¢ãŒã«ã€ããã»ãã·ã§ã³è³æãããã°ã«ããã²ãç«ã¡å¯ããã ããã
| ã¢ãŒã«ã€ã | ã»ãã·ã§ã³è³æ |
![]() |
ããã§ã¯ããçæAIãæŽ»ããã«ã¯åã蟌ã¿ã®çè§£ããïŒRAGã®å¿èïŒåã蟌ã¿ã®åºç€ããå¿çšãŸã§ïŒãã¯ããŸããŸãïŒ
RAG ãšã¯äœãïŒ
RAGã®ç®çãšå©ç¹
-
ãã«ã·ããŒã·ã§ã³ïŒå¹»èŠïŒã®äœæž
- å€éšããŒã¿ããŒã¹ããã®æ£ç¢ºãªæ å ±ãåç §ããããšã§
- 誀ã£ãæ å ±ã®çæãæå¶ïŒãŒãã«ã¯ã§ããªããã®ã®å€§å¹ ã«åæžïŒ
-
瀟å åºæã®ç¥èãžã®å¯Ÿå¿
- ããŒã¿ããŒã¹ã«ç»é²ãããç€Ÿå ææžãèŠå®ãæ€çŽ¢
- çµç¹ç¹æã®æ å ±ã«åºã¥ããæ£ç¢ºãªåçãå¯èœ
-
ææ°æ å ±ãžã®å¯Ÿå¿
- ããŒã¿ããŒã¹ãæŽæ°ããããšã§ãåžžã«ææ°ã®æ å ±ã«åºã¥ããåçãå¯èœ
- LLMã®åŠç¿æç¹ä»¥éã®æ°ããæ å ±ã«ã察å¿å¯èœ
RAGã¯ãLLMã®åºæ¬çãªèœåãæŽ»ãããªããããã®éçãè£å®ãã广çãªææ³ãšããŠãç¹ã«äŒæ¥ã§ã®å®çšåã«ãããŠéèŠãªåœ¹å²ãæãããŠããŸããææ°ã®ã¬ã€ãã©ã€ã³ãèŠå®ã«åºã¥ããæ£ç¢ºãªæ å ±æäŸãå¿ èŠãªããžãã¹ç°å¢ã«ãããŠãRAGã®æŽ»çšã¯äžå¯æ¬ ãšãªã£ãŠããŸãã
RAGã®åºæ¬ã¢ãŒããã¯ãã£
RAGã®ããã»ã¹ã¯ã以äžã®3ã€ã®äž»èŠãªã¹ãããã§æ§æãããŠããŸãã
- ããŒã¿ã®æºåãšåã蟌ã¿åŠç
- ææžããŒã¿ããŒã¹ããæ å ±ãååŸ
- ããã¹ããé©åãªå€§ããã®ãã£ã³ã¯ïŒæçïŒã«åå²
- åã蟌ã¿ã¢ãã«ã䜿çšããŠãã¯ãã«å
- ãã¯ãã«ããŒã¿ããŒã¹ã«ã€ã³ããã¯ã¹ãäœæ
- ãã¯ãã«æ€çŽ¢ããã»ã¹ïŒ"RAG" ã® "R"(Retrieval)ïŒ
- ãŠãŒã¶ãŒã®è³ªåããã¯ãã«å
- ãã¯ãã«ããŒã¿ããŒã¹ã§é¡äŒŒåºŠæ€çŽ¢ãå®è¡
- æãé¢é£æ§ã®é«ãææžãæœåº
- LLMã«ããåççæïŒ"RAG" ã® "G"(Generation)ïŒ
- æ€çŽ¢çµæãšãŠãŒã¶ãŒã®è³ªåãçµã¿åãããŠããã³ãããçæ
- LLMãæäŸãããæ å ±ã«åºã¥ããŠåçãçæ
åãèŸŒã¿æè¡ã®åºç€
ããŒã¯ã³ãšã¯äœã
èªç¶èšèªåŠçã«ãããããã¹ãã®çããŒã¿ã®åé¡ç¹
èªç¶èšèªã¯ãã®ãŸãŸã§ã¯ãåã«æååãæ°å€ã®åã«éãããæå³ãææ³çãªæ
å ±ãçŽæ¥çã«ã¯è¡šçŸãããŠããŸãããã³ã³ãã¥ãŒã¿ãçè§£ããããã«ã¯ãããã¹ããæå³ã®ããæå°åäœïŒéåžžã¯åèªãããã«é¡ããåäœïŒã«åå²ããŠæ©æ¢°åŠç¿ã¢ãã«ã«ãã£ãŠåèªéã®é¢ä¿ãªã©ãåŠç¿ããå¿
èŠããããŸãããã®æå°åäœïŒéåžžã¯åèªãããã«é¡ããåäœïŒãããŒã¯ã³ãšåŒã³ãŸãã

åèªåäœã®ããŒã¯ã³åã®éç
ãã¹ãŠã®åèªã«åºæã®ããŒã¯ã³ãå²ãåœãŠãã°ãæå³ãæã€æå°åäœãšããŠæ±ããŸãããèªåœæ°ãèšå€§ã«ãªããç¹ã«æªç¥èªïŒé »åºããªãåèªïŒãžã®å¯Ÿå¿ãé£ãããªããŸããããã«ãããåŠç¿ã¢ãã«ã®ãµã€ãºãåŠçå¹çã«ãæªåœ±é¿ãåãŒããŸãã
ãµãã¯ãŒãããŒã¯ã³åã®å·¥å€«
ããã§ãé »åºããåèªã«ã¯å°çšã®ããŒã¯ã³ãå²ãåœãŠãé »åºŠã®äœãåèªã¯ããã«çްããåäœïŒãµãã¯ãŒããããã«ã¯æåã¬ãã«ããŸãã¯ã·ã³ã°ã«ãã€ãã¬ãã«ïŒã«åè§£ããŠå¯Ÿå¿ããŸããããã«ãããèªåœæ°ãæãã€ã€ããã¹ãŠã®ããã¹ãæ
å ±ãã«ããŒãããã©ã³ã¹ã®åããæ¹æ³ãšãªããŸãã
äŸãã°ãBPEïŒByte Pair EncodingïŒãWordPieceãšãã£ãã¢ã«ãŽãªãºã ã¯ããã®ãããªãµãã¯ãŒãåäœã§ã®åå²ãå®çŸããæªç¥èªåé¡ã軜æžããŠããŸãã
ãµãã¯ãŒãããŒã¯ã³åïŒBPEã¢ã«ãŽãªãºã ïŒã®äŸ
åºçŸé »åºŠã®é«ãåèªã¯ããã®ãŸãŸããŒã¯ã³åãããŸãã
äŸïŒcomputer - ã³ã³ãã¥ãŒã¿

åºçŸé »åºŠã®äœãåèªã¯ãè€æ°ã®ãµãã¯ãŒãã«åå²ãããŠè€æ°ã®ããŒã¯ã³ã«å€æãããŸãã
äŸïŒexhilarating - çœå¿«ãª

ããŒã¯ãã€ã¶ãŒãšã¯
ããŒã¯ãã€ã¶ãŒïŒTokenizerïŒã¯ãããŒã¯ã³åãå®è¡ãããœãããŠã§ã¢ã§ããåèšèªã¢ãã«ïŒåã蟌ã¿ã¢ãã«ã«ã¯å°çšã®ããŒã¯ãã€ã¶ãŒããããã¢ãã«ã®å©çšæã«ã¯ãã¢ãã«ã®èšç·Žæã«äœ¿çšãããã®ãšåãããŒã¯ã³åææ³ã䜿ãå¿ èŠããããŸããäŸãã°ãGPTç³»ã¢ãã«ã«ã¯GPTå°çšã®ããŒã¯ãã€ã¶ãŒããããCohere瀟ã®ã¢ãã«ã«ã¯Cohereçšã®ããŒã¯ãã€ã¶ãŒããããŸãã
ããŒã¯ãã€ã¶ãŒã¯éåžžã以äžã®æ©èœãæäŸããŸãã
-
ãšã³ã³ãŒã
- ããã¹ããããŒã¯ã³IDåã«å€æ
-
ãã³ãŒã
- ããŒã¯ã³IDåãããã¹ãã«æ»ã
-
ããŒã¯ã³æ°ã®ã«ãŠã³ã
- ããã¹ããäœããŒã¯ã³ã«ãªãããèšç®
ããŒã¯ãã€ã¶ãŒã䜿ã£ãŠããŒã¯ã³åãããŒã¯ã³æ°ã®ã«ãŠã³ããªã©ãè¡ãã«ã¯ãHuggingFaceã®Tokenizersã©ã€ãã©ãªãOpenAIã®ticktoken ã©ã€ãã©ãªãªã©ãåºã䜿ãããŠããŸããticktoken ã¯ããµãã¯ãŒãã®äžçš®ã§ãã BPEã¢ã«ãŽãªãºã ã® OpenAI ã«ããå®è£ ã§ãã
Open AI tiktoken ã©ã€ãã©ãªã䜿ã£ãããŒã¯ã³åã®äŸ
å€§èŠæš¡èšèªã¢ãã«ãåã蟌ã¿ã¢ãã«ã¯ã¢ãã«æ¯ã«å ¥åã§ããããã¹ãã®æå€§ããŒã¯ã³é·ïŒã³ã³ããã¹ãé·ïŒ ãæ±ºãŸã£ãŠããŸãããã®å¶éé·ãè¶ ãããšãããã¹ãã®åŸããåãæšãŠãããããAPIãªã¯ãšã¹ãããšã©ãŒãšãªããŸãããã®ããããããããããã¹ããã©ã®çšåºŠã®ããŒã¯ã³ã«å€æãããããç¥ã£ãŠããããšãå¿ èŠã§ãããŸããå€§èŠæš¡èšèªã¢ãã«ãåã蟌ã¿ã¢ãã«ãAPIãµãŒãã¹ã§äœ¿ãå ŽåãæéãããŒã¯ã³åäœã§ããå ŽåããããŸãã
ããŒã¯ã³åãšããŒã¯ã³æ°ã«ãŠã³ãã®äŸïŒ"ããã«ã¡ã¯ïŒ"ïŒ
import tiktoken
encoding = tiktoken.get_encoding("cl100k_base")
tokens = encoding.encode("ããã«ã¡ã¯ïŒ")
print(f"tokens: {tokens}")
print(f"len(tokens): {len(tokens)}")
-
tiktoken.get_encoding()ã¯ãããŒã¯ãã€ã¶ãŒã®ã€ã³ã¹ã¿ã³ã¹ãçæããŸããåŒæ°ã¯ããšã³ã³ãŒãã£ã³ã°ã®ååã§ã - OpenAI ã®ç¬¬äžäžä»£åã蟌ã¿ã¢ãã«ïŒtext-embedding-3-smallãtext-embedding-3-largeïŒã§ã¯ãããŒã¯ã³åã«ã¯ã
cl100k_baseãšãããšã³ã³ãŒãã£ã³ã°ã䜿ãããŠããŸãïŒOpenAIããã¥ã¡ã³ãïŒã®ã§ããã®ååãæå®ããŠããŸãã -
encoding.encode()ã¯ãããŒã¯ãã€ã¶ã®encode()ã¡ãœãããåŒã³åºããŠãåŒæ°ã§äžããããã¹ããããŒã¯ã³åããŠããŸããæ»ãå€ã¯ãããŒã¯ã³ã®ãªã¹ãã§ã
tokens: [90115, 6447]
len(tokens): 2
ããŒã¯ã³åå²ã®è²åã

ããŒã¯ã³åãšããŒã¯ã³æ°ã«ãŠã³ãã®äŸïŒ"ããã«ã¡ã¯ãäžçïŒ"ïŒ
次ã¯ã"ããã«ã¡ã¯ãäžçïŒ"ãããŒã¯ã³åããŠã¿ãŸãã
import tiktoken
encoding = tiktoken.get_encoding("cl100k_base")
tokens = encoding.encode("ããã«ã¡ã¯ãäžçïŒ")
print(f"tokens: {tokens}")
print(f"len(tokens): {len(tokens)}")
tokens: [90115, 5486, 3574, 244, 98220, 6447]
len(tokens): 6
ããŒã¯ã³åå²ã®è²åã

"äž"ã«ã¯cl100k_base ãšã³ã³ãŒãã£ã³ã°ã§ã¯ãããŒã¯ã³ãå²ãåœãŠãããŠããªãã£ããããããŒã¯ãã€ã¶ãŒã¯ã"äž"ïŒ0xe4b896ïŒããã€ããã¢"0xe4b8"ãšã·ã³ã°ã«ãã€ã"0x96"ã«åå²ããŠãšã³ã³ãŒãããŠããŸãã
ïŒäœè«ïŒé¢çœãããŒã¯ã³
OpenAI 㮠第äžäžä»£ã®åã蟌ã¿ã¢ãã«ïŒtext-embedding-3-smallãtext-embedding-3-largeïŒã GPT-3.5 Turbo ãã GPT-4 Turbo with Vision ãŸã§ã®å€§èŠæš¡èšèªã¢ãã«ã§äœ¿ãããŠãã cl100k_base ãšãããšã³ã³ãŒãã£ã³ã°ã«ã¯äžèšã®ãããªãŠããŒã¯ãªããŒã¯ã³ãå«ãŸããŠããŸãã
Token ID: 63570, String: .translatesAutoresizingMaskIntoConstraints
Token ID: 73303, String: .DataGridViewColumnHeadersHeightSizeMode
Token ID: 61207, String: latesAutoresizingMaskIntoConstraints
Token ID: 73905, String: dequeueReusableCellWithIdentifier
Token ID: 59591, String: AutoresizingMaskIntoConstraints
Token ID: 44078, String: UnsupportedOperationException
Token ID: 99867, String: NavigationItemSelectedListener
Token ID: 95656, String: .DataGridViewContentAlignment
Token ID: 58928, String: :UIControlEventTouchUpInside
Token ID: 73229, String: .ColumnHeadersHeightSizeMode
æååé·ãé·ããã®ããäžäœ10ä»¶ãæœåºãããã®ã
æé·ã® translatesAutoresizingMaskIntoConstraints ã¯ãApple ã® UIKit ãã¬ãŒã ã¯ãŒã¯ã®ããããã£ã
Cohere ã®ããŒã¯ã³åã®äŸ
åã蟌ã¿ïŒãšã³ããã£ã³ã°ïŒãšã¯ïŒ
åã蟌ã¿ã¯ãããã¹ããç»åãªã©ã®ããŒã¿ããã¯ãã«ç©ºéäžã®ãã¯ãã«ãšããŠè¡šçŸããæ¹æ³ã§ãã
äžå³ã§ç€ºãããŠããããã«ãäŸãã°çœç«ãäžæ¯ç«ãç§ç°ç¬ãè»ãšãã£ãç°ãªããªããžã§ã¯ãã¯ãããããã®ç¹åŸŽãæ°å€åããããšã§å€æ¬¡å ãã¯ãã«ãšããŠè¡šçŸãããŸãã
ãã®ãã¯ãã«è¡šçŸã¯ã以äžã®ãããªç¹åŸŽãæã£ãŠããŸãã
- 忬¡å ãç¹å®ã®ç¹åŸŽïŒãµããµã床ãã²ã床ãªã©ïŒã衚çŸããŠãã
- 䌌ãç¹åŸŽãæã€ãªããžã§ã¯ãã¯ããã¯ãã«ç©ºéäžã§è¿ãã«é 眮ãããŠãã
- ç¹åŸŽã®éãã倧ãããªããžã§ã¯ãã¯ã空éäžã§é¢ããŠé 眮ãããŠãã
ç»åãææžãªã©ã®ç¹åŸŽãæ°å€ãã¯ãã«ã®åœ¢ã§è¡šçŸãããã®ãç¹åŸŽãã¯ãã«ãšåŒã³ãŸããç¹åŸŽãã¯ãã«ã®äžã§ããç¹ã«æ©æ¢°åŠç¿ã®è¡šçŸåŠç¿ã§åŸããããã®ãåã蟌ã¿ïŒãšã³ããã£ã³ã°ïŒ ãšåŒã³ãŸãïŒå³å¯ãªçšèªã®äœ¿ãåãã®å®çŸ©ãããããã§ã¯ãããŸããïŒããŸããæ©æ¢°åŠç¿ã«ããåã蟌ã¿ãçæããæ©æ¢°åŠç¿ã¢ãã«ãåã蟌ã¿ã¢ãã«ãšåŒã³ãŸãã
ãã®åã蟌ã¿ïŒãšã³ããã£ã³ã°ïŒãç¹ããªããã¯ãã«ç©ºéãåã蟌ã¿ç©ºéãšåŒã³ãŸãã䌌ãäºç©ã¯ã䌌ãç¹åŸŽãæã¡ããã®å€æ¬¡å ã®åã蟌ã¿ç©ºéïŒãã¯ãã«ç©ºéïŒã®äžã§è¿ãã«äœçœ®ããããšãšãªããŸãã
åã蟌ã¿ã¢ãã«ã®ä»çµã¿
åèªã®åã蟌ã¿
åã蟌ã¿ã¢ãã«ã«ã¯ã倧ããåããŠ2ã€ã®ã¢ãããŒãããããŸããStatic EmbeddingïŒéçåã蟌ã¿ïŒãš Transformer ããŒã¹ã®æèèæ ®ååã蟌ã¿ã§ã
Static Embedding
åèªã®éçåã蟌ã¿ïŒStatic EmbeddingïŒã¯ãããåèªãå¥ã®åèªãšäžç·ã«äœ¿ãããããåŸåïŒå ±èµ·é¢ä¿ïŒãåŠç¿ããŠãåèªã«åã蟌ã¿ïŒãã¯ãã«ïŒãå²ãåœãŠãææ³ã§ãããã®ææ³ã§ã¯ãæå³çã«äŒŒãŠããåèªã¯ãåã蟌ã¿ç©ºéå ã§è¿ãäœçœ®ã«é 眮ãããŸãã
äŸãã°ããã³ãŒããŒããçŽ è¶ããçä¹³ãããã¬ãããšããåèªã¯ãããã以äžã®ãããªåèªãšäžç·ã«äœ¿ãããããåŸåããããŸãã
- ãã³ãŒããŒããšããåèªã¯ã飲ãããã«ããããè±ããéŠãããªã©ã®åèªãšå ±ã«åºçŸãããã
- ãçŽ è¶ããšããåèªã¯ã飲ãããã«ããããè¶èããéŠãããªã©ã®åèªãšå ±ã«åºçŸãããã
- ãçä¹³ããšããåèªã¯ã飲ãããã«ããããçœãããã«ã«ã·ãŠã ããªã©ã®åèªãšå ±ã«åºçŸãããã
- ããã¬ãããšããåèªã¯ãèŠãããé²ç»ãããã£ã³ãã«ããçªçµããªã©ã®åèªãšå ±ã«åºçŸãããã
ãã³ãŒããŒããçŽ è¶ãã¯ãã©ã¡ããã飲ãããã«ããããéŠãããšåæã«äœ¿ãããããããå€ãè¿ãåã蟌ã¿ïŒãã¯ãã«ïŒãå²ãåœãŠããåã蟌ã¿ç©ºéå ã§è¿ãäœçœ®ã«é 眮ãããŸãã
ãçä¹³ãã¯ããã³ãŒããŒããçŽ è¶ããšã飲ãããã«ãããã®ïŒã€ã®åèªãå ±éããŠããŸãã®ã§ããã³ãŒããŒããçŽ è¶ãã®è¿ãã«é 眮ãããŸãããããããçä¹³ããšãã³ãŒããŒãããçä¹³ããšãçŽ è¶ãã®è·é¢ã¯ãã³ãŒããŒããšãçŽ è¶ãã®è·é¢ããã¯é ããªããŸãã
ããã¬ããã¯ããã³ãŒããŒããçŽ è¶ããçä¹³ããšã¯åæã«äœ¿ãããããåèªãç°ãªããããããããšã¯é¢ããäœçœ®ã«é 眮ãããŸãã
éçåã蟌ã¿ïŒStatic EmbeddingïŒã«ããåèªåã蟌ã¿ã®ã³ãŒãäŸïŒWord2VecïŒ
åã蟌ã¿çæãšå¯èŠåã®ã³ãŒãã衚瀺/é衚瀺
import gensim.downloader as api
from gensim.models import KeyedVectors
from sklearn.decomposition import PCA
from sklearn.preprocessing import normalize
import matplotlib.pyplot as plt
import japanize_matplotlib
from adjustText import adjust_text
import os
import warnings
warnings.filterwarnings('ignore')
# ã¢ãã«ã®ãã¹èšå®
ORIGINAL_MODEL_PATH = 'GoogleNews-vectors-negative300.bin'
LIGHT_MODEL_PATH = 'GoogleNews-vectors-negative300.kv'
# ã¢ãã«ã®ããŒã颿°
def load_word2vec_model():
# 軜éãã©ãŒããããååšããå Žå
if os.path.exists(LIGHT_MODEL_PATH):
print("軜éãã©ãŒãããã®ã¢ãã«ãèªã¿èŸŒãã§ããŸã...")
return KeyedVectors.load(LIGHT_MODEL_PATH)
# ãªãªãžãã«ã®ãã€ããªãã¡ã€ã«ãååšããå Žå
if os.path.exists(ORIGINAL_MODEL_PATH):
print("ãªãªãžãã«ã®ã¢ãã«ãèªã¿èŸŒã¿ã軜éãã©ãŒãããã«å€æããŠããŸã...")
model = KeyedVectors.load_word2vec_format(ORIGINAL_MODEL_PATH, binary=True)
model.save(LIGHT_MODEL_PATH)
return model
# ã©ã¡ããååšããªãå ŽåãããŠã³ããŒãã詊ã¿ã
print("ã¢ãã«ãèŠã€ãããŸãããword2vec-google-news-300ãããŠã³ããŒãããŸã...")
try:
model = api.load('word2vec-google-news-300')
print("ããŠã³ããŒããå®äºããŸããã軜éãã©ãŒãããã«å€æããŠä¿åããŸã...")
model.save(LIGHT_MODEL_PATH)
return model
except Exception as e:
raise Exception(f"ã¢ãã«ã®ããŠã³ããŒãã«å€±æããŸãã: {str(e)}")
# ã¢ãã«ã®ããŒã
model = load_word2vec_model()
# åèªãã¯ãã«ã®æ¬¡å
æ°ã衚瀺
print(f"åèªãã¯ãã«ã®æ¬¡å
æ°: {model.vector_size}")
# ã«ããŽãªåã
categories = {
'人': ['king', 'queen', 'prince', 'princess', 'man', 'woman', 'boy', 'girl', 'child', 'adult',
'engineer', 'architect', 'doctor', 'nurse', 'pilot', 'teacher', 'student', 'professor',
'researcher', 'scientist', 'artist', 'writer', 'musician', 'actor', 'actress',
'entrepreneur', 'investor', 'attorney', 'judge', 'police', 'detective', 'spy'],
'忀ç©': ['cat', 'lion', 'tiger', 'dog', 'wolf', 'mammal', 'hawk', 'eagle', 'bird',
'ant', 'bee', 'butterfly', 'insects', 'tree', 'plant', 'flower', 'grass'],
'èªç¶ç©': ['nature', 'sky', 'cloud', 'sun', 'moon', 'star', 'water', 'river', 'sea', 'ocean',
'lake', 'fire', 'flame', 'smoke', 'bank'],
'人工ç©': ['car', 'truck', 'bicycle', 'motorcycle', 'vehicle', 'machine', 'house', 'building',
'apartment', 'home', 'room', 'fireplace', 'fireworks'],
'æŠå¿µ': ['joy', 'anger', 'sadness', 'fear', 'surprise', 'money', 'wealth', 'poverty', 'poor']
}
# è²ã®å®çŸ©
category_colors = {
'人': 'blue',
'忀ç©': 'green',
'èªç¶ç©': 'red',
'人工ç©': 'black',
'æŠå¿µ': 'purple'
}
# åèªãã¯ãã«ãèŸæžã«æ ŒçŽ
word_vectors = {}
# categoriesããå
šãŠã®åèªãååŸããéè€ãæé€
words = []
for category, word_list in categories.items():
for word in word_list:
if word not in words: # éè€ãã§ãã¯
words.append(word)
for word in words:
try:
word_vectors[word] = model.get_vector(word)
except KeyError:
print(f"èŠå: '{word}' ã¯ã¢ãã«å
ã«èŠã€ãããŸããã§ããã")
# ãã¯ãã«ãªã¹ãã®æºå
vectors = list(word_vectors.values())
labels = list(word_vectors.keys())
# ãã¯ãã«ã®æ£èŠå
normalized_vectors = normalize(vectors)
# PCAã§æ¬¡å
åæž
pca = PCA(n_components=2, random_state=42)
reduced_vectors = pca.fit_transform(normalized_vectors)
# å¯äžçã®ååŸ
explained_variance_ratio = pca.explained_variance_ratio_
# å¯èŠåïŒã«ããŽãªããšã«è²åãïŒ
plt.figure(figsize=(14, 12))
# åã«ããŽãªããšã«ç¹ããããã
for category, color in category_colors.items():
# ã«ããŽãªã«å«ãŸããåèªã®ã€ã³ããã¯ã¹ãååŸ
indices = [i for i, label in enumerate(labels) if label in categories[category]]
# ãã®ã«ããŽãªã®åèªããããã
if indices:
plt.scatter(
[reduced_vectors[i, 0] for i in indices],
[reduced_vectors[i, 1] for i in indices],
color=color,
label=category,
s=20,
alpha=0.8
)
# ã©ãã«ã®è¿œå
texts = []
for i, label in enumerate(labels):
# åèªãå±ããã«ããŽãªã®è²ãååŸ
category = next((cat for cat, words_list in categories.items() if label in words_list), None)
color = category_colors.get(category, 'black')
# ããã¹ãã远å
texts.append(plt.text(reduced_vectors[i, 0], reduced_vectors[i, 1], label, color=color, fontsize=9))
plt.title(f'Word2Vecã®PCAå°åœ±ïŒ{model.vector_size}次å
ãã2次å
ïŒ - ã«ããŽãªå¥è²åã')
plt.xlabel(f'PCA次å
1 (å¯äžç: {explained_variance_ratio[0]:.2%})')
plt.ylabel(f'PCA次å
2 (å¯äžç: {explained_variance_ratio[1]:.2%})')
plt.grid(True, alpha=0.3)
plt.legend(loc='upper right')
# ããã¹ãäœçœ®ã®èª¿æŽ
adjust_text(texts,
arrowprops=dict(arrowstyle='->', color='red', lw=1.0, alpha=1.0),
force_points=(0.1, 0.2),
force_text=(0.5, 1.0),
expand_points=(1.5, 1.5),
expand_text=(1.5, 1.5),
only_move={'points':'xy', 'text':'xy'})
plt.show()
éçåã蟌ã¿ïŒStatic EmbeddingïŒã®ç¹åŸŽ
-
äžã€ã®åèªã«å¯ŸããŠåžžã«åããã¯ãã«è¡šçŸïŒåã蟌ã¿ïŒãå²ãåœãŠã
-
æèã«äŸåããªãåºå®ããã衚çŸãçæãã
- äŸãã°ã人æ°è
ã衚ã star ãã倩äœã® star ãåãåã蟌ã¿ãã¯ãã«ãå²ãåœãŠããã
- Shohei Ohtani is an MLB star.ïŒå€§è°·ç¿å¹³ããã¯ã¡ãžã£ãŒãªãŒã°ã®ã¹ã¿ãŒã§ãïŒ
- The sun is a star.ïŒå€ªéœã¯ã¹ã¿ãŒïŒæïŒã§ãïŒ
- äŸãã°ã人æ°è
ã衚ã star ãã倩äœã® star ãåãåã蟌ã¿ãã¯ãã«ãå²ãåœãŠããã
-
Word2VecãGloVeãFastTextãªã©ã®ã¢ã«ãŽãªãºã ã代衚ç
éçåã蟌ã¿ïŒStatic EmbeddingïŒã®ãŸãšã
- ã¢ãã«ã®åŠç¿æã«ã¯ãåŠç¿ããŒã¿ã®æã®æèïŒå ±èµ·é¢ä¿ïŒããåèªéã®é¢é£æ§ãåŠç¿ããŠãé¡äŒŒããåèªãé¢é£ã®ããåèªã«ã¯è¿ããã¯ãã«å€ãäžããããããã«æèããåŠç¿ããŸã
- ã¢ãã«ã®å©çšæã«ã¯ãåèªãåŠç¿æã«å²ãåœãŠãåã蟌ã¿ãã¯ãã«ã«å€æããã ãã§ãå©çšæã«åèªã眮ãããæèã¯èæ ®ãããŸãã
éçåã蟌ã¿ïŒStatic EmbeddingïŒã®éèŠãªç¹åŸŽãšããŠãåèªã®æèéäŸåæ§ããããŸããäŸãã°ã"bank"ãšããåèªã¯ããéè¡ïŒbankïŒã§å£åº§ãéèšããããšããæã§ãããåæïŒbankïŒãæ£æ©ãããããšããæã§ããæèã«é¢ä¿ãªãåäžã®ãã¯ãã«è¡šçŸã«å€æãããŸãããã®ãããå€çŸ©èªã®ç°ãªãæå³ãåºå¥ã§ããªããšããå¶éããããŸãã
ãŸããååèªã®åã蟌ã¿ãã¯ãã«ã¯ãåŠç¿ããŒã¿å ã§ã®å ±èµ·é¢ä¿ããèšç®ãããåºå®å€ãšãªããŸããã€ãŸããäžåºŠåŠç¿ãå®äºãããšãååèªã«å¯Ÿå¿ãããã¯ãã«ã¯å€åãããåºå®ãããå€ãšããŠäœ¿çšãããŸãã
ã·ã³ãã«ã§å¹ççã§è»œéã§ããããããšããžããã€ã¹ããã©ãŠã¶ç°å¢ã§ã®å©çšã«é©ããŠããŸãã
æè¿ã§ã¯ãLLM åæ§ã«ã¢ãã³ã·ã§ã³æ©æ§ã«ããæèãèæ ®ããTransformerããŒã¹ã®åã蟌ã¿ã¢ãã«ïŒæ¬¡é ïŒã泚ç®ãããŠãŸãããStatic Embedding ã¯ãçŸåšã§ãçºå±ãç¶ããŠããŸãã2025幎1æ ã«ã以äžã®ãããªæ°ããç ç©¶ïŒã¢ãã«ãå ¬éãããŠããŸãã
次ã«ç޹ä»ããTransformerããŒã¹ã®ã¢ãã«ã§ã¯ãå€çŸ©èªã®æèäŸåæ§ãæããããæè»ãªåã蟌ã¿ãçæå¯èœãšãªã£ãŠããŸãã
TransformerããŒã¹ã®æèèæ ®ååã蟌ã¿
ããé«åºŠãªåã蟌ã¿ã¢ãã«ã¯ãBERTãGPTãªã©ã®Transformerã¢ãŒããã¯ãã£ãåºç€ãšããŠããŸãããããã®ã¢ãã«ã¯ãå ¥åããã¹ãã®æèãèæ ®ããŠåçã«ïŒæèãåæ ããŠïŒåã蟌ã¿ãçæããŸãã
äŸãã°ããçç©ããšããåèªã«ã¯ãããããã®ãã衚ãå Žåãšãã調çããŠããªãé£åãã衚ãå Žåã®ïŒã€ã®æå³ããããŸããèªã¿ãèæ ®ããªãããŒã¯ãã€ã¶ãŒã¯ãããã®å Žåã«ãåãããŒã¯ã³IDãå²ãåœãŠãŸããéçåèªåã蟌ã¿ã¢ãã«ã¯ãïŒã€ã®ããŒã¯ã³ã«å¯ŸããŠïŒéãã®åã蟌ã¿ãçæããããããçç©ïŒ"ãããã®"ã®æïŒãããçç©ïŒ"ãªãŸãã®"ã®æïŒããåãåã蟌ã¿ãšãªããŸãããã®ããããçç©ïŒ"ãããã®"ã®æïŒãããçç©ïŒ"ãªãŸãã®"ã®æïŒããšããå šãç°ãªããã®ãåºå¥ãããªãããšãªããŸãã
ããã«å¯ŸããŠãTransformerããŒã¹ã®æèèæ ®ååã蟌ã¿ã¢ãã«ã§ã¯ãèªå·±æ³šææ©æ§ïŒSelf Attention MechnismïŒã䜿ã£ãŠæèãåã蟌ãããšãã§ããŸãã
èªå·±æ³šææ©æ§ã«ãã£ãŠçæããããç«ã¯çç©ã§ãããšããæã®äžã®ãçç©ãã®æèèæ ®ã®åã蟌ã¿ã¯æ¬¡ã®ãããªã€ã¡ãŒãžã§ãã
["çç©ïŒãããã®ã®æïŒ"]ãïŒã0.3 x ["ç«"] + 0.1 x ["ã¯"] + 0.5 x ["çç©"] + 0.1 x ["ã§ã"]
ã€ãŸããæèèæ
®ã®["çç©ïŒãããã®ã®æïŒ"]ã«ã¯ããç«ã£ãœããã3岿··ããããšãšãªããŸãã
åæ§ã«ãåºèº«ã¯çç©ã§ãããšããã®æã®äžã®ãçç©ãã®æèèæ ®ã®åã蟌ã¿ã¯ä»¥äžã®ãããªã€ã¡ãŒãžãšãªããŸãã
["çç©ïŒãªãŸãã®ã®æïŒ"]ãïŒã0.2 x ["åºèº«"] + 0.1 x ["ã¯"] + 0.6 x ["çç©"] + 0.1 x ["ã§ã"]
ä»åºŠã¯ã["çç©ïŒãªãŸãã®ã®æïŒ"]ã«ãåºèº«ã£ãœããã2岿··ããããšãšãªããŸããã
æèãèæ ®ããåèªåã蟌ã¿çæãšå¯èŠåã®ã³ãŒãã®äŸ
BERT base Japanese ã«ããåã蟌ã¿çæãšå¯èŠåã®ã³ãŒãã衚瀺/é衚瀺
import torch
from transformers import AutoModel, AutoTokenizer
import numpy as np
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
import japanize_matplotlib
from adjustText import adjust_text
# ã¢ãã«ãšããŒã¯ãã€ã¶ãŒã®ããŒã
model_name = "tohoku-nlp/bert-base-japanese-v3"
model = AutoModel.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
# ããã¹ãã®äŸ
ikimono_sentences = ["ç«ã¯çç©ã§ã", "ç¬ã¯çç©ã§ã", "é³¥ã¯çç©ã§ã", "éã¯çç©ã§ã", "è«ã¯çç©ã§ã", "象ã¯çç©ã§ã", "èã¯çç©ã§ã", "ã¯ãžã©ã¯çç©ã§ã", "ãã®ãã¯çç©ã§ã", "人éã¯çç©ã§ã", "çç©å€æ§æ§", "çç©å
µåšã¯çŠæ¢ãããŠããŸã", "å°çäžã«æåã«çŸããçç©ã¯ïŒ", "ç«æã«çç©ããããã©ããç ç©¶ããŠãã"]
namamono_sentences = ["åºèº«ã¯çç©ã§ã", "ã寿åžã¯çç©ã§ã", "çç¡è £ã¯çç©ã§ã", "çåµã¯çç©ã§ã", "çãã ã¯çç©ã§ã", "çèã¯çç©ã§ã", "çéã¯çç©ã§ã", "çéèã¯çç©ã§ã", "çãã«ãŒãã¯çç©ã§ã", "çã¯ãªãŒã ã¯çç©ã§ã", "çç©ã«ã¯æ³šæãå¿
èŠã§ã", "çç©ã§ãè
¹ãå£ãã", "çç©ã¯å ç±ããæ¹ããã", "çç©ã¯æ¶è²»æéã«æ³šæãå¿
èŠ"]
texts = ikimono_sentences + namamono_sentences
seibutsu_embeddings = [] # ãçç©ãããŒã¯ã³ã®åã蟌ã¿ãæãšäžç·ã«ä¿åãããªã¹ã
# ããã¹ããªã¹ãããåããã¹ããåŠç
for i, text in enumerate(texts):
print(f"\n===== ããã¹ã {i+1}: '{text}' =====")
# ããŒã¯ãã€ãº
inputs = tokenizer(text, return_tensors="pt")
# ã¢ãã«ã«å
¥åããŠåã蟌ã¿ãååŸ
outputs = model(**inputs)
# åã蟌ã¿ã®ååŸ
embeddings = outputs.last_hidden_state
# ããŒã¯ã³ã€ã³ããã¯ã¹ã®ååŸ
token_ids = inputs.input_ids[0]
token_embeddings = embeddings[0]
# ããŒã¯ã³ããšã®åã蟌ã¿ãååŸ
for token_id, embedding in zip(token_ids, token_embeddings):
token_text = tokenizer.convert_ids_to_tokens(token_id.item())
# ããŒã¯ã³ããçç©ãã®å Žåã®ã¿åŠçããŠä¿å
if token_text == "çç©":
print(f"Token ID: {token_id}, ããŒã¯ã³: {token_text}, åãèŸŒã¿æ¬¡å
æ°: {embedding.size(0)}")
# æãšåã蟌ã¿ãã»ããã§ä¿å
seibutsu_embeddings.append({
"text": text,
"embedding": embedding.detach().numpy() # ãã³ãœã«ãNumPyé
åã«å€æããŠä¿å
})
# ä¿åããããŒã¿ã®ç¢ºèª
print(f"\nåèš {len(seibutsu_embeddings)} åã®ãçç©ãåã蟌ã¿ãä¿åããŸãã")
# PCAã®æºå
embeddings_array = np.array([item["embedding"] for item in seibutsu_embeddings])
pca = PCA(n_components=2)
embeddings_2d = pca.fit_transform(embeddings_array)
# å¯èŠåã®æºå
plt.figure(figsize=(10, 8))
# åç¹ã®ã«ããŽãªã倿ããè²ãèšå®
texts_objects = []
for i, item in enumerate(seibutsu_embeddings):
text = item["text"]
x, y = embeddings_2d[i]
# ikimono_sentencesã®èŠçŽ ãªãèµ€è²ãnamamono_sentencesãªãéè²
if text in ikimono_sentences:
color = 'red'
category = 'çãç©'
else:
color = 'blue'
category = 'çç©ïŒãªãŸãã®ïŒé£ã¹ç©ïŒ'
plt.scatter(x, y, c=color)
texts_objects.append(plt.text(x, y, text, fontsize=9))
# ããã¹ãã®äœçœ®ãèªå調æŽ
adjust_text(texts_objects, arrowprops=dict(arrowstyle='->', color='black', lw=0.5))
# ã°ã©ãã®èšå®
# åãèŸŒã¿æ¬¡å
æ°ãåçã«ååŸ
embedding_dim = embeddings_array.shape[1]
plt.title(f'ãçç©ãã®åã蟌ã¿ã®PCAå¯èŠåïŒ{embedding_dim}次å
ãã2次å
ïŒ - ã«ããŽãªå¥è²åã')
explained_variance = pca.explained_variance_ratio_
plt.xlabel(f'第1äž»æå(å¯äžç: {explained_variance[0]:.2%})')
plt.ylabel(f'第2äž»æå(å¯äžç: {explained_variance[1]:.2%})')
# å¡äŸã®è¿œå
from matplotlib.lines import Line2D
legend_elements = [
Line2D([0], [0], marker='o', color='w', markerfacecolor='red', label='çãç©', markersize=10),
Line2D([0], [0], marker='o', color='w', markerfacecolor='blue', label='çç©ïŒãªãŸãã®ïŒé£ã¹ç©ïŒ', markersize=10)
]
plt.legend(handles=legend_elements)
# ã°ãªãã衚瀺
plt.grid(True, linestyle='--', alpha=0.7)
# ã°ã©ãã®è¡šç€º
plt.tight_layout()
plt.savefig('seibutsu_pca.png')
plt.show()

äžå³ã¯ãæ±åå€§åŠ BERT base Japanese v3ã®æçµé ãå±€ããåèªïŒããŒã¯ã³ïŒ= "çç©"ã®åã蟌ã¿ãã¯ãã«ãååŸããŠãPCA次å
åæžã»å¯èŠåãããã®ã§ããäŸãã°ãå³äžæ¹ã®ãç«æã«çç©ããããã©ããç ç©¶ããŠãããã®ããŒã¿ãã€ã³ãã¯ããç«æã«çç©ããããã©ããç ç©¶ããŠããããšãã æã®äžã®"çç©"ãšããåèªã®ã¿ã®åã蟌ã¿ãã¯ãã« ã衚ããŠããŸãããçãç©ãã®æå³ã§äœ¿ãããŠããå Žåã¯ãèµ€ãããªãŸãã®ãã®æå³ã§äœ¿ãããŠããå Žåã¯ãéãã§ããããããŠããŸãã
åèªãå«ãŸããŠããæïŒæèïŒãç°ãªãã°ãåãåèªã§ãç°ãªãåã蟌ã¿ãã¯ãã«ã«å€æãããŠããããšãæèã«ããã°ã«ãŒãïŒã¯ã©ã¹ã¿ãŒïŒã圢æããŠããããšãããããŸãã
å®éã® Transfromer ã§ã¯ãèªå·±æ³šææ©æ§ã¯éå±€çã«å€æ®µéã§é©çšãããŸããæµ ãå±€ã§ã¯åèªéã®çŽæ¥çãªé¢é£æ§ãæããæ·±ãå±€ã«è¡ãã«ãããã£ãŠåã蟌ã¿ã«å«ãŸããŠããæœåšçãªæŠå¿µã®é¢é£æ§ã匷åãããŸãã
äŸãã°ããç«ãã®åã蟌ã¿ã«ã¯ãåºä¹³é¡ãã®æŠå¿µãšã®é¢é£æ§ãå«ãŸããŠããŠããçç©ãã®åã蟌ã¿ã«ããåºä¹³é¡ãã®æŠå¿µãšã®é¢é£æ§ãå«ãŸããŠããŸãããã®ãããèªå·±æ³šææ©æ§ãç¹°ãè¿ãé©çšãããããšã§çæããããçç©ïŒãããã®ã®æïŒãã®åã蟌ã¿ã§ã¯ãåºä¹³é¡ããšããæŠå¿µãšã®é¢é£æ§ã匷åãããŠãããŸãã
äžæ¹ã§ããçç©ïŒãªãŸãã®ã®æïŒãã®åã蟌ã¿ã§ã¯ãåºä¹³é¡ãã®æŠå¿µã匷åããã床åãã¯äœããšèããããŸãã
çµæãšããŠããçç©ïŒãããã®ã®æïŒãã®åã蟌ã¿ã¯ããåºä¹³é¡ããšé«ãé¡äŒŒåºŠãæã¡ãŸããããçç©ïŒãªãŸãã®ã®æïŒãã®åã蟌ã¿ã¯ãåºä¹³é¡ããšã®é¡äŒŒåºŠã¯çžå¯Ÿçã«äœããªããŸãã
æèãèæ ®ããåèªåã蟌ã¿çæãšé¡äŒŒåºŠèšç®ã®ã³ãŒãã®äŸ
BERT base Japanese ã«ããåã蟌ã¿çæãšé¡äŒŒåºŠèšç®ã®ã³ãŒãã衚瀺/é衚瀺
import torch
from transformers import AutoModel, AutoTokenizer
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
from sklearn.metrics.pairwise import cosine_similarity
import pandas as pd
import seaborn as sns
# ã¢ãã«ãšããŒã¯ãã€ã¶ãŒã®ããŒã
model_name = "tohoku-nlp/bert-base-japanese-v3"
model = AutoModel.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
# ããã¹ãã®äŸ
ikimono_sentences = ["ç«ã¯çç©ã§ã", "ç¬ã¯çç©ã§ã", "é³¥ã¯çç©ã§ã", "éã¯çç©ã§ã", "è«ã¯çç©ã§ã", "象ã¯çç©ã§ã", "èã¯çç©ã§ã", "ã¯ãžã©ã¯çç©ã§ã", "ãã®ãã¯çç©ã§ã", "人éã¯çç©ã§ã", "çç©å€æ§æ§", "çç©å
µåšã¯çŠæ¢ãããŠããŸã", "å°çäžã«æåã«çŸããçç©ã¯ïŒ", "ç«æã«çç©ããããã©ããç ç©¶ããŠãã"]
namamono_sentences = ["åºèº«ã¯çç©ã§ã", "ã寿åžã¯çç©ã§ã", "çç¡è £ã¯çç©ã§ã", "çåµã¯çç©ã§ã", "çãã ã¯çç©ã§ã", "çèã¯çç©ã§ã", "çéã¯çç©ã§ã", "çéèã¯çç©ã§ã", "çãã«ãŒãã¯çç©ã§ã", "çã¯ãªãŒã ã¯çç©ã§ã", "çç©ã«ã¯æ³šæãå¿
èŠã§ã", "çç©ã§ãè
¹ãå£ãã", "çç©ã¯å ç±ããæ¹ããã", "çç©ã¯æ¶è²»æéã«æ³šæãå¿
èŠ"]
# ãããæã远å
pet_sentences = ["ç«ã¯äžçäžã§ããããšããŠé£ŒãããŠããŸã"]
texts = ikimono_sentences + namamono_sentences + pet_sentences
seibutsu_embeddings = [] # ãçç©ãããŒã¯ã³ã®åã蟌ã¿ãæãšäžç·ã«ä¿åãããªã¹ã
pet_embeddings = [] # ãããããããŒã¯ã³ã®åã蟌ã¿ãæãšäžç·ã«ä¿åãããªã¹ã
# ããã¹ããªã¹ãããåããã¹ããåŠç
for i, text in enumerate(texts):
print(f"\n===== ããã¹ã {i+1}: '{text}' =====")
# ããŒã¯ãã€ãº
inputs = tokenizer(text, return_tensors="pt")
# ã¢ãã«ã«å
¥åããŠåã蟌ã¿ãååŸ
outputs = model(**inputs)
# åã蟌ã¿ã®ååŸ
embeddings = outputs.last_hidden_state
# ããŒã¯ã³ã€ã³ããã¯ã¹ã®ååŸ
token_ids = inputs.input_ids[0]
token_embeddings = embeddings[0]
# ããŒã¯ã³ããšã®åã蟌ã¿ãååŸ
for token_id, embedding in zip(token_ids, token_embeddings):
token_text = tokenizer.convert_ids_to_tokens(token_id.item())
# ããŒã¯ã³ããçç©ãã®å Žåã®ã¿åŠçããŠä¿å
if token_text == "çç©":
print(f"Token ID: {token_id}, ããŒã¯ã³: {token_text}, åãèŸŒã¿æ¬¡å
æ°: {embedding.size(0)}")
# æãšåã蟌ã¿ãã»ããã§ä¿å
seibutsu_embeddings.append({
"text": text,
"embedding": embedding.detach().numpy(),
"category": "çç©"
})
# ããŒã¯ã³ããããããã®å ŽåãåŠçããŠä¿å
if token_text == "ããã":
print(f"Token ID: {token_id}, ããŒã¯ã³: {token_text}, åãèŸŒã¿æ¬¡å
æ°: {embedding.size(0)}")
# æãšåã蟌ã¿ãã»ããã§ä¿å
pet_embeddings.append({
"text": text,
"embedding": embedding.detach().numpy(),
"category": "ããã"
})
# ä¿åããããŒã¿ã®ç¢ºèª
print(f"\nåèš {len(seibutsu_embeddings)} åã®ãçç©ãåã蟌ã¿ãä¿åããŸãã")
print(f"åèš {len(pet_embeddings)} åã®ãããããåã蟌ã¿ãä¿åããŸãã")
# é¡äŒŒåºŠèšç®ïŒã³ãµã€ã³é¡äŒŒåºŠïŒ
print("\n===== åã蟌ã¿ã®é¡äŒŒåºŠèšç® =====")
# åã蟌ã¿ãnumpyé
åã«å€æ
seibutsu_embeddings_array = np.array([item["embedding"] for item in seibutsu_embeddings])
pet_embeddings_array = np.array([item["embedding"] for item in pet_embeddings])
# ããããšçç©ã®éã®é¡äŒŒåºŠè¡åãèšç®
similarity_matrix = cosine_similarity(pet_embeddings_array, seibutsu_embeddings_array)
# ããã¹ããšã«ããŽãªã®è¡šç€ºçšãªã¹ã
pet_texts = [item["text"] for item in pet_embeddings]
seibutsu_texts = [item["text"] for item in seibutsu_embeddings]
# é¡äŒŒåºŠã®çµæãããŒã¿ãã¬ãŒã ãšããŠæŽåœ¢
similarity_df = pd.DataFrame(similarity_matrix,
index=[f"{text} (ããã)" for text in pet_texts],
columns=[f"{text} (çç©)" for text in seibutsu_texts])
# 衚圢åŒã§ããŒã¯ããŠã³ãšããŠä¿å
similarity_df.to_markdown('similarity_table.md')
print("ããããšçç©éã®é¡äŒŒåºŠããŒãã«ã similarity_table.md ã«ä¿åããŸãã")
# ããŒããããã®æç»
plt.figure(figsize=(15, 8))
sns.heatmap(similarity_matrix, annot=True, cmap='coolwarm',
xticklabels=seibutsu_texts,
yticklabels=pet_texts)
plt.title('ããããšçç©ã®åã蟌ã¿ã®ã³ãµã€ã³é¡äŒŒåºŠ')
plt.xlabel('çç©ããŒã¯ã³ã®åã蟌ã¿')
plt.ylabel('ãããããŒã¯ã³ã®åã蟌ã¿')
plt.tight_layout()
plt.savefig('pet_seibutsu_similarity_heatmap.png')
plt.show()

äžå³ã¯ãæ±åå€§åŠ BERT base Japanese v3ã®æçµé ãå±€ããåèªïŒããŒã¯ã³ïŒ= "çç©"ãš"ããã"ã®åã蟌ã¿ãã¯ãã«ãååŸããŠã³ãµã€ã³é¡äŒŒåºŠãèšç®ãããã®ã§ããæ¿ãèµ€çšé¡äŒŒåºŠãé«ãããšã衚ããŠããŸãã
æèãèæ ®ããåèªåã蟌ã¿çæãšUMAPã«ã次å åæžã®ã³ãŒãã®äŸ
BERT base Japanese ã«ããåã蟌ã¿çæãšUMAPã«ã次å åæžã®ã³ãŒãã衚瀺/é衚瀺
import torch
from transformers import AutoModel, AutoTokenizer
import numpy as np
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
import japanize_matplotlib
from adjustText import adjust_text
# ã¢ãã«ãšããŒã¯ãã€ã¶ãŒã®ããŒã
model_name = "tohoku-nlp/bert-base-japanese-v3"
model = AutoModel.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
# ããã¹ãã®äŸ
ikimono_sentences = ["ç«ã¯çç©ã§ã", "ç¬ã¯çç©ã§ã", "é³¥ã¯çç©ã§ã", "éã¯çç©ã§ã", "è«ã¯çç©ã§ã", "象ã¯çç©ã§ã", "èã¯çç©ã§ã", "ã¯ãžã©ã¯çç©ã§ã", "ãã®ãã¯çç©ã§ã", "人éã¯çç©ã§ã", "çç©å€æ§æ§", "çç©å
µåšã¯çŠæ¢ãããŠããŸã", "å°çäžã«æåã«çŸããçç©ã¯ïŒ", "ç«æã«çç©ããããã©ããç ç©¶ããŠãã"]
namamono_sentences = ["åºèº«ã¯çç©ã§ã", "ã寿åžã¯çç©ã§ã", "çç¡è £ã¯çç©ã§ã", "çåµã¯çç©ã§ã", "çãã ã¯çç©ã§ã", "çèã¯çç©ã§ã", "çéã¯çç©ã§ã", "çéèã¯çç©ã§ã", "çãã«ãŒãã¯çç©ã§ã", "çã¯ãªãŒã ã¯çç©ã§ã", "çç©ã«ã¯æ³šæãå¿
èŠã§ã", "çç©ã§ãè
¹ãå£ãã", "çç©ã¯å ç±ããæ¹ããã", "çç©ã¯æ¶è²»æéã«æ³šæãå¿
èŠ"]
# ãããæã远å
pet_sentences = ["ç¬ã¯ããããšããŠäººæ°ã§ã", "ç«ã¯äžçäžã§ããããšããŠé£ŒãããŠããŸã", "ééããããã§ã", "ãã ã¹ã¿ãŒã¯ãããããããã§ã", "ãããã®å¥åº·ç®¡çã¯å€§åã§ã"]
texts = ikimono_sentences + namamono_sentences + pet_sentences
seibutsu_embeddings = [] # ãçç©ãããŒã¯ã³ã®åã蟌ã¿ãæãšäžç·ã«ä¿åãããªã¹ã
pet_embeddings = [] # ãããããããŒã¯ã³ã®åã蟌ã¿ãæãšäžç·ã«ä¿åãããªã¹ã
# ããã¹ããªã¹ãããåããã¹ããåŠç
for i, text in enumerate(texts):
print(f"\n===== ããã¹ã {i+1}: '{text}' =====")
# ããŒã¯ãã€ãº
inputs = tokenizer(text, return_tensors="pt")
# ã¢ãã«ã«å
¥åããŠåã蟌ã¿ãååŸ
outputs = model(**inputs)
# åã蟌ã¿ã®ååŸ
embeddings = outputs.last_hidden_state
# ããŒã¯ã³ã€ã³ããã¯ã¹ã®ååŸ
token_ids = inputs.input_ids[0]
token_embeddings = embeddings[0]
# ããŒã¯ã³ããšã®åã蟌ã¿ãååŸ
for token_id, embedding in zip(token_ids, token_embeddings):
token_text = tokenizer.convert_ids_to_tokens(token_id.item())
# ããŒã¯ã³ããçç©ãã®å Žåã®ã¿åŠçããŠä¿å
if token_text == "çç©":
print(f"Token ID: {token_id}, ããŒã¯ã³: {token_text}, åãèŸŒã¿æ¬¡å
æ°: {embedding.size(0)}")
# æãšåã蟌ã¿ãã»ããã§ä¿å
seibutsu_embeddings.append({
"text": text,
"embedding": embedding.detach().numpy(),
"category": "çç©"
})
# ããŒã¯ã³ããããããã®å ŽåãåŠçããŠä¿å
if token_text == "ããã":
print(f"Token ID: {token_id}, ããŒã¯ã³: {token_text}, åãèŸŒã¿æ¬¡å
æ°: {embedding.size(0)}")
# æãšåã蟌ã¿ãã»ããã§ä¿å
pet_embeddings.append({
"text": text,
"embedding": embedding.detach().numpy(),
"category": "ããã"
})
# ä¿åããããŒã¿ã®ç¢ºèª
print(f"\nåèš {len(seibutsu_embeddings)} åã®ãçç©ãåã蟌ã¿ãä¿åããŸãã")
print(f"åèš {len(pet_embeddings)} åã®ãããããåã蟌ã¿ãä¿åããŸãã")
# ãã¹ãŠã®åã蟌ã¿ãçµå
all_embeddings = seibutsu_embeddings + pet_embeddings
embeddings_array = np.array([item["embedding"] for item in all_embeddings])
pca = PCA(n_components=2)
embeddings_2d = pca.fit_transform(embeddings_array)
# å¯èŠåã®æºå
plt.figure(figsize=(12, 10))
# åç¹ã®ã«ããŽãªã倿ããè²ãèšå®
texts_objects = []
for i, item in enumerate(all_embeddings):
text = item["text"]
x, y = embeddings_2d[i]
if item["category"] == "ããã":
color = 'green'
category_name = 'ããã'
elif text in ikimono_sentences:
color = 'red'
category_name = 'çãç©'
else:
color = 'blue'
category_name = 'çç©ïŒãªãŸãã®ïŒé£ã¹ç©ïŒ'
plt.scatter(x, y, c=color)
texts_objects.append(plt.text(x, y, text, fontsize=9))
# ããã¹ãã®äœçœ®ãèªå調æŽ
adjust_text(texts_objects, arrowprops=dict(arrowstyle='->', color='black', lw=0.5))
# ã°ã©ãã®èšå®
embedding_dim = embeddings_array.shape[1]
plt.title(f'ãçç©ããšãããããã®åã蟌ã¿ã®PCAå¯èŠåïŒ{embedding_dim}次å
ãã2次å
ïŒ')
explained_variance = pca.explained_variance_ratio_
plt.xlabel(f'第1äž»æå(å¯äžç: {explained_variance[0]:.2%})')
plt.ylabel(f'第2äž»æå(å¯äžç: {explained_variance[1]:.2%})')
# å¡äŸã®è¿œå
from matplotlib.lines import Line2D
legend_elements = [
Line2D([0], [0], marker='o', color='w', markerfacecolor='red', label='çãç©', markersize=10),
Line2D([0], [0], marker='o', color='w', markerfacecolor='blue', label='çç©ïŒãªãŸãã®ïŒé£ã¹ç©ïŒ', markersize=10),
Line2D([0], [0], marker='o', color='w', markerfacecolor='green', label='ããã', markersize=10)
]
plt.legend(handles=legend_elements)
# ã°ãªãã衚瀺
plt.grid(True, linestyle='--', alpha=0.7)
# ã°ã©ãã®è¡šç€º
plt.tight_layout()
plt.savefig('seibutsu_pet_pca.png')
plt.show()
TransformerããŒã¹ã®ã¢ãã«ã®ãŸãšã
TransformerããŒã¹ã®ã¢ãã«ã®ç¹åŸŽã¯ãStatic Embeddingãšã¯ç°ãªããåãåèªã§ãæèã«ãã£ãŠç°ãªãåã蟌ã¿ãçæãããç¹ã§ããäŸãã°ã"bank"ãšããè±èªã®åèªã¯
- ãéè¡ã«è¡ãããšããæã§ã¯éèæ©é¢ãšããŠã®æå³ãåæ ããåã蟌ã¿ã«
- ãåæãæ£æ©ããããšããæã§ã¯æ²³å·æ·ãšããŠã®æå³ãåæ ããåã蟌ã¿ã«
ãããã倿ãããŸãã
äžå³ã¯ãåãåèªïŒ"bank"ïŒãç°ãªãæèã«ãããŠç°ãªãåã蟌ã¿ã«å€æãããäŸã§ãã

Wiedemann ãã®Does BERT Make Any Sense? Interpretable Word Sense Disambiguation with Contextualized Embeddings ããç°ãªãæèã«ããã"bank"ã®ã³ã³ããã¹ãåã蟌ã¿ã®äŸ
ãã®ããã«ãTransformerããŒã¹ã®ã¢ãã«ã¯ãããè±ããªæèæ å ±ãæããããšãã§ããäžæ¹ã§ãèšç®ã³ã¹ããé«ããªããšãããã¬ãŒããªãããããŸãã
æã®åã蟌ã¿
Static Embedding ã¢ãã«ã§ããTransformerããŒã¹ã®ã¢ãã«ã§ãåã蟌ã¿ã¢ãã«ããåŸãããåºåã¯åããŒã¯ã³ã«å¯Ÿå¿ããåã蟌ã¿ãã¯ãã«ã®ç³»åãšãªãããããããå¹ççã«å©çšããããã®å·¥å€«ãå¿ èŠãšãªããŸãã
PoolingïŒããŒãªã³ã°ïŒã®åœ¹å²
åã蟌ã¿ã¢ãã«ã¯å ¥åããã¹ãã®åããŒã¯ã³ã«å¯Ÿå¿ããåã蟌ã¿ã®ç³»åãçæããŸãïŒããŒã¯ã³ã®æ°ã ãåã蟌ã¿ãçæãããïŒããããããã¯ãã«ããŒã¿ããŒã¹ã®ãããªå®éã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãææžããã¬ãŒãºå šäœã1ã€ã®åã蟌ã¿ãšããŠè¡šçŸããã»ããæ±ãããããå¹ççã§ããããã§éèŠãšãªãã®ããPoolingïŒããŒãªã³ã°ïŒãšåŒã°ããæäœã§ãã
Poolingã¯ãè€æ°ã®åã蟌ã¿ããåäžã®åã蟌ã¿è¡šçŸãçæããææ³ã§ããäž»ãªææ³ãšããŠä»¥äžããããŸãã
Mean PoolingïŒå¹³åããŒãªã³ã°ïŒ
æãäžè¬çãªã¢ãããŒãã®1ã€ã§ãå šãŠã®ããŒã¯ã³ã®åã蟌ã¿ã®å¹³åãåããŸããææžå šäœã®æå³ãåçã«åæ ãããç¹åŸŽããããŸãã
CLS Token PoolingïŒCLSããŒã¯ã³ããŒãªã³ã°ïŒ
BERTãªã©ã®Transformerã¢ãã«ã§ãã䜿ãããææ³ã§ããæé ã«ç¹å¥ãªããŒã¯ã³ïŒ[CLS]ïŒãé 眮ãããã®ããŒã¯ã³ã®æçµå±€ã®åºåãææžå šäœã®è¡šçŸãšããŠäœ¿çšããŸããã¢ãã«ã¯åŠç¿æã«ããã®ããŒã¯ã³ãææžå šäœã®æå³ãèŠçŽããããã«èšç·ŽãããŠããŸãã
äžå³ã¯ãMean PoolingïŒå¹³åããŒãªã³ã°ïŒã®ã€ã¡ãŒãžã§ãã

ãã®ãããªããŒãªã³ã°ã«ããåã ã®åèªïŒããŒã¯ã³ïŒã®åã蟌ã¿ãæã£ãŠããç¹åŸŽãåæ ããæã®åã蟌ã¿ãäœãããšãã§ããŸãããŸãã倿°ã®åèªã®åã蟌ã¿ãïŒã€ã®æåã蟌ã¿ã«éçŽããããšã§ã容éãåçã«å°ããããããšãã§ããã¹ãã¬ãŒãžå®¹éãæããããšãã§ããããã«ãåŸã®æ€çŽ¢ã®éã®æŒç®éãå°ãªãããããšãã§ããŸãã

ããã¯åœã»å°æ¹å
±éçžè«ãã£ããããã GovbotïŒã¬ãããïŒã«æèŒãããŠããååéã®FAQããŒã¿ïŒå
šåéïŒã®ãåãããšãåçããé£çµã㊠Cohere Embed 3 ã§åã蟌ã¿ãã¯ãã«åãããã®ã UMAP ã§æ¬¡å
åæžïŒäºæ¬¡å
ãžå°åœ±ïŒããŠå¯èŠåãããã®ã§ãèµ€ãããŒã¿ãã€ã³ãã¯103äžåã150äžåã106äžåã130äžåã®å£ã«é¢ããQAã§ãéã¯ãã以å€ã衚ããŠããŸããXXXäžåã®å£ã«é¢ããQAãåã蟌ã¿ç©ºéäžã§è¿ãã«éãŸã£ãŠããããšãèŠãŠåããŸãã
æåã蟌ã¿ã®è³ªåå¿çã¿ã¹ã¯ãžã®æé©å
Cohere Embed 3 ãåçŽã«åé¢ã䌌ãŠããæã«é«ãé¡äŒŒåºŠãäžããããã§ã¯ãªãããšã®æ€èšŒèšäºã¯ãã¡ãã§ãã
ããã¹ãã®åã蟌ã¿ã䜿ã£ãé¡äŒŒæ§æ€çŽ¢
䌌ãäºç©ã¯ã䌌ãç¹åŸŽãæã¡ã倿¬¡å ã®åã蟌ã¿ç©ºéïŒãã¯ãã«ç©ºéïŒã®äžã§è¿ãã«äœçœ®ããŸãã䌌ããã®ãèŠã€ããã«ã¯ãåã蟌ã¿éã®è·é¢ãèšç®ããŠãæãè¿ãã«äœçœ®ããåã蟌ã¿ãèŠã€ããã°ããããšãšãªããŸãã

åã蟌ã¿ãã¯ãã«ã䜿ã£ãé¡äŒŒæ§æ€çŽ¢ã®ã€ã¡ãŒãž
åã蟌ã¿ç©ºéïŒãã¯ãã«ç©ºéïŒã®äžã«ããã"è¿ã"ã®ææš
| ææš | æå³ |
|---|---|
| L2è·é¢ | ãŠãŒã¯ãªããè·é¢ãšãåŒã°ããã3次å 空éã®ãããçŽèгçãªè·é¢ã«çžåœ |
| ã³ãµã€ã³è·é¢ | ãã¯ãã«éã®è§åºŠã«åºã¥ãè·é¢ïŒ1 â ã³ãµã€ã³é¡äŒŒåºŠïŒ |
| å ç©ïŒããããããã¯ãïŒ | ãã¯ãã«ãšãã¯ãã«ã®å ç©ãè§åºŠã«å ããŠããã¯ãã«ã®å€§ãããåæ ããææšã倧ãããïŒã«æ£èŠåãããšã³ãµã€ã³é¡äŒŒåºŠãšåçã |
ããã¹ãã®åã蟌ã¿ã䜿ã£ãé¡äŒŒæ§æ€çŽ¢ã®ãã¢
ãã®èšäºãé·ããªã£ãŠããŸããŸããã®ã§ãã³ãŒãäŸãå®è¡äŸã¯å¥ã®èšäºã«åé¢ããŸããã
以äžã®ãããªïŒã€ã®ãã¿ãŒã³ã§æ€èšŒããŠããŸãã
- ãã®ïŒïŒããã¹ãã®é¡äŒŒæ§æ€çŽ¢ïŒãã¯ãã«ããŒã¿ããŒã¹ãšã¯ïŒïŒ
- ãã®ïŒïŒããã¹ãã®é¡äŒŒæ§æ€çŽ¢ïŒè¿äŒŒæè¿åæ€çŽ¢ãšã¯ïŒïŒ
- ãã®ïŒïŒè€æ°ã¯ãšãªãŒã®åã蟌ã¿ãã¯ãã«ã®å¹³åã«ããé¡äŒŒæ§æ€çŽ¢
- ãã®ïŒïŒããã¹ãã®ã¯ãã¹ãªã³ã¬ã«ïŒèšèªè·šãã®ïŒé¡äŒŒæ§æ€çŽ¢
- ãã®ïŒïŒæ¥æ¬èªè±èªæ··åšããã¥ã¡ã³ã矀ã«å¯Ÿããé¡äŒŒæ§æ€çŽ¢
- ãã®ïŒïŒããã¥ã¡ã³ãã®å質ãèæ ®ãããŠããïŒåçŽã«è³ªåæã«äŒŒãŠããïŒ
ãã«ãã¢ãŒãã«åã蟌ã¿
ãã«ãã¢ãŒãã«åã蟌ã¿ã¢ãã«ã¯ãç°ãªãçš®é¡ã®ããŒã¿ïŒäŸãã°ãããã¹ããç»åãåç»ãé³å£°ãªã©ïŒãå ±éã®åã蟌ã¿ç©ºéïŒãã¯ãã«ç©ºéïŒã«ãããã³ã°ããæè¡ã§ããããã«ãããç°ãªãã¢ãŒããªãã£ã®ããŒã¿ãçµ±äžçã«æ±ãããšãå¯èœã«ãªããŸãããã«ãã¢ãŒãã«åºç€ã¢ãã«ã®äžçš®ã§ãã
CLIPïŒContrastive Language-Image Pre-trainingïŒ
代衚çãªãã«ãã¢ãŒãã«åã蟌ã¿ã¢ãã«ã«ã¯ãCLIPããããŸãã2021幎ã«OpenAIã«ãã£ãŠå ¬éãããŸããïŒOpenAIã®ããã°ãå®è£ ïŒãCLIPã¯ãã€ã³ã¿ãŒãããçããåéãããå€§èŠæš¡ãªç»åãšããã¹ãã®ãã¢ïŒ4åãã¢ïŒãçšããŠåŠç¿ããŠããŸããåŠç¿ã¯ä»¥äžã®ããã«è¡ãããŸãã
Learning Transferable Visual Models From Natural Language Supervision
Figure 1. Summary of our approach.
- åéããããŒã¿ã»ããããNåã®ç»å-ããã¹ãã®ãã¢ãããã¯ã¢ããããŸãïŒãªãªãžãã«ã® CLIP ã§ã¯ã32768 ã®ãããããæ¯ïŒ
- Nåã®ç»åãšNåã®ããã¹ãããããã®ç¹åŸŽãã¯ãã«ãèšç®ããŸãïŒç»åãšããã¹ãã¯åäžã®åã蟌ã¿ç©ºéã«ãããã³ã°ãããŸãïŒ
- Nåã®ç»åã®ç¹åŸŽãã¯ãã«ãšNåã®ããã¹ãã®ç¹åŸŽãã¯ãã«ã®ãã¹ãŠã®çµã¿åããã®é¡äŒŒåºŠãèšç®ããŸãïŒN^2çµïŒ
- ç»åãšããã¹ãã®çµã¿åãããé¢é£ã®ãããã¢ã§ããå ŽåïŒäžå³ã®å¯Ÿè§ã®æ°Žè²ã®NçµïŒã«é¡äŒŒåºŠãé«ããªããç¡é¢ä¿ãªçµã¿åããã§ããå ŽåïŒN^2 - NçµïŒã«ã¯é¡äŒŒåºŠãäœããªãããã«åŠç¿ããŸã
ããã¹ãã®ç¹åŸŽãã¯ãã«ãçæããããã¹ããšã³ã³ãŒããŒã«ã¯ transformer ããç»åã®ç¹åŸŽãã¯ãã«ãçæããç»åãšã³ã³ãŒããŒã«ã¯ãResNetïŒCNNãããŒã¹ã«ããã¢ãã«ïŒãVision Transformer (ViT)ãå©çšããããšãã§ããŸãã
CLIPã®åŠç¿ã®éã«ã¯ãé¡äŒŒåºŠã®ææšã«ã¯ã³ãµã€ã³é¡äŒŒåºŠïŒ2ã€ã®ãã¯ãã«ã®ãªãè§ãå°ããïŒã³ãµã€ã³ã®å€ã倧ããçšäŒŒãŠãããšã¿ãªãïŒã䜿ãããŠããŸãã
ãã®ãããªåŠç¿ã«ãããããã¹ããšç»åãåäžã®åã蟌ã¿ç©ºéäžã«ãããã³ã°ããããšãã§ããŸãããããŠãåã蟌ã¿ç©ºéäžã®ããã¹ããã¯ãã«ãšç»åãã¯ãã«ã®äœçœ®ã¯ãããã¹ããšç»åãæå³çã«è¿ããã®ã¯è¿ããæå³çã«ç°ãªããã®ã¯é ããžäœçœ®ããããšãšãªããŸãã
ãã®ããšãããããã¹ãã®æå³ã«è¿ãç»åãæ€çŽ¢ããéã«ã¯ãããã¹ããã¯ãã«ã®è¿ãã«ããç»åãã¯ãã«ãèŠã€ããã°è¯ãããšãšãªããŸãããã®è¿ããã¯ãã«ãèŠã€ããã®ã¯ãã¯ãã«ããŒã¿ããŒã¹ã®åœ¹å²ãšãªããŸãã
ãªãããã«ãã¢ãŒãã«åã蟌ã¿ã¢ãã«ïŒç»åèšèªç¹åŸŽæœåºã¢ãã«ïŒã¯ãç»åæ€çŽ¢ã ãã§ãªããç»åã®åé¡ã«ãå©çšã§ããŸãïŒãã¡ããå ã ã®äœ¿ãæ¹ã§ããããŸãïŒã
ç»åæ€çŽ¢ãšã¯æ€çŽ¢ã®æ¹åãéã«ããŠãåãåãããšãªãç»åã®ç»åãã¯ãã«ã®è¿ãã«ããããã¹ããã¯ãã«ãèŠã€ããããšã§ããã®ããã¹ãã衚ãã«ããŽãªïŒåé¡ã¯ã©ã¹ïŒãžã®åé¡ãå®çŸã§ããŸãã
åŸæ¥ã®ç»ååé¡ã¢ãã«ã¯åé¡å¯èœãªã«ããŽãªãŒïŒåé¡ã¯ã©ã¹ïŒãåŠç¿ã«çšããããã©ãã«ã ãã«éå®ãããŠããŸããããCLIPã¯å€§èŠæš¡ãªç»åã»ããã¹ãã®ãã¢ãåŠç¿ããŠããããšããFine-tuningãããããšãªãä»»æã®åé¡ã«ããŽãªãŒã«å¯Ÿããåé¡ãå¯èœã§ããããã¯ãŒãã·ã§ããç»ååé¡ãšåŒã°ããŠããŸãã
CLIPãå©çšããç»ååé¡äŸ
CLIPãå©çšããç»ååé¡ã¢ããªã±ãŒã·ã§ã³äœæã®èšäº
ãã«ãã¢ãŒãã«åã蟌ã¿ã䜿ã£ãç»åã®é¡äŒŒæ§æ€çŽ¢ãšç»ååé¡ã®ãã¢
ãã¡ãããã³ãŒãäŸãå®è¡äŸã¯å¥ã®èšäºã«åé¢ããŸããã
- ç»åæ€çŽ¢ïŒ1ïŒ - ããã¹ããã¯ãšãªãŒãšããç»åã®æ€çŽ¢
- ç»åæ€çŽ¢ïŒ2ïŒ - ç»åãã¯ãšãªãŒãšããç»åã®æ€çŽ¢
- ç»åæ€çŽ¢ïŒ3ïŒ - ããã¹ããã¯ãšãªãŒãšããç»åãšããã¹ãã®ããã¯ã¹æ€çŽ¢
- ç»åæ€çŽ¢ïŒ4ïŒ - ç»åãã¯ãšãªãŒãšããç»åãšããã¹ãã®ããã¯ã¹æ€çŽ¢
- ç»åæ€çŽ¢ïŒ5ïŒ - ECãµã€ããæ³å®ããç»åæ€çŽ¢
- ç»ååé¡ã-ãèªç©ºåçãæŽªæ°Žè¢«å®³ãåããŠããå°åã®ãã®ããããã§ãªããå€å®ããã
措氎ç»åã®å€å®ã«ã€ããŠã¯ã詳现ã以äžã®èšäºã«ãŸãšããŠããŸãã
ãã«ãã¢ãŒãã«åã蟌ã¿ã®å¿çš
ç»åçæãžã®å¿çšïŒïŒïŒ
CLIP ã®å¿çšã¯ãç»åæ€çŽ¢ãåé¡ã ãã«éå®ããããã®ã§ã¯ãããŸãããç»åçæAIãšããŠæå㪠Open AI ã® DALL-E2ãStability AI ã® Stable Diffusion ã Black Forest Labs ã® FLUX.1 çã®ããã³ããã®èšèªçè§£ãšç»åçæã®ã¬ã€ãã®æ©èœãæ ããªã©å¹ åºãåéã«å¿çšãããŠããŸãã

OpenAI ã®è«æïŒHierarchical Text-Conditional Image Generation with CLIP LatentsïŒããåŒçš
ãã®å³ã¯ãOpenAI ã®ç»åçæã¢ãã« DALL-E2ïŒããª2ïŒ ã§æ¡çšãããŠããunCLIPïŒã¢ã³ã¯ãªããïŒã§ãã
å³ã®ç¹ç·ããäžã¯ãCLIPã®åŠç¿éçšã衚ããŠããŠãäžååãCLIPãæŽ»çšããç»åçæã®ä»çµã¿ïŒunCLIPïŒã§ãã
unCLIPã®ç»åçæåŠçã¯ä»¥äžã®ããã«è¡ãããŸãã
- CLIP ã®ããã¹ããšã³ã³ãŒããŒã䜿ã£ãŠãç»åçæããã³ããïŒã³ãŒã®ãŒãçãæŸã€ãã©ã³ããããå¹ããŠããïŒãCLIPã®ããã¹ãåã蟌ã¿ãžå€æãã
- CLIPã®ããã¹ãåã蟌㿠â CLIPã®ç»ååã蟌ã¿ïŒããã unCLIPã®ãã€ã³ãïŒã§ããããšãå©çšããŠã CLIPã®ããã¹ãåã蟌ã¿ã priorïŒæ¡æ£ã¢ãã«ãªã©ïŒã§ç»ååã蟌ã¿ã«å€æ
- ç»åãã³ãŒããŒãç»ååã蟌ã¿ãããã³ãŒã®ãŒãçãæŸã€ãã©ã³ããããå¹ããŠãããç»åãçæãã
2 ã® CLIP ããã¹ãåã蟌ã¿ãã CLIP ç»ååã蟌ã¿ã unCLIP ã®èãšãªããŸãã
unCLIP ã¯ãCLIP ã¢ãã«ã®ãããã¹ãããç»åãžã®å¯Ÿå¿é¢ä¿ããæŽ»çšããŠç»åçæãè¡ãæ¹åŒã§ãã
CLIP ã¯ãç»åãšããã¹ãããã¢ã§åŠç¿ããããšã§ããããããåãç¹åŸŽç©ºéïŒåã蟌ã¿ç©ºéïŒã«ãããã³ã°ã§ãããã«ãã¢ãŒãã«ã¢ãã«ã§ããããã«ãããããšãã°ãa catããšå ¥åãããšããã³ã®ç»åã®ç¹åŸŽãã¯ãã«ã«è¿ãäœçœ®ã«ãããã³ã°ãããããã«ãªã£ãŠããŸãã
äžèŠãããšãCLIP ã®ãããã¹ãã®åã蟌ã¿ããšãç»åã®åã蟌ã¿ãã¯åã空éã«ããã®ã§ãããã¹ãåã蟌ã¿ããã®ãŸãŸäœ¿ã£ãŠç»åãåçŸã§ãããã«æããŸãã
ããããããã¹ãåã蟌ã¿ã¯ãããŸã§ãããã¹ãã®ç¹åŸŽãæããåã蟌ã¿ã§ãã£ãŠç»åãçæããããã«ååãªæ å ±ã¯æã£ãŠããŸããããŸããããã¹ãåã蟌ã¿ãšç»ååã蟌ã¿ã¯ åã空éã®äžã§ãå¥ã®ååžïŒé åïŒ ã«åã£ãŠååšããŠããããšãç¥ãããŠããŸãïŒAndi Marafioti ããã® X æçš¿ïŒããã®ãããããã¹ãåã蟌ã¿ããã®ãŸãŸäœ¿ããšãç»åçæã¢ãã«ãæ³å®ããŠãããç»åçãªç¹åŸŽãã«åãããããŸãç»åãçæã§ããŸããã
ããã§ unCLIP ã§ã¯ãCLIP ã®ããã¹ãåã蟌ã¿ããç»ååã蟌ã¿ã®åœ¢åŒã«å€æãããpriorïŒãã©ã€ã€ïŒããšåŒã°ãã倿åšã䜿ããŸãããã® prior ã¯ãéåžžæ¡æ£ã¢ãã«ãªã©ã§æ§æãããããã¹ããç»åçãªè¡šçŸãžãšå€æããŠãããŸãã
CLIP ãããšããšç»åãšããã¹ãã®æå³çãªå¯Ÿå¿é¢ä¿ãåŠç¿ããŠããããããã® prior ã®åŠç¿ãå¹çããè¡ããé«ãç²ŸåºŠã§æå³ã«åã£ãç»åçæãå¯èœã«ãªããŸãã
ããã¹ãã«ããç»åçæã®èªå°æ¹åŒã«ã¯ãunCLIP以å€ã«ãæ§ã ãªæ¹æ³ããããŸãã
-
Classifier Guidance
ãããããèšç·Žããåé¡åšã䜿ã£ãŠãçæéäžã®ç»åãšããã¹ãããã³ããã®äžèŽåºŠãè©äŸ¡ãããã®æ å ±ããç»åãããã¹ãã®æå³ã«è¿ã¥ããããã«èª¿æŽããæ¹åŒã§ãã -
Classifire-Free Guidance(CFG)
åé¡åšã䜿ãããããã¹ãããã»ãªãã®äž¡æ¹ã®åŠç¿ãéããŠåŸãæ å ±ã䜿ããçæãããã¹ãã®å å®¹ã«æ²¿ãããèªå°ããæ¹åŒã§ããããã¹ããšç»åã®é¢ä¿ã¯ãäº€å·®æ³šææ©æ§ïŒCross-AttentionïŒã«ãã£ãŠäŒéãããŸãã
ãŸããCFG ã®äº€å·®æ³šææ©æ§ã«ããèªå°ã«å ããŠãããã³ããäžã®ç¹å®ã®åèªïŒããšãã°ãballãããdogããªã©ïŒãç»åå
ã«ãã¡ããšåæ ããããããæ³šææ©æ§ïŒAttentionïŒããã®èªã«ååã«ãéäžãããããã«èªå°ããæ¹åŒãšã㊠Attend-and-Excite ããããç¹å®åèªãžã®æ³šæéã¿ãé«ãŸãããã«å¶åŸ¡ããããšã§ã现ããèŠçŽ ã®è¡šçŸæŒãïŒããã³ããäžã«ãballããšãdogããããã®ã«ããŒã«ãæãããªããšãã£ãããšïŒãé²ãããšãã§ããŸãã
Attend-and-Excite: Attention-Based Semantic Guidance for Text-to-Image Diffusion Models
ç»åçæã®èšäº
FLUX.1 ã䜿ã£ãç»åçæã¢ããªã±ãŒã·ã§ã³ã ComfyUI ã®äœ¿ãæ¹
ç»åçæãžã®å¿çšïŒïŒïŒ
ãããã¹ãã®åã蟌ã¿ã䜿ã£ãé¡äŒŒæ§æ€çŽ¢ã®ãã¢ãã®ããã®ïŒïŒè€æ°ã¯ãšãªãŒã®åã蟌ã¿ãã¯ãã«ã®å¹³åã«ããé¡äŒŒæ§æ€çŽ¢ãã§ã¯ãåã蟌ã¿ãã¯ãã«ã«å¯ŸããŠç®è¡æŒç®ãå¯èœã§ããããšããç»åçæãžã®å¿çšïŒïŒïŒã§ã¯ãCLIPãªã©ã®åã蟌ã¿ãã¯ãã«ãç»åçæã«å¿çšãããŠããããšãèŠãŠæ¥ãŸããããã®ïŒã€ãçµã¿åããããšäžã®ç«ããã©ã€ãªã³ãžå€èº«ãããããªåç»ãäœãããšãã§ããŸãã
äžã®åç»ã¯ãæŠç¥ä»¥äžã®ãããªæé ã§äœãããŠããŸãã
- ãç«ããã©ã€ãªã³ãžãæ¹åïŒåã蟌ã¿ïŒãã¯ãã«ãäœã
- "Lion"ïŒã©ã€ãªã³ïŒ ãšããåèªãå«ãã æãã€ãã
- "Domestic cat"ïŒå®¶ç«ïŒãšããåèªãå«ãã æãã€ãã
- 2ã€ã®æã®åã蟌ã¿ãã¯ãã«ãçæãã
- 2ã€ã®åã蟌ã¿ãã¯ãã«ã®å·®åãåãïŒã©ã€ãªã³æ - å®¶ç«æïŒ
- ãããŸã§ã®æäœãæ°çŸåç¹°ãè¿ããŠå¹³åãåããããããç«ããã©ã€ãªã³ãžãæ¹åãã¯ãã«ãšãã
- ç»å矀ãçæãã
- ç»åçæããã³ãã"A cat in the park"ã®åã蟌ã¿ãã¯ãã«ã«ãç«ããã©ã€ãªã³ãžãæ¹åãã¯ãã«ã®ãäŸãã°1/10ãå ç®ãã
- ãã®å ç®ãããåã蟌ã¿ãã¯ãã«ã§ç»åçæãã¬ã€ããã
- ãã®åŠçãç¹°ãè¿ã
äžèšã®ãµã€ãã§å®éã«è©ŠããŠã¿ãããšãã§ããŸããPrompt ã« "A cat in the park" ã®ãããªåç»ã®åºçºç¹ãšãªãããã³ãããã1st direction to steer Starting state ã«ããDomestic catãã®ãããªå€åã®èµ·ç¹ãšãªãããã³ãããã2nd direction to steer Finishing state ã«ãLionãã®ãããªå€åã®çµç¹ãšãªãããã³ãããèšå®ããŠ"Generate directions"ãã¯ãªãã¯ãããšåç»ãçæãããŸããããŸãè¡ããªãããšãå€ãã§ãããããã詊ããŠæ¥œããã§ã¿ãŠãã ãããäžã® GIF ç»åããã®ã¢ããªã±ãŒã·ã§ã³ã§äœæãããã®ã§ãã
ãŸãããã® Lattent Navigation ã¯äžèšã®2ã€ãå
ã«ããŠããŸãã
Semantic Sliders
Traversing through CLIP Space, PCA and Latent Directions
| ããã³ãã | 1st direction to steer Starting state | 2nd direction to steer Finishing state |
| a house | urban USA style | traditional Japanese style |
| çæç»å |
|
|
ãªããSemantic Sliders ã®ã³ãŒããèªãã§ã¿ããšçæãããäŸæã®ãã³ãã¬ãŒãã¯ããDomestic catãããLionãã®ãããªèšèãå ¥åãããããšãæå³ããŠããŸãããããã§ããããŸãè¡ã£ãŠãããšãããé¢çœãã§ãããèå³ã®ããæ¹ã¯ãclip_slider_pipeline.pyãšconstants.py ãèªãã§ã¿ãŠãã ããã
è¶ é«è§£å床ãªã¢ãŒãã€ã¡ãŒãžã»ã³ã·ã³ã°ç»åã®è§£æïŒImage RAG

Enhancing Ultra High Resolution Remote Sensing Imagery Analysis with ImageRAG Figure 1 ãã
è¡æç»åãªã©ã®è¶
é«è§£å床ãªã¢ãŒãã»ã³ã·ã³ã°ç»åãå»çç»åã®äžã«ã¯ãè§£å床ãé«ãããŠçŸåšå©çšã§ããRemote Sensing Vision Language Models (RSVLMs)ã§ã¯è§£æã§ããªãã®ããããŸãããã®ãããªçšéã«ç»åã«å¯Ÿãã RAG ãææ¡ãããŠããŸãã
éåžžã®ããã¹ãæ
å ±ã«å¯Ÿãã RAG ã§ã¯ãããã¥ã¡ã³ãããã£ã³ã¯ã«åå²ããŠããããåã蟌ã¿ãã¯ãã«ãžå€æããŠããã¯ãã«ããŒã¿ããŒã¹ãžæ ŒçŽããŸãããImage RAG ã§ã¯ãè¶
é«è§£å床ç»åããããã«åå²ããŠããã®ãããã®åã蟌ã¿ãã¯ãã«ããã¯ãã«ããŒã¿ããŒã¹ãžæ ŒçŽããŸãããŸããéåžžã®ããã¹ãæ
å ±ã«å¯Ÿãã RAG ã§ã¯ããã¯ãã«ããŒã¿ããŒã¹ããååŸããããã¹ããã£ã³ã¯çŸ€ã¯ãLLM ã«ã³ã³ããã¹ããšããŠå
¥åãããŠããŠãŒã¶ãŒã®è³ªåãžã®åçãçæãããŸãããImage RAG ã§ã¯ãLLM ã®ä»£ããã« VLM(ãã«ãã¢ãŒãã«LLM)ã䜿ãããŸãã

Enhancing Ultra High Resolution Remote Sensing Imagery Analysis with ImageRAG Figure 6 ãã
ã·ã§ãŒãåç»æçš¿ãµã€ãã®åç»ã¬ã³ã¡ã³ããŒã·ã§ã³
A Multi-modal Modeling Framework for Cold-start Short-video Recommendation ãã
ãã®è«æã®ã·ã§ãŒãåç»æçš¿ãµã€ãã§ã¯ããŠãŒã¶ãŒã®è¡åå±¥æŽãšåç»ã®ãã«ãã¢ãŒãã«åã蟌ã¿ãã¯ãšãªãŒãšããŠãåç»ã®æ åãé³é¿ãããã¹ãïŒã¿ã€ãã«ãé³å£°ã®æžãèµ·ããïŒã®åã蟌ã¿ãã¯ãã«ã«åç»ã®ã¯ã©ã¹ã¿ãŒããšã®èŠèŽåŸåãçµ±åãããã«ãã¢ãŒãã«åã蟌ã¿ãæ€çŽ¢å¯Ÿè±¡ãšãããã¯ãã«æ€çŽ¢ã«ãã£ãŠãµã€ã蚪åè
ãžã®æšå¥šåç»ã®æç€ºãè¡ã£ãŠããŸãïŒããã¯ç ç©¶ã§ã¯ãªããããã¯ã·ã§ã³ã§çšŒåããŠãããã®ã§ãïŒã
ãã®ãããªã¬ã³ã¡ã³ããŒã·ã§ã³ã·ã¹ãã ã§ã¯ãæ°èŠã«æçš¿ãããåç»ã®ãããªèŠèŽå±¥æŽã®å°ãªãåç»ã®ã¬ã³ã¡ã³ããŒã·ã§ã³ãã©ãããããšããã³ãŒã«ãã¹ã¿ãŒãåé¡ã課é¡ã§ããããã®ãµã€ãã§ã¯ã1,000äžãè¶
ããåç»ã®ãã«ãã¢ãŒãã«åã蟌ã¿ã k-means ã«ããçŽ1,000ã®ãã¯ã©ã¹ã¿ã«åé¡ããæ°èŠã®åç»ããã®1,000ã®ã¯ã©ã¹ã¿ã®ããããã«åé¡ããããšã«ããããã®ã¯ã©ã¹ã¿ã®èŠèŽåŸåã䜿ã£ãŠé©åãªãŠãŒã¶ãŒãžæšå¥šããããšãå®çŸããŠããŸãã
åã蟌ã¿ã掻çšãã RAG ã®ç²ŸåºŠåäžç
ãŠãŒã¶ãŒã®è³ªåæã®ã¯ã©ã¹ã¿ãŒåæã«ããããã¥ã¡ã³ãã®æ¹å

åœã»å°æ¹å
±éçžè«ãã£ããããã GovbotïŒã¬ãããïŒã«æèŒãããŠããååéã®FAQããŒã¿ïŒå
šåéïŒã®ãåããã UMAP ã§æ¬¡å
åæžïŒäºæ¬¡å
ãžå°åœ±ïŒããŠå¯èŠåãããã®
RAG ã䜿ã£ãŠãããã©ããã«é¢ãããåãåããå¿çã·ã¹ãã ã§ã¯ãéçºè åŽãæ³å®ãã質åãšå®éã«ãŠãŒã¶ãŒãæå ¥ãã質åã調ã¹ãŠã¿ããšåœåæ³å®ããŠããªãã£ã質å矀ãå«ãŸããŠããããšããããŸããéçºåŽã¯æ³å®ãã質åã«å¯ŸããåçãLLMãçæã§ããããã«ããã¥ã¡ã³ããçšæããŸããããã®ãããªä¹é¢ããããš RAG ã·ã¹ãã ã¯é©åãªåçãçæããããšãã§ããŸãããå®éã«æå ¥ããã質å矀ãã¯ã©ã¹ã¿ãŒåæããããšã§ã©ã®ãããªè³ªåãå€ãæå ¥ãããŠããã®ããç¥ãããšãã§ããããã¥ã¡ã³ãã®æ¹åã«é¢ããæŽå¯ãåŸãããšãã§ããŸãã
ãŸãšã
æ¬èšäºã§ã¯ãçæAIãäŒæ¥ã§å®çšçã«æŽ»çšããäžã§éèŠãšãªãåãèŸŒã¿æè¡ã«ã€ããŠãåºç€ããå¿çšãŸã§å¹ åºã解説ããŸããã以äžã«äž»ãªãã€ã³ãããŸãšããŸãã
RAGãšåã蟌ã¿ã®åºç€
- RAGïŒæ€çŽ¢æ¡åŒµçæïŒã¯ããã«ã·ããŒã·ã§ã³äœæžã瀟å åºæç¥èãžã®å¯Ÿå¿ãææ°æ å ±ãžã®å¯Ÿå¿ãªã©ã®å©ç¹ãæã€
- RAGã®ããã»ã¹ã¯ãããŒã¿ã®æºåãšåã蟌ã¿åŠçãâããã¯ãã«æ€çŽ¢ãâãLLMã«ããåççæãã®3ã¹ããã
- åã蟌ã¿ã¯RAGã®äžæ žæè¡ã§ãããããã¹ããç»åãªã©ã®ããŒã¿ããã¯ãã«ç©ºéäžã®ç¹ãšããŠè¡šçŸãã
ããã¹ãåã蟌ã¿ã®æè¡
- ããŒã¯ã³åã¯ããã¹ããæå³ã®ããæå°åäœã«åå²ããååŠç
- éçåã蟌ã¿ïŒWord2Vecãªã©ïŒã¯æèã«äŸåããªãåºå®ããã衚çŸãçæ
- TransformerããŒã¹ã®åã蟌ã¿ã¯æèãèæ ®ããåçãªè¡šçŸãçæããå€çŸ©èªã®åé¡ã«å¯Ÿå¿
- ããŒãªã³ã°ïŒMean Poolingãªã©ïŒã«ãããããŒã¯ã³åäœã®åã蟌ã¿ããææžå šäœã®åã蟌ã¿ãçæ
ãã«ãã¢ãŒãã«åã蟌ã¿
- CLIPãªã©ã®ãã«ãã¢ãŒãã«åã蟌ã¿ã¢ãã«ã¯ãããã¹ããšç»åãåããã¯ãã«ç©ºéã«ãããã³ã°
- ããã«ãããããã¹ãã«ããç»åæ€çŽ¢ãç»åã«ããç»åæ€çŽ¢ãªã©å€æ§ãªæ€çŽ¢ãå¯èœã«
- ç»åçæAIïŒDALL-E2ãªã©ïŒã§ãCLIPã®åãèŸŒã¿æè¡ã掻çšãããŠãã
åã蟌ã¿ã®å¿çšäŸ
- ãã¯ãã«æ€çŽ¢ã«ããé¢é£ææžã®å¹ççãªæ€çŽ¢
- ç»åæ€çŽ¢ãç»ååé¡
- ç»åçæã®å¶åŸ¡ãå€åãäžããæäœ
- è¶ é«è§£å床ç»åã®è§£æïŒImage RAGïŒ
- åç»æšèŠã·ã¹ãã ã«ãããã³ãŒã«ãã¹ã¿ãŒãåé¡ã®è§£æ±º
åãèŸŒã¿æè¡ã®çè§£ãæ·±ããããšã§ããã广çãªRAGã·ã¹ãã ã®æ§ç¯ãå¯èœã«ãªããŸããéçåã蟌ã¿ããTransformerããŒã¹ã®æèèæ ®ååã蟌ã¿ããããŠãã«ãã¢ãŒãã«åã蟌ã¿ãžãšé²åããŠããæè¡ã¯ãä»åŸãçæAIã®å®çšåã«ãããŠäžå¿çãªåœ¹å²ãæ ã£ãŠããã§ãããã
ãã²ããã®èšäºã§ç޹ä»ããæŠå¿µãæè¡ãå®éã®æ¥åã«å¿çšããçæAIã®å¯èœæ§ãæå€§éã«åŒãåºããŠãã ããã
çšèªã®æŽç
| çšèªïŒè±èªïŒ | æ¥æ¬èª | æå³ |
|---|---|---|
| BPE | ãã€ããã¢ãšã³ã³ãŒãã£ã³ã° | ããŒã¯ã³åã¢ã«ãŽãªãºã ã®äžçš®ã§ãé »åºããæååã®ãã¢ãç¹°ãè¿ãçµåããŠããããšã§å¹ççãªèªåœãæ§ç¯ããææ³ïŒByte Pair EncodingïŒãæªç¥èªãçšãªåèªã«å¯Ÿå¿ããªãããèªåœãµã€ãºãæããããšãã§ããã |
| CLIP | ã¯ãªãã | OpenAIã«ãã£ãŠéçºããããã«ãã¢ãŒãã«åã蟌ã¿ã¢ãã«ã§ãããã¹ããšç»åãåãåã蟌ã¿ç©ºéã«ãããã³ã°ããïŒContrastive Language-Image Pre-trainingïŒãå€§èŠæš¡ãªç»å-ããã¹ããã¢ãçšããŠåŠç¿ãããç»åæ€çŽ¢ãåé¡ãç»åçæã®ã¬ã€ããªã©å¹ åºãçšéã«å¿çšãããŠããã |
| Contrastive Learning | å¯Ÿç §åŠç¿ | é¡äŒŒããããŒã¿ãã€ã³ããè¿ã¥ããç°ãªãããŒã¿ãã€ã³ããé ãããããã«è¡šçŸãåŠç¿ããææ³ããã«ãã¢ãŒãã«åã蟌ã¿ã¢ãã«ã§ããCLIPãªã©ã§äœ¿çšãããç°ãªãã¢ããªãã£éã®å¯Ÿå¿é¢ä¿ã广çã«åŠç¿ã§ãããé¢é£ããããŒã¿ãã¢ïŒæ£äŸïŒãšããã§ãªããã¢ïŒè² äŸïŒã®å¯Ÿæ¯ãéããŠåã蟌ã¿ç©ºéã®æ§é ã圢æããã |
| Cosine Similarity | ã³ãµã€ã³é¡äŒŒåºŠ | 2ã€ã®ãã¯ãã«éã®é¡äŒŒåºŠãæž¬ãææšã§ããã¯ãã«éã®ãªãè§ã®ã³ãµã€ã³å€ãèšç®ãããå€ã1ã«è¿ãã»ã©é¡äŒŒåºŠãé«ãã-1ã«è¿ãã»ã©é¡äŒŒåºŠãäœãããšã瀺ããåã蟌ã¿ãã¯ãã«éã®æå³çé¡äŒŒæ§ãè©äŸ¡ããã®ã«ãã䜿ãããã |
| Cross-Attention | äº€å·®æ³šææ©æ§ | ç°ãªãå ¥åã·ãŒã±ã³ã¹éã®é¢é£æ§ãèšç®ããæ³šææ©æ§ãäŸãã°ãããã¹ã-ç»åã¢ãã«ã«ãããŠãããã¹ãã®ç¹åŸŽãç»åã®ç¹å®éšåã«ã©ã®çšåºŠæ³šç®ãã¹ãããæ±ºå®ãããç»åçæã¢ãã«ã§ã¯ããã¹ãããã³ãããšçæäžã®ç»åéã®é¢é£ä»ãã«äœ¿ããããèªå·±æ³šææ©æ§ãåäžã·ãŒã±ã³ã¹å ã®é¢ä¿æ§ãæããã®ã«å¯Ÿããäº€å·®æ³šææ©æ§ã¯ç°ãªãã¢ããªãã£éã®é¢ä¿æ§ãæããã |
| Cross-lingual | ã¯ãã¹ãªã³ã¬ã« | è€æ°ã®èšèªã«ãŸããããšããæå³ãã¯ãã¹ãªã³ã¬ã«åã蟌ã¿ã¯ãç°ãªãèšèªã®ããã¹ããåãåã蟌ã¿ç©ºéã«å€æããèšèªéã®æå³ç察å¿é¢ä¿ãæããããšãã§ããæè¡ã |
| Embedding | åã蟌㿠|
1. ææ³ãšããŠã®åãèŸŒã¿ é«æ¬¡å ããŒã¿ïŒããã¹ããç»åãªã©ïŒãäœæ¬¡å ã®å¯ãªãã¯ãã«ç©ºéã«å€æãããã®ãæå³çã»æŠå¿µçãªé¢ä¿æ§ãä¿ã¡ãªãããããŒã¿ãå¹ççã«è¡šçŸããææ³ã 2. 衚çŸãšããŠã®åã蟌㿠äžèšã®ææ³ã«ãã£ãŠçæãããäœæ¬¡å ãã¯ãã«èªäœããåã蟌ã¿ããšåŒã°ãããæ·±å±€åŠç¿ã«ãã£ãŠåŸãããç¹åŸŽãã¯ãã«ãç¹ã«ãåã蟌ã¿ããšåŒã¶ãããŒã¿ã®æå³çã»æŠå¿µçé¢ä¿æ§ãä¿æããŠããããŸããããããããåã蟌ã¿ãã¯ãã«ããããã¯ãåã«ãã¯ãã«ãšè¡šçŸãããããšãå€ãã |
| Embedding Model | åã蟌ã¿ã¢ãã« | ããŒã¿ãç¹å®ã®æ¬¡å ã®åã蟌ã¿ãã¯ãã«ã«å€æããããã«èšç·Žãããæ©æ¢°åŠç¿ã¢ãã«ãããŒã¿ã®æå³çé¢ä¿ãæ°åŠç空éã«è¡šçŸã§ããããèšèšãããŠãããç»åãåç»ãé³å£°ãªã©ã®ããã¹ã以å€ã®ã¢ãŒãã«ã®ããŒã¿ãåã蟌ã¿ãã¯ãã«ãžå€æããã¢ãã«ãããã |
| Embedding Space | åã蟌ã¿ç©ºé | åã蟌ã¿ãã¯ãã«ãååšããæ°åŠçãªç©ºéãåããŒã¿ãã€ã³ããæå³çãªé¢ä¿æ§ãä¿ã¡ãªãããããã³ã°ããã倿¬¡å 空éã§ãããé¡äŒŒããããŒã¿ã¯ç©ºéå ã§è¿ãäœçœ®ã«é 眮ãããç°ãªãããŒã¿ã¯é ãäœçœ®ã«é 眮ãããããã®ç©ºéå ã§ã®è·é¢ãæ¹åãæå³ãæã¡ããã¯ãã«æŒç®ïŒå ç®ãæžç®ãé¡äŒŒåºŠèšç®ãªã©ïŒãéããŠããŒã¿ã®é¢ä¿æ§ãæ¢çŽ¢ã§ããã |
| Feature Vector | ç¹åŸŽãã¯ãã« | ããŒã¿ã®ç¹åŸŽãæ°å€ã®ãã¯ãã«åœ¢åŒã§è¡šçŸãããã®ãæ©æ¢°åŠç¿ã¢ã«ãŽãªãºã ãåŠçããããããã«ãçããŒã¿ããæœåºãããç¹åŸŽãæ°å€åãããã¯ãã«ã |
| Hallucination | ãã«ã·ããŒã·ã§ã³ | å€§èŠæš¡èšèªã¢ãã«ïŒLLMïŒãäºå®ã«åºã¥ããªãæ å ±ãååšããªãæ å ±ãçæããŠããŸãçŸè±¡ãRAGãæŽ»çšããããšã§ãå€éšããŒã¿ããŒã¹ããã®æ£ç¢ºãªæ å ±åç §ã«ããããã®ãããªå¹»èŠãäœæžããããšãã§ããã |
| Image RAG | ã€ã¡ãŒãžRAG | è¶ é«è§£å床ç»åã®è§£æã«å¯Ÿå¿ãããããç»åããããã«åå²ããŠåã蟌ã¿ãã¯ãã«åãããã¯ãã«ããŒã¿ããŒã¹ã§æ€çŽ¢ããŠãã«ãã¢ãŒãã«LLMïŒVLMïŒã«æäŸããRAGã®ç»åçïŒImage Retrieval-Augmented GenerationïŒãè¡æç»åãå»çç»åãªã©ã®åæã«æŽ»çšãããã |
| Multimodal Embedding Model | ãã«ãã¢ãŒãã«åã蟌ã¿ã¢ãã« | è€æ°ã®çš®é¡ã®ããŒã¿ã¢ããªãã£ïŒããã¹ããç»åãé³å£°ãåç»ãªã©ïŒãåäžã®åã蟌ã¿ç©ºéã«å€æã§ããã¢ãã«ãç°ãªãã¢ããªãã£ã®ããŒã¿éã®é¢ä¿æ§ãæããã¯ãã¹ã¢ãŒãã«æ€çŽ¢ãç°çš®ããŒã¿éã®é¡äŒŒæ§èšç®ãªã©ãå¯èœã«ãããäŸãã°ããã¹ããšç»åãåãåã蟌ã¿ç©ºéã«ãããã³ã°ããããšã§ãããã¹ãããé¢é£ç»åãæ€çŽ¢ããããç»åã®å 容ãããã¹ãã§èª¬æãããããããšãã§ããã |
| PCA | äž»æååæ | 髿¬¡å ããŒã¿ã®åæ£ãæå€§åããæ¹åïŒäž»æåïŒãç¹å®ããéèŠãªæ å ±ãä¿æããªããããŒã¿ã®æ¬¡å ãåæžããææ³ïŒPrincipal Component AnalysisïŒãåã蟌ã¿ãã¯ãã«ã®å¯èŠåããã€ãºé€å»ãªã©ã«äœ¿çšããããUMAPãªã©ãšæ¯èŒããŠç·åœ¢å€æã§ããããè§£éãããããããéç·åœ¢ãªé¢ä¿ã®ä¿æã¯é£ããã |
| Pooling | ããŒãªã³ã° | è€æ°ã®åã蟌ã¿ããåäžã®åã蟌ã¿è¡šçŸãçæããææ³ãMean PoolingïŒå¹³åããŒãªã³ã°ïŒãCLS Token PoolingïŒCLSããŒã¯ã³ããŒãªã³ã°ïŒãªã©ãããã |
| RAG | æ€çŽ¢æ¡åŒµçæ | å€éšç¥èæºããé¢é£æ å ±ãæ€çŽ¢ããŠèšèªã¢ãã«ã®çæããã»ã¹ãæ¡åŒµããææ³ïŒRetrieval-Augmented GenerationïŒãLLMã®åºæ¬çãªç¥èãæŽ»ãããªãããå€éšããŒã¿ããŒã¹ããæ€çŽ¢ããææ°ãŸãã¯ç¹å®é åã®æ å ±ãçµã¿åãããããšã§ãããæ£ç¢ºã§å ·äœçãªåçãçæã§ããããã«ã·ããŒã·ã§ã³ïŒå¹»èŠïŒã®äœæžãçµç¹åºæã®ç¥èãžã®å¯Ÿå¿ãææ°æ å ±ãžã®å¯Ÿå¿ãªã©ã®å©ç¹ãããã |
| Self-Attention Mechanism | èªå·±æ³šææ©æ§ | ã·ãŒã±ã³ã¹ã®åèŠçŽ ãä»ã®ãã¹ãŠã®èŠçŽ ãšã®é¢é£æ§ãèæ ®ã§ããããã«ããæ©æ§ãå ¥åã·ãŒã±ã³ã¹å ã®ä»»æã®äœçœ®ã®åèªéã®äŸåé¢ä¿ãã¢ãã«åããããšãã§ããæèãèæ ®ãã衚çŸã®çæãå¯èœã«ããã |
| Static Embedding | éçåã蟌㿠| æèã«äŸåãããåèªã«åžžã«åããã¯ãã«è¡šçŸãå²ãåœãŠãåãèŸŒã¿ææ³ãWord2VecãGloVeãFastTextãªã©ã®ææ³ã該åœãããèšç®å¹çãè¯ã軜éã ããå€çŸ©èªã®ç°ãªãæå³ãåºå¥ã§ããªããšããå¶éãããã |
| Token | ããŒã¯ã³ | ããã¹ããåŠçããéã®åºæ¬åäœãèšèªã¢ãã«ãNLPã¿ã¹ã¯ã«ãããŠãããã¹ãã¯ããŒã¯ã³ã®åãšããŠæ±ããããããŒã¯ã³ã¯åèªãéšååèªãæåãèšå·ãªã©ã®åœ¢æ ã§è¡šãããã¢ãã«ãã¿ã¹ã¯ã«ãã£ãŠå®çŸ©ãç°ãªããäŸãã°ããå¯å£«å±±ãã¯1ããŒã¯ã³ã®å Žåãããã°ããå¯/士/å±±ãã®ããã«è€æ°ã®ããŒã¯ã³ã«åå²ãããå ŽåããããåããŒã¯ã³ã¯éåžžãæ°å€IDïŒæŽæ°ïŒã«å€æãããŠã¢ãã«ã«å ¥åãããã |
| Tokenizer | ããŒã¯ãã€ã¶ãŒ | ããã¹ãïŒæååïŒãããŒã¯ã³ã®ã·ãŒã±ã³ã¹ã«å€æããããŒã«ãã¢ã«ãŽãªãºã ãããŒã¯ãã€ã¶ãŒã¯ããã¹ããåå²ããåããŒã¯ã³ã«äžæã®IDãå²ãåœãŠãæ©èœãæã€ããŸããç¹æ®ããŒã¯ã³ïŒæã®éå§/çµäºãäžæåèªãªã©ïŒã®è¿œå ããããŒã¯ã³åã®é·ãã®èª¿æŽïŒããã£ã³ã°ãåãè©°ãïŒãªã©ãè¡ããèšèªã¢ãã«ããšã«å°çšã®ããŒã¯ãã€ã¶ãŒãèšèšãããŠãããã¢ãã«ã®èšç·Žãšæšè«ã§åãããŒã¯ãã€ã¶ãŒã䜿çšããå¿ èŠãããã |
| Transformer | ãã©ã³ã¹ãã©ãŒã㌠| èªå·±æ³šææ©æ§ïŒSelf-Attention MechanismïŒãäžå¿ãšãããã¥ãŒã©ã«ãããã¯ãŒã¯ã¢ãŒããã¯ãã£ãæèãèæ ®ããåã蟌ã¿ãçæã§ããBERTãGPTãªã©ã®åºç€ãšãªã£ãŠããã |
| UMAP | ãŠãŒããã | 髿¬¡å ããŒã¿ãäœæ¬¡å ïŒéåžž2次å ã3次å ïŒã«çž®çŽããæ¬¡å åæžã¢ã«ãŽãªãºã ïŒUniform Manifold Approximation and ProjectionïŒãããŒã¿ã®å±æçããã³å€§åçæ§é ãä¿æããªããå¯èŠåããã®ã«é©ããŠãããåã蟌ã¿ãã¯ãã«ã®å¯èŠåãã¯ã©ã¹ã¿ãŒåæãªã©ã«äœ¿çšãããã |
| unCLIP | ã¢ã³ã¯ãªãã | OpenAIã®DALL-E2ã§æ¡çšãããŠããç»åçææ¹åŒã§ãCLIPã®åã蟌ã¿ç©ºéã«ããããããã¹ãããç»åãžã®å¯Ÿå¿é¢ä¿ããæŽ»çšããŠç»åçæãè¡ããCLIPã®ããã¹ãåã蟌ã¿ãpriorïŒæ¡æ£ã¢ãã«ãªã©ïŒã§ç»ååã蟌ã¿ã«å€æãããã®åŸç»åãã³ãŒããŒã§å®éã®ç»åãçæããã |
| Vector Database | ãã¯ãã«ããŒã¿ããŒã¹ | åã蟌ã¿ãã¯ãã«ãå¹ççã«æ ŒçŽããé¡äŒŒåºŠã«åºã¥ããæ€çŽ¢ãå¯èœã«ããããŒã¿ããŒã¹ãRAGã·ã¹ãã ã«ãããŠãã¯ãšãªã«é¢é£ããææžãé«éã«æ€çŽ¢ããããã«äœ¿çšãããã |





















