Solrã§ãRAGã§ããããïŒã®è£è©±
ã¯ããã«
å æ¥ãSolr ãããã¯ãšã³ãã« RAGïŒRetrieval Augmented GenerationïŒããããšããèšäºãæžããŸããã
ãã®èšäºã§ã¯ãé 颚æºåžãªããã«æžããŸããããè£ã§ã¯ãããããšèºããã€ã³ãããããŸããã
æ¬èšäºã§ã¯ããã®çŽäœæ²æã®éçšãã玹ä»ããŸãã
ãŸãããµã³ãã«ã³ãŒããå
¬éããŸããã
èªèº«ã®ãæå
ã§è©ŠããŠã¿ãããšãã®åèã«ã©ããã
ã³ã³ãèŠåŽããïŒ
eurelis-langchain-solr-vectorstore ã®å¶çŽãå³ãã
Solr ãš LangChain ãã€ãªãããã« eurelis-langchain-solr-vectorstore ãšããã©ã€ãã©ãªã䜿ãããŠããã£ãŠããŸãã
åã®ã©ã€ãã©ãªã䜿ãæå€§ã®æ©æµã¯ãæ®æ®µã¯é¢åãªæ©æ¢°åŠç¿éšåã®åŠçããã©ãã¯ããã¯ã¹åãããã£ãæ°è¡ã§å®è£
ã§ããŠããŸããšããç¹ã§ãã
åé¢ãååèšäºã§ãè§Šããéã Python3.11 ã§ããã€ã³ã¹ããŒã«ã§ããªããªã©ãããããšå³ããå¶çŽãä»ããŠããŸãã
䜿çšå¯èœãªåã¯éå®ãããŠãã
eurelis-langchain-solr-vectorstore ã䜿ã£ãŠ Solr ã«ã€ã³ããã¯ã¹ãããå Žåã䜿çšå¯èœãªåãããªãéå®ãããŸãã
v0.0.1 çŸåšäœ¿çšã§ããåã¯ä»¥äžã® 4 ã€ã®ã¿ã§ãã
- str
- int
- float
- bool
ãã以å€ã®åã Solr ã« POST ããããšãããšãšã©ãŒãçºçããŸãã
ValueError: Expected metadata value to be a str, int, float or bool, got None which is a <class 'NoneType'>
Solr ã ãšæ¥ä»åïŒDatePointFieldïŒã緯床çµåºŠåïŒLatLonPointSpatialFieldïŒãªã©ã䜿ãããããšããŸãŸããã®ã§ããããããã䜿ããªãã®ããªããªããã©ãããæã§ãã
ä»åã¯ãäœææ¥ãªã©ã®æ¥ä»ããŒã¿ã¯ãããªã str åã§ã€ã³ããã¯ã¹ãããŠããŸãã
ãŸããããã¥ã¡ã³ãã«ãã£ãŠã¯ãã°ãã°è©²åœãã£ãŒã«ãã®å€ããªããnull å€ãå
¥ããããªãããšããããŸãããããã蚱容ãããŸããã
äºåã« add_documents() 颿°ã«æž¡ãåã«ããã®ããã¥ã¡ã³ãã®è©²åœãã£ãŒã«ãã空æåã§åããŠãããããã㯠null ã«ãªã£ãŠãããã£ãŒã«ããåé€ãããšãã£ãååŠçãå¿
èŠã«ãªããŸãã
ã¡ã¿ãã£ãŒã«ãã®ãã£ãŒã«ãåãåºå®ãããŠãã
eurelis-langchain-solr-vectorstore ãã Solr ã«ã€ã³ããã¯ã¹ããå Žåãã¡ã¿ããŒã¿ã®ãã£ãŒã«ãå㯠metadata_{fieldname}_{type} ã§åºå®ãããŠããŸãã
ãã®ä»æ§ã®ãã¡ãæ¥é æåãšæ¥å°Ÿæåã®äž¡æ¹ãåºå®ãããŠãããšããã®ããªããªã䜿ãã¥ããã§ãã
äŸãã°ãPython äžã§ tag ãšããããŒåã§ str åã®ããŒã¿ãã€ã³ããã¯ã¹ãããå Žåãmetadata_tag_s ãšãããã£ãŒã«ãåã§ Solr ã« POST ããããšããŸãã
ãã£ãŒã«ãåãå€ããªã£ãŠãããš 1 〠1 ã€ã¹ããŒããå®çŸ©ããã®ã¯ç
©éã«ãªãã®ã§ããã€ãããã¯ãã£ãŒã«ãã§åãåããããªããŸãã
ãã®ãšããæ¥é æåãšæ¥å°Ÿæåã®äž¡æ¹ãåºå®ãããŠãããšãã£ããã«ãªããŸãã
Solr ã®ãã€ãããã¯ãã£ãŒã«ãã®å¶çŽäžãã¯ã€ã«ãã«ãŒãã¯æ¥é ãæ¥å°Ÿã®ã©ã¡ããäžæ¹ã«ããæå®ã§ããŸããã
ã©ããªæ¹ã®ããŒã¿ãæ¥ããããããªã以äžãmetadata_* ã®ãããªã¹ããŒãå®çŸ©ã¯é£ããã§ãããã
ãšãªããšå¿
ç¶çã«æ¥å°Ÿæåã§ãã€ãããã¯ãã£ãŒã«ããå®çŸ©ããããšã«ãªãã§ãããã
ããã¯ãã¡ã¿ããŒã¿ä»¥å€ã®ãã£ãŒã«ããæã€ã³ã¬ã¯ã·ã§ã³ã§ã¯äœ¿ãã¥ãããšæããŸãã
äŸãã°ã*_s ã§ãã€ãããã¯ãã£ãŒã«ããå®çŸ©ããŠããŸããšãã¡ã¿ããŒã¿ãåŠãã«é¢ãããããã¹ãŠåãã¹ããŒãå®çŸ©ã«ãªã£ãŠããŸããŸãã
ãããŠãmetadata_{type}_{fieldname} ã§ããã°ãã¡ã¿ããŒã¿ãã€ååã«å¿ãããã£ãŒã«ãã¹ããŒããå®çŸ©ã§ããã®ã§ãããããã¯ãªã£ãŠããŸããã
LangChain çµç±ã§ã€ã³ããã¯ã¹ãããå Žåã¯ã*_s ãªã©ã§åé¡ãªããããè¿åŽããã¹ã以å€ã®ãã£ãŒã«ãåã¯äžåŸ metadata ãæ¥é æåã«ã€ããéçšã«ããããšãããããã§ãã
ãã¯ãã«æ€çŽ¢ã®çµæãšããŠè¿åŽãããã£ãŒã«ãã¯ã¡ã¿ããŒã¿ã§ã¯ãªãã®ã§ã远å ã®æ¥é æåãæ¥å°Ÿæåãªãã« POST ãããŸãã
ã¡ãªã¿ã«ãeurelis-langchain-solr-vectorstore ã§ã¯ãuniquekey ãèªåã§ä»äžã㊠POST ããŸããããã®ãã£ãŒã«ãå㯠id ã§åºå®ãããŠããŸãã
ã§ãã®ã§ãSolr åŽã«äºåã« id ãã£ãŒã«ããçšæããŠããå¿
èŠããããŸãã
id ãã£ãŒã«ãã«ã¯ããã·ã¥å€ã®ãããªãã®ãå
¥ã£ãŠãããstr åã§åºå®ã§ãã
ããã«åãããŠãSolr ã®ã¹ããŒãå®çŸ©ã§ãæååãåãåããåã«ããŠããå¿
èŠããããŸãã
ããããŠã¿ããšãã€ã³ããã¯ã¹ POST éšå㯠LangChain ã«é Œããèªåã® POST ããŒã«ãäœ¿ãæ¹ãèªç±åºŠã¯é«ããã§ãã
èªäœã®å Žåãæ€çŽ¢æã«çµã蟌ã¿ãã£ã«ã¿ãŒã䜿ããªãããšã¯æ³šæãå¿
èŠã§ãã
äŸãã°ã
retriever = vector_store.as_retriever(
search_kwargsã=ã{
"filter": {"tag": "solr"}
}
)
ã§æå®ãããã£ã«ã¿ãŒæ¡ä»¶ã¯ãmetadata_tag_s ã§æ¢ãã«è¡ãããšããŸãã
ãªã®ã§ããã®ãã£ãŒã«ãåœåèŠåã«ãªã£ãŠããªããšçµã蟌ã¿ãããŸãæ©èœããŸããã
ãšããããšãèãããšãeurelis-langchain-solr-vectorstore ã§ãã¯ãã«æ€çŽ¢ãããéã¯ãã€ã³ããã¯ã¹ãæ€çŽ¢ããã®ã©ã€ãã©ãªçµç±ã§è¡ãã®ãç¡é£ããã§ãã
å®è£
ã簡䟿ã«ãªããŸããã仿§ãéžæè¢ãã«ã¹ã¿ãã€ãºæ§ãä¹ãããªã£ãŠããŸãã®ããã©ãããæã§ãã
ãŸããé¢åãããããã« Pull Request ãéãã°ããã ãã§ã¯ããã®ã§ããã
Embedding ã¢ãã«ã®éžå®ã¯ãã ããã¹ã
æå㯠Emebedding ã¢ãã«ã¯ BERT ç³»ãªããªãã§ãããããããã«èããŠããŸããã
ã§ãããå®é㯠Embedding ã¢ãã«ã®éžå®ã¯éåžžã«éèŠã§ããã
ç¹ã«ãæ¥æ¬èªã®ãããªåœ¢æ
çŽ è§£æãå¿
èŠãªèšèªã«ãããŠã¯ãtokenizer ã®æ¯ãèããå€ãããŸãã
ãªã®ã§ãçå£ã«éžãã ã»ããè¯ããšæããŸãã
4 ã€ã»ã©è©ŠããŸãããããããããéã£ãŠããŸãã
words = tokenizer.tokenize("ãã¡ã£ãšã«ãã§ã¯æ€çŽ¢ãšã³ãžã³ãããã«ãŸã€ããèªç¶èšèªåŠçãäžå¿ã«ãµãŒã¯ã«äž»ã§ãããããã¿ãã¡ããèå³ãæã£ãããšãæ¥ã
ã¢ãŠããããããŠããå人ãµãŒã¯ã«ã§ããWord2VecãSolré¢é£ã®æžç±ã®å·çãé åžæŽ»åãè¡ã£ãŠããŸãã")
print(words)
# https://huggingface.co/sonoisa/sentence-bert-base-ja-mean-tokens-v2
['ãã¡', 'ã£ãš', 'ã«ãã§', 'ã¯', 'æ€çŽ¢', 'ãšã³ãžã³', 'ã', 'ãã', 'ã«ãŸã€ãã', 'èªç¶', 'èšèª', 'åŠç', 'ã', 'äžå¿', 'ã«', 'ãµãŒã¯ã«', 'äž»', 'ã§', 'ãã', 'ã', 'ã', 'ãã¿', 'ãã¡', 'ã', 'ã', 'èå³', 'ã', 'æã£', 'ã', 'ããš', 'ã', 'æ¥ã
', 'ã¢ãŠã', '##ã', '##ãã', 'ã', 'ãŠ', 'ãã', 'å人', 'ãµãŒã¯ã«', 'ã§ã', 'ã', 'Wor', '##d', '2', 'Ve', '##c', 'ã', 'Sol', '##r', 'é¢é£', 'ã®', 'æžç±', 'ã®', 'å·ç', 'ã', 'é ', '##åž', '掻å', 'ã', 'è¡ã£', 'ãŠ', 'ã', 'ãŸã', 'ã']
# https://huggingface.co/line-corporation/line-distilbert-base-japanese
['âãã¡', 'ã£', 'âãš', 'âã«ãã§', 'âã¯', 'âæ€çŽ¢', 'âãšã³ãžã³', 'âã', 'âãã', 'âã«', 'âãŸã€', 'ãã', 'âèªç¶', 'âèšèª', 'âåŠç', 'âã', 'âäžå¿', 'âã«', 'âãµãŒã¯ã«', 'âäž»', 'âã§', 'âãã', 'âã', 'âã', 'ãã¿', 'âãã¡', 'âã', 'âã', 'âèå³', 'âã', 'âæã£', 'âã', 'âããš', 'âã', 'âæ¥ã
', 'âã¢ãŠã', 'ã', 'ãã', 'âã', 'âãŠ', 'âãã', 'âå', '人', 'âãµãŒã¯ã«', 'âã§ã', 'âã', 'âwor', 'd', 'â2', 'âv', 'ec', 'âã', 'âsol', 'r', 'âé¢é£', 'âã®', 'âæžç±', 'âã®', 'âå·ç', 'âã', 'â', 'é ', 'åž', 'âæŽ»å', 'âã', 'âè¡ã£', 'âãŠ', 'âã', 'âãŸã', 'âã']
# https://huggingface.co/pkshatech/GLuCoSE-base-ja
['â', 'ãã¡', 'ã£ãš', 'ã«ãã§', 'ã¯', 'æ€çŽ¢ãšã³ãžã³', 'ã', 'ããã«', 'ãŸã€ãã', 'èªç¶', 'èšèª', 'åŠç', 'ãäžå¿ã«', 'ãµãŒã¯ã«', 'äž»', 'ã§ãã', 'ã', 'ã', 'ãã¿', 'ãã¡', 'ã', 'ã', 'èå³', 'ãæã£ã', 'ããšã', 'æ¥ã
', 'ã¢ãŠãããã', 'ããŠãã', 'å人', 'ãµãŒã¯ã«', 'ã§ã', 'ã', 'Word', '2', 'V', 'ec', 'ã', 'S', 'ol', 'r', 'é¢é£ã®', 'æžç±', 'ã®', 'å·ç', 'ã', 'é ', 'åž', '掻å', 'ãè¡ã£ãŠããŸã', 'ã']
# https://huggingface.co/intfloat/multilingual-e5-large
['â', 'ã', 'ã¡', 'ã£ãš', 'ã«ãã§', 'ã¯', 'æ€çŽ¢', 'ãšã³ãžã³', 'ã', 'ããã«', 'ãŸ', 'ã€', 'ã', 'ã', 'èªç¶', 'èšèª', 'åŠç', 'ãäžå¿ã«', 'ãµãŒã¯ã«', 'äž»', 'ã§ãã', 'ã', 'ã', 'ã', 'ã¿', 'ã', 'ã¡', 'ã', 'ã', 'èå³', 'ãæã£ã', 'ããšã', 'æ¥ã
', 'ã¢ãŠã', 'ã', 'ãã', 'ããŠãã', 'å', '人', 'ãµãŒã¯ã«', 'ã§ã', 'ã', 'Word', '2', 'V', 'ec', 'ã', 'Sol', 'r', 'é¢é£', 'ã®', 'æžç±', 'ã®', 'å·', 'ç', 'ã', 'é ', 'åž', '掻å', 'ãè¡ã£ãŠããŸã', 'ã']
圢æ çŽ ãç°ãªããšããããšã¯åœç¶ Embedding çµæã«ãé¿ããŠããŸãã
äŸãã°ãæ¥æ¬èªç¹åã®æ€çŽ¢ãè¡ãããå Žåã¯ãæ¥æ¬èªã®ããã£ãã©ãªãŒãè±å¯ãªã¢ãã«ãé©ããŠããŸãã
æ¥æ¬èªã®ã³ã³ããã¹ãã«ç¹åããŠãããããæ¥æ¬èªã®æ€çŽ¢ãçè§£ã«ã¯æå¹ã§ãã
仿¹ãæ¥è±æ€çŽ¢ãè¡ãããå Žåã¯ããã«ããªã³ã¬ã«ã¢ãã«ãéåžžã«æå¹ã§ãã
æ¥æ¬èªç¹åã®ã¢ãã«ã䜿çšããŠæ¥è±æ€çŽ¢ãè¡ã£ãå ŽåãããŸããããããªãå¯èœæ§ããããŸãã
äŸãã°ããoperating roomãã«ã€ããŠã«ã¿ã«ãèªãæ¥æ¬èªã§é¡äŒŒåºŠãèšç®ããŠã¿ãŸãã
ãããšãããããã®ã¢ãã«ã§ãããªã«ãéã£ãŠããŸãã
# sonoisa/sentence-bert-base-ja-mean-tokens-v2
ãªãã¬ãŒã¿ãŒã«ãŒã operating room {'score': 0.39732588073596975}
æè¡å®€ operating room {'score': 0.20133361228015667}
# pkshatech/GLuCoSE-base-ja
ãªãã¬ãŒã¿ãŒã«ãŒã operating room {'score': 0.6755412726006355}
æè¡å®€ operating room {'score': 0.44083859862786035}
# intfloat/multilingual-e5-large
ãªãã¬ãŒã¿ãŒã«ãŒã operating room {'score': 0.8819132635535043}
æè¡å®€ operating room {'score': 0.8826626988800004}
å€èšèªã¢ãã«ã䜿ããšãã«ã¿ã«ãèªãåèš³èªãã»ãŒåçšåºŠã®é¡äŒŒæ§ã«ãªããŸãã
ã€ã³ããã¯ã¹ããŒã¿ã®éžå¥ãæ ãããšãªãã
ã¢ãã«ãé©åã«éžã¶ããšã§ãããæ€çŽ¢æå³ã«åã£ã Embedding çµæãåŸãããšã¯ã§ããŸãã
ãšã¯ããããã®æ ¹æ¬ãšãªãã€ã³ããã¯ã¹ããŒã¿ãé©åã«ã³ã¬ã¯ã·ã§ã³åãããããšãéåžžã«éèŠã§ãã
é¢ä¿ã®ãªããã€ãºããŒã¿ãã€ã³ããã¯ã¹ã«å«ãŸãããšããã¯ãã«æ€çŽ¢æã«èª€ã£ãããããèµ·ãããŸãã
ç¹ã« SNS ã®æçš¿æã®ãããªçæã¯ããã€ãºãšããŠåœ±é¿ãåãŒããããã§ãã
ã¯ãšãªãªããŸã ãããã€ã³ããã¯ã¹åŽãçããšéåžžã«æ€çŽ¢çµæã®ãã€ãºã«ãªããŸãã
äŸãã°ãpkshatech/GLuCoSE-base-ja ã¢ãã«ã§ãSolr ã§ãã¯ãã«æ€çŽ¢ãããæ¹æ³ãæããŠãã ãããããšæ€çŽ¢ããŠã¿ãçµæã以äžã®ãããªçµæãåŸãããŸããã
"docs":[{
"id":"bf1ab34a-9cff-11ee-9c81-0242c0a80007",
"body":"Solrã§ãã¯ãã«æ€çŽ¢ãããå Žåãæ€çŽ¢æãç°¡åã§ãã ãããåçš®ã¯ãšãªã®äœ¿ãæ¹ãããããªãå Žåã¯ã第 2 ç« å
šææ€çŽ¢ãšã³ãžã³ãšããŠåãããŠã¿ãã§è§£èª¬ããŠããŸãã é©å®æ»ã£ãŠèŠè¿ããŠã¿ãŠãã ãããããŠããã¯ãã«ãã€ã³ããã¯ã¹ããããã£ãŒã«ããæå®ããŠæ€çŽ¢ããŸãã ã€ã³ããã¯ã¹æãšåãããã«ãªã¹ã圢åŒã§ãã¯ãã«ãæž¡ããŠãããŸãã\n```&q={!knn f=vector topK=10}[1.0, 2.0, 3.0, 4.0]```\n f ããã¯ãã«æ€çŽ¢å¯Ÿè±¡ãã£ãŒã«ãã§ãtopK ãäžäœäœä»¶ãååŸãããã®æå®ã«ãªããŸãã topK ã®ããã©ã«ã㯠10 ä»¶ã§ããäžèšã®äŸã ãšããã¯ãã« `[1.0, 2.0, 3.0, 4.0]` ã«è¿ãé ã«ã¹ã³ã¢ãé«ããªãæ€çŽ¢äžäœã«ãããããŸãã ã¹ã³ã¢ã¯ `similarityFunction` ã§æå®ããé¡äŒŒåºŠèšç®ã®æ¹æ³ã䜿ã£ãŠç®åºãããå€ã«ãªããŸããã·ã£ãŒãåå²ããŠããå Žåã¯ãããããã®ã·ã£ãŒããã topK ãéããŠããããã§ãã ãªã®ã§ã2 ã·ã£ãŒãæ§æã®å Žå㯠`topK=10` ã ãš 20 ä»¶ãããããŸãããŸããæ¬¡ã®ããã« filter cache ã cost ãªã©ã®ããŒã«ã«ãã©ã¡ãŒã¿ãŒã䜿ãã°ãé¡äŒŒåºŠã¹ã³ã¢ãçµãèŸŒã¿æ¡ä»¶ã«äœ¿çšã§ããŸãã\n```&q={!knn f=vector topK=10}[1.0, 2.0, 3.0, 4.0]&fq={!frange cache=false l=0.99}$q```\n",
"score":0.8361846
},{
"id":"bf1b9e90-9cff-11ee-9c81-0242c0a80007",
"body":"玹ä»ïŒµïŒ²ïŒ¬ã¯ãã",
"score":0.72576535
},{
},{
"id":"bf1ab0d4-9cff-11ee-9c81-0242c0a80007",
"body":"ãã¯ãã«ããŒã¿ããŒã¹ïŒä»¥äžããã¯ãã« DBïŒãšã¯ãã²ãšèšã§ãããšãã¯ãã«æ€çŽ¢æ©èœãåããããŒã¿ã¹ãã¢ã§ãã ãããŠãããŒã¿ããŒã¹ãã§ã¯ãªãããããŒã¿ã¹ãã¢ããšè¡šçŸããçç±ã¯ã2.7 åŸæ¥åã®ããŒã¿ããŒã¹ãšãã¯ãã«ããŒã¿ããŒã¹ãšã®éãã§è§ŠããŸãããã¯ãã« DB ã®æäŸå瀟ã®ããã¥ã¡ã³ããããã€ãèŠãŠã¿ããšæ¬¡ã®ãããªèª¬æããªãããŠããŸãããã®åã®éãããã¯ãã«åœ¢åŒã®ããŒã¿ãå¹ççã«è²¯èµãæœåºããããã®ããŒã¿ã¹ãã¢ã§ãã ç»åãé³å£°ãåç»ãªã©ã®éæ§é åããŒã¿ãããã¯ããã¹ããå°ç空éããŒã¿ãåã蟌ã¿è¡šçŸã«å€æããŠæ±ããããšããæšä»ã®ããŒãºã«å¿ããæ©èœãçã蟌ãŸããŠããŸãã äŸãã°ãä¿åãããã¯ãã«ããŒã¿ã«å¯Ÿããè¿äŒŒè¿åæ¢çŽ¢æ©èœãªã©ã§ãã ããã¯åŸæ¥ã®ãªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹(以äžãRDB)ã«ã¯ãªãã£ãæ©èœã§ãã ãã¡ãã RDB ãšåæ§ã«ãæ¡åŒµæ§ãããã¯ã¢ãããã»ãã¥ãªãã£æ©èœãæã¡åãããŠããŸãã",
"score":0.69493014
},{
æ€çŽ¢æå³ã«åã£ãŠããã㪠3 çªç®ã®æç« ãããé¢ä¿ã®ãªãæç« ã 2 çªç®ãšããäžäœã«æ¥ãŠããŸã£ãŠããŸãã
ããšããã㯠Solr åºæã®åé¡ã£ãœãã®ã§ãããæç« ã®ååŸä»¶æ°ã§ãã topK ã®æ°ã極端ã«å°ãããããšãé¡äŒŒã¹ã³ã¢ãæå€§ã§ã¯ãªãæç« ããããããŠããŸãããšããããŸããã
{
"responseHeader":{
"zkConnected":true,
"status":0,
"QTime":10
"params":{
"q":"{!knn f=vector topK=2}[-0.4743734300136566, 0.2524718940258026, 0.24989350140094757, ...]",
"df":"id",
"echoParams":"all",
"fl":"id body score",
"q.op":"AND",
"sort":"score desc",
"rows":"10",
"facet":"off",
"wt":"json"
}
},
"response":{
"numFound":2,
"start":0,
"maxScore":0.7486509,
"numFoundExact":true,
"docs":[{
"id":"bf1ddc96-9cff-11ee-9c81-0242c0a80007",
"body":"æããŠãã ããïŒïŒïŒ",
"score":0.7486509
},{
"id":"bf1b9e90-9cff-11ee-9c81-0242c0a80007",
"body":"玹ä»ïŒµïŒ²ïŒ¬ã¯ãã",
"score":0.72576535
}]
}
}
Solr ã® topK ã¯ãLangChain ã§ãããšããã® k ã«ããããŸãã
retriever = vector_store.as_retriever(
search_typeã=ã"similarity_score_threshold", # ã¹ã³ã¢éŸå€ã䜿çšããããšãã«æå®
search_kwargsã=ã{
"k": k, # topK ä»¶ã®ããã¥ã¡ã³ãã ãååŸãã
"filter": {"tag": "solr"}, # Solr ã® fq ã®æ¡ä»¶ãæå®ã§ããã䜿çšã§ãããã£ãŒã«ãã¯ã€ã³ããã¯ã¹æã« metadata ã§æž¡ãããã£ãŒã«ãã®ã¿
"score_threshold": 0.5 # score ã®éŸå€ããããäžåã£ãããã¥ã¡ã³ãã ãååŸãã
}
)
topK=3 以äžã®å€ãæå®ãããšé¡äŒŒã¹ã³ã¢æå€§ã®ãã®ããé ã«ååŸã§ããŠããŸãã
{
"responseHeader": {
"zkConnected": true,
"status": 0,
"QTime": 8,
"params": {
"q": "{!knn f=vector topK=3}[-0.4743734300136566, 0.2524718940258026, 0.24989350140094757,...]",
"df": "id",
"echoParams": "all",
"fl": "id body score",
"q.op": "AND",
"sort": "score desc",
"rows": "100",
"facet": "off",
"wt": "json",
"rid": "null-29"
}
},
"response": {
"numFound": 3,
"start": 0,
"maxScore": 0.8361846,
"numFoundExact": true,
"docs": [
{
"id": "bf1ab34a-9cff-11ee-9c81-0242c0a80007",
"body": "Solrã§ãã¯ãã«æ€çŽ¢ãããå Žåãæ€çŽ¢æãç°¡åã§ãã ãããåçš®ã¯ãšãªã®äœ¿ãæ¹ãããããªãå Žåã¯ã第 2 ç« å
šææ€çŽ¢ãšã³ãžã³ãšããŠåãããŠã¿ãã§è§£èª¬ããŠããŸãã é©å®æ»ã£ãŠèŠè¿ããŠã¿ãŠãã ãããããŠããã¯ãã«ãã€ã³ããã¯ã¹ããããã£ãŒã«ããæå®ããŠæ€çŽ¢ããŸãã ã€ã³ããã¯ã¹æãšåãããã«ãªã¹ã圢åŒã§ãã¯ãã«ãæž¡ããŠãããŸãã...",
"score": 0.8361846
},
{
"id": "bf1ab30e-9cff-11ee-9c81-0242c0a80007",
"body": "\"ãã¯ãã«æ€çŽ¢ã®åºç€æŠå¿µãçè§£ã§ãããšããã§ãæ©é Solr ã䜿ã£ãŠãã¯ãã«æ€çŽ¢ããã£ãŠã¿ãŸããããäœ¿ãæ¹ã¯æãã®ã»ãç°¡åã§ããå
¬åŒããã¥ã¡ã³ã(https://solr.apache.org/guide/solr/latest/query-guide/dense-vector-search.html)ã§ãã£ãããšãã¥ãŒããªã¢ã«ããããŸãã...",
"score": 0.8262049
},
{
"id": "bf210e84-9cff-11ee-9c81-0242c0a80007",
"body": "ã§ãããµã³ã¬ãã£ãŠæ€çŽ¢ãããããªãã§ããã",
"score": 0.7650884
}
]
}
}
ããããã°ãªã®ã HNSW ã¢ã«ãŽãªãºã ããã®ä»æ§ãªã®ããŸã§ã¯èª¿ã¹åããŠããŸããããæ€çŽ¢çµæã«å¿
èŠã®ãªãæç« ã¯æ€çŽ¢çµæãæ±ãåå ã«ãªããŸãã
ã§ãã®ã§ãã€ã³ããã¯ã¹ããé€ããå°ãªããšãæ€çŽ¢å¯Ÿè±¡ãšã¯å¥ã®ã³ã¬ã¯ã·ã§ã³ã«ããŠããããšãããããããŸã[1]ã
ãããã¯ãk ã®å€ãããã©ã«ãå€(k=4)以äžã§èšå®ããŠãããååŸåŸã«çµã蟌ããšããæ¹æ³ãããã ãšæããŸãã
eurelis-langchain-solr-vectorstore çµç±ã§ã¯ãªããSolr ã«çŽæ¥ GET ãªã¯ãšã¹ãããããå Žåã¯ãtopK=10 ãšããŠãããrows ã§çµã蟌ã¿ãè¡ãããšã§ãåé¿å¯èœã§ãã
ã©ãããŠãåãã³ã¬ã¯ã·ã§ã³ã«å
±åãããå¿
èŠããããæ¥µåãã€ãºãæžããããå Žåã¯ããã£ã«ã¿ãŒã¯ãšãªã§ããŒã¯ãŒãæ€çŽ¢(LangChain ã§ãããšããã® filter)ã䜿ãã®ãæå¹ã§ãã
ãã£ã«ã¿ãŒã¯ãšãªã¯ã¡ã€ã³ã¯ãšãªã®ãã¬ãã£ã«ã¿ãŒãšããŠå¹ãã®ã§ããã£ã«ã¿ãªã³ã°ãããããã¥ã¡ã³ãå
ã§ã ããã¯ãã«æ€çŽ¢ãããŠãããŸãã
ç¹ã«åºæåè©ãå«ããããªå ·äœçãªãŠãŒã¶å ¥åã§ããå Žåãæ··åšã³ã¬ã¯ã·ã§ã³ã«å¯ŸããŠäœèšãªããã¥ã¡ã³ãããããããªããããããŒã¯ãŒããã£ã«ã¿ãªã³ã°ãããããšã¯å¹æçã ãšæããŸãã
ãã¯ãã«ããŒã¿ã®ã€ã³ããã¯ã¹ã«ã¯ DIH ã¯äœ¿ããªããã
Solr ã¯æ€çŽ¢ãšã³ãžã³ã§ãã£ãŠãããŒã¿ããŒã¹ã§ã¯ãããŸããã
ã§ãã®ã§ãã€ã³ããã¯ã¹ããŒã¿ã¯å¥ã®ãã©ã€ããªã¹ãã¢ã«ä¿åããŠãããSolr ãžã¯ãã®ã¹ãã¢ããããŒã¿ãåã蟌ããšãã圢åŒããã°ãã°åããããªããŸãã
ãã©ã€ããªã¹ãã¢ãš Solr ã®æ©æž¡ã圹ãšã㊠DIHïŒData Import HandlerïŒããããŸããããã¯ãã«ããŒã¿ã®ã€ã³ããã¯ã¹ããŒã«ãšããŠã¯å³ãããããããŸããã
Solr9.0 ã®ãªãªãŒã¹ãšåœæã« 3rd party ãšãªã£ã DIH ã§ãããåé¢ãæ©ã«ãµããŒããèããªã£ãŠããå°è±¡ã§ãã
Solr9.0 以éã§ DIH ãäœ¿ãæ¹æ³ã«ã€ããŠã¯ãã¡ããã芧ãã ããã
DIH ã Solr èªèº«ã«ã¯ Emebedding æ©èœã¯ãããŸããã
ãã®ãããäºåã«ã€ã³ããã¯ã¹åããããŒã¿ãããŒã¿ããŒã¹ã«ä¿åããŠãããDIH ã§ã¯ãããåãåºã㊠Solr ã«å
¥ããããšã«ãªããŸãã
ããããMySQL ã§ã¯ãªã¹ãåã®ããŒã¿ãä¿åã§ãããããã« SQL ã䜿çšããŠãã¯ãã«ããŒã¿ãåãåºãéã«ãªã¹ãã«å€æããã®ãé£ããã§ãã
Python ãã MySQL ã«æ ŒçŽããéã«ã list ã join ããŠç¡çãã string åãšããŠä¿åããDIH ã§ TransformerScript ã䜿ã£ãŠ split ããã°ããããšãæããŸããããäžæããããŸããã§ããã
Solr(ã® Docker ã€ã¡ãŒãž)ã®åé¡ããDIH ã®åé¡ããã¯ããŸãåãªãç§ã®èšå®ãã¹ãããããŸãããã3rd party 補ã«ãªã£ãŠä»¥éãJavaScript ãæ£åžžã«åäœãããTransformerScript ã䜿ããŸããã§ããã
Java ã§èªäœã®ãã©ã°ã€ã³ãäœãããšãã§ããã§ãããããããã¯ããã§ä¿å®æ§ãæªãã§ãã
ãããŸã§ããããããªã DIH çµç±ã§ã¯ãã¯ãã«ããŒã¿ãã€ã³ããã¯ã¹ãããªããšããæ¹éã«ãªãããã§ãïŒãšãããç§ã¯èªäœãã©ã°ã€ã³ãèªã¿èŸŒãŸããããšããã§ããŸããã§ããïŒã
ããã«ãDIH ã®ããŒã¿ããŒã¹ãžã®ãã©ã€ããŒã MariaDB(MySQL) ã«ã¯å¯Ÿå¿ããŠããŸãããä»ã®ããŒã¿ããŒã¹ã«ã¯å¯Ÿå¿ããŠããŸããã
ãã¯ãã«æ€çŽ¢ã¹ãã¢ãšã㊠Solr ãå©çšããå Žå㯠DIH ããã®è±åŽãæ±ãããããã§ãã
ãã¯ãã«ããŒã¿ã®ä¿åå ãšã㊠MongoDB ã¯è¯ããã
å
ã»ã©ãMySQL ã¯ãªã¹ã圢åŒã®ããŒã¿ãæ ŒçŽã§ããªããšæžããŸããããMongoDB ã ãšãªã¹ãåã®ããŒã¿ããã®ãŸãŸä¿åã§ããŸãã
ãã®ç¹ããããã©ã€ããªã¹ãã¢ãšã㊠MongoDB ã䜿çšãããšããã®ã¯çµæ§ãããªéžæè¢ãªãããªæ°ãããŸãã
ã¡ãªã¿ã«ãã¯ã©ãŠãçã§ãã Atlas ãªã Atlas äžã§ãã¯ãã«æ€çŽ¢ãå¯èœã§ãïŒãããªããš Solr ãããªããªããŸãã...ïŒã
ããŒã«ã« LLM ã®äœ¿ãããªã
äœã¹ãã㯠PC ã®å Žåãå§çž®ã¢ãã«ã䜿ãã¹ã
ä»åãããŒã«ã« LLM ãæ±ãäžã§äžçªèŠåŽããã®ããããããããŒã«ã«ã§ LLM ãåãããããã«ããããšã§ããã
åœå䜿ãããšããŠããã®ããæ¥æ¬èªå¯Ÿå¿ã®ãã£ããã¢ãã«ã®äžã§ãè©å€ã®è¯ã CALM2-7B-Chat ã§ããã
æèè
ã«ãããšããã®ã¢ãã«ãåããã«ã¯ float16 ã§ 14~15GBãfloat8 ã§ã 10GB ã® GPU ã¡ã¢ãªãå¿
èŠãããã§ã[2][3]ã
ããããç§ã®æå
ã®ç°å¢ã¯ãããªæãã§ã8GB ã® GPU ãããããŸããã§ãã[4]ã
| Size | |
|---|---|
| RAM(CPU Memory) | 16GB |
| VRAM(GPU Memory) | 8GB |
Google Colaboratory ã§ããã°ãç¡æçã§ã 12GB ã® GPU ã¡ã¢ãªã䜿ããŸãã
ã§ãããSolr ãããŒã«ã«ã«ãããããLLM ãš Solr ãéä¿¡ããã以äžãGoogle Colab äžã§ LLM ãåããããã«ãè¡ããããããããããŠããŸãã[5]ã
ãããªãšãããã LLM ã軜éåã§ããã©ã€ãã©ãªãããããšãç¥ããŸããã
ããããéååãšåŒã°ããæè¡ã䜿ã£ãŠã¢ãã«ã軜éåããŸãã
éååã¯ãã¢ãã«ã®éã¿ãªã©ã®ãã©ã¡ãŒã¿ãŒãããå°ãããããã§è¡šçŸããããšã§ãã¢ãã«ãµã€ãºãå§çž®ããææ³ã§ã[6]ã
TensorFlow ã PyTorch ã§ã¯ãããã©ã«ãã ãš float åããªãã¡ 32 ãããã®æµ®åå°æ°ç¹ç²ŸåºŠã䜿çšããŸãã
ããã 16 ãããã 8 ãããã«æžããããšã§ãã¢ãã«ã®æ§é ãå€ããããšãªãã¡ã¢ãªã®äœ¿çšéãæããããŸãã
ãã ãããã®å粟床ãèœãšãããšã«ãªãã®ã§ã軜éåãšæšè«æ§èœã¯ãã¬ãŒããªãã«ãªãããšã¯æ³šæãå¿
èŠã§ãã
æè¿ã®ç ç©¶ã«ããã°ã8 ãããã®éååã§ããã° 1% çšåºŠã®æ§èœäœäžã§æžããšãèšãããŠããŸã[7]ã
å®ã¯éåå㯠2016 幎㚠LLM ã®ç»å Žä»¥åããèããããŠããææ³ã§ãããã¢ãã«ã®å·šå€§åãšå
±ã«æ³šç®ãããŠããŸã[8]ã
æ°ççãªè©³çްã¯ãã¡ãã®èšäºã«ãããŸãšãŸã£ãŠããŸã[9]ã
äžè¿°ã® Ctranslate2(ä»¥äž CT2) ãš llama.cpp ã¯ããããéååã®ããã®ã©ã€ãã©ãªã§ãã
llama.cpp ãåºæ¬çã«ãã³ãŒããŒã¢ãã«ã®ã¿ã«å¯Ÿå¿ããŠããã®ã«å¯ŸããCT2 ã¯ãã³ãŒããŒã¢ãã«ã«å ããŠãšã³ã³ãŒããŒã¢ãã«ã«ããããã察å¿ããŠãããšããéããããããã§ãã
ã€ãŸããBERT ã T5 ãšãã£ããšã³ã³ãŒããŒã»ãã³ãŒããŒã¢ãã«ã®éååã«ã¯ CT2 ã®æ¹ãåããŠããããã§ãã
ä»åã¯ã©ã¡ããè¯ããšããã®ã¯èããã«ã䜿ãããã®ã䜿ããŸããã
ä»åã¯
- æ¥æ¬èªå¯Ÿå¿ããŠãã
- ãã£ãã圢åŒã«ãã¡ã€ã³ãã¥ãŒãã³ã°ãããŠãã
- ç§ã®æå ã®ãªãœãŒã¹ã§åããã
ã® 3 ç¹ãæºãããŠããæ¬¡ã® 2 ã€ã詊ããŠã¿ãŸããã
1 ã€ç®ã Rinna 瀟ã®ã¢ãã«ã§ããããèªåã§ CT2 圢åŒã«å§çž®ããŠäœ¿çšããŸããã
2 ã€ç®ããã®ã»ã¯ã·ã§ã³åé ã§è§Šãã CALM2-7B-Chat ã§ãã
llama.cpp 圢åŒã§å§çž®æžã¿ã®ãã®ãå
¬éãããŠããã®ã§ãããã䜿ããŸããã
README ã«ããããã«ãGPU ããªããŠãã8GB çšåºŠã® CPU Memory ãããã°åããŸãã
ããŒã PC ã«ç©ãŸããŠãããããªã¹ããã¯ã§åãã®ã§ãããããã§ãã
å圢åŒã®èªã¿èŸŒã¿æ¹æ³ã«é¢ããŠã¯ãç§ã®ãµã³ãã«ã³ãŒãããã³åèèšäºã貌ã£ãŠããã®ã§ããããã芧ãã ãã[10][11][12]ã
ãŸããåå㪠CPU ã¡ã¢ãªãããã°ãèªåã§ã CT2 ã llama.cpp ã䜿ã£ãŠå§çž®ããããšãã§ããŸãã
ã¢ãã«ããšã«é©åãªãã³ãã¬ãŒããäœãå¿ èŠããã
ååã®èšäºã§è§Šããããã«ãRAG ãããå Žåã«ã¯ãLLM ã«ãã³ãã¬ãŒããšãã圢åŒã§æ
å ±ãæå
¥ããŸãã
ããã³ãããã¥ãŒãã³ã°ã®éèŠæ§ãèšãããŠããã®ã§åœããåã®ãããªæ°ãããŸãããã¢ãã«ããšã«é©ãããã³ãã¬ãŒãïŒããã³ããïŒãæžããŠãããå¿
èŠããããŸãã
ChatGPT ã¯å²ãšéã§ãè¯ããªã«è§£éããŠãããŸãããããŒã«ã« LLM ã¯ãã³ãã¬ãŒãã§çµæ§çµæãå€ãããŸãã
äŸãã°ãChatGPT ã§ã¯æ¬¡ã®ãããªãã³ãã¬ãŒãã§ãååæã¿ã®è¿çãããŠãããŸãã
### å
¥å
ããªãã¯å¯Ÿè©±ãšãŒãžã§ã³ãã§ãã
[åè]éšåã®æ
å ±ã䜿ã£ãŠ[ãŠãŒã¶å
¥åæ]éšåã®ãŠãŒã¶ããã®äŒè©±ã«åçããŠãã ããã
[ãŠãŒã¶å
¥åæ]
Solrã§ã®ãã¯ãã«æ€çŽ¢ã®å§ãæ¹ãæããŠãã ããã
[åè]
ãã¯ãã«æ€çŽ¢ã®åºç€æŠå¿µãçè§£ã§ãããšããã§ãæ©é Solr ã䜿ã£ãŠãã¯ãã«æ€çŽ¢ããã£ãŠã¿ãŸããããäœ¿ãæ¹ã¯æãã®ã»ãç°¡åã§ããå
¬åŒããã¥ã¡ã³ã...
### åç
Solrã§ã®ãã¯ãã«æ€çŽ¢ãå§ããæé ã«ã€ããŠè©³çްã«èª¬æãããŠããŸãããåºæ¬çãªæé ã以äžã«èŠçŽããŸãã
1. ã¹ããŒãã®å®çŸ©: ãŸããmanaged-schema.xmlã«ãã¯ãã«æ€çŽ¢çšã®ãã£ãŒã«ããå®çŸ©ããŸããvectorDimensionãsimilarityFunctionãªã©ã®ãã©ã¡ãŒã¿ãæå®ããŸãã
2. é«åºŠãªèšå®ã®è¿œå : å¿
èŠã«å¿ããŠãsolrconfig.xmlã«ãã©ã¡ãŒã¿ãæå®ããããã©ãŒãã³ã¹ã埮調æŽããŸããäŸãã°ãhnswMaxConnectionsãhnswBeamWidthãªã©ã調æŽã§ããŸãã
3. ãã¯ãã«ãã€ã³ããã¯ã¹å: å®çŸ©ãããã£ãŒã«ãã«ãã¯ãã«ããŒã¿ãã€ã³ããã¯ã¹åããŸãã
4. ãã¯ãã«æ€çŽ¢ã®å®è¡: æ€çŽ¢æã«ã¯ã`&q={!knn f=vector topK=10}[1.0, 2.0, 3.0, 4.0]`ã®ãããªæ§æã䜿çšããŸããfã¯ãã¯ãã«æ€çŽ¢å¯Ÿè±¡ãã£ãŒã«ããæå®ããtopKã¯äžäœäœä»¶ãååŸããããæå®ããŸãã
ãã ããå
·äœçãªã³ãŒããèšå®ã«ã€ããŠã®è³ªåãããå Žåã¯ãããã«å¿ããŠè©³çްãªèª¬æãæäŸã§ããŸãã
ãã ããCalm2 ã Rinna 瀟ã¢ãã«ã ãšé©åœãªãã³ãã¬ãŒãã§ã¯ãŸãšããªåçãçæãããŸããã
äŸãã°ãåããã³ãã¬ãŒãã§ Calm2 ã«å
¥åããŠã¿ããšåãªããªãŠã è¿ãã«ãªã£ãŠããŸããŸããã
### åç
# calm2
ãã¯ãã«æ€çŽ¢ã®å§ãæ¹ãæããŠãã ããã
ãããæ¬¡ã®ãããªãã³ãã¬ãŒãã«å€ãããšãææã®çµæãè¿ã£ãŠããããã«ãªããŸããã
### å
¥å
USER: 貎æ¹ã¯ãŠãŒã¶ãŒã®è³ªåã«çããAIã¢ã·ã¹ã¿ã³ãBotã§ãã
ãŠãŒã¶ãŒã®è³ªåã«å¯ŸããŠé©åãªã¢ããã€ã¹ãçããŸãã
æ
å ±ãšããŠã以äžã®å
容ãåèã«ããŠãã ããã
========
{context}
========
ããŠãã{query}ããšãã質åã«å¯ŸããŠãäžèšã®æ
å ±ãå
ã«ãçããèããŠã¿ãŸãããã
ASSISTANT:
{context} éšåã«ã¯å
ã»ã©ã§èšããšããã®åèæ
å ±ã {query} ã«ã¯ãŠãŒã¶å
¥åæãããããæ¿å
¥ããŸãã
ãã®ã»ããã¢ãã«ã®èšå®ãã©ã¡ãŒã¿ãŒã§ãåçã¯å€åããŸããããã³ãã¬ãŒãã®åœ±é¿ã¯ããªã倧ããã£ãã§ãã
ãã³ãã¬ãŒãã ãã§ã¯ã«ããŒããããªã質ã®éãã¯ãããã
ãã¯ããã©ã¡ãŒã¿ãŒãµã€ãºã®é¢ä¿ããã¢ãã«ã«ãã£ãŠåçã®è³ªãã ãã¶éã£ãŠããŸãã
Calm2 㯠Rinna 瀟ã¢ãã«ã«æ¯ã¹ãŠãåè¿ããã©ã¡ãŒã¿ãŒæ°ãæã€ããšããã£ãŠããæã£ãŠããç¥èéãå
šç¶éããŸãã
äŸãã°ããSolr ãšããæ€çŽ¢ãšã³ãžã³ã«ã€ããŠæããŠãã ããããšè³ªåãããšãããCalm2 ã¯åŠ¥åœãªè¿çãããŠããŸããã
ããã«å¯ŸããRinna 瀟ã¢ãã«ã ãšããã£ãœãããå®åšãããããçåãªäœãå¥ã®ãã®ãè¿ããŠããŸããã
### å
¥å
Solrãšããæ€çŽ¢ãšã³ãžã³ã«ã€ããŠæããŠãã ããã
### åç
# rinna/japanese-gpt-neox-3.6b-instruction-ppo
Googleãªã©ã®æ€çŽ¢ãšã³ãžã³ããããããæè»ãªã¯ãšãªçµæãçæããããšãã§ããŸãããŸã,ãªãŒãã³ãœãŒã¹ã§ããããç¡æã§å©çšã§ããŠããŸã(ã©ã€ã»ã³ã¹ã¯MIT). Customersãªã©ã«ã¯è¯ãã§ãã,äžè¬ã®å©çšè
ã«ã¯ããŸã銎æã¿ããªããããããŸããã Webéçºè
ãWebããŒã±ãã£ã³ã°æ
åœè
ã«ãšã£ãŠæçšã§ãããšåæã«éåžžã«åŒ·åãªããŒã«ãšãªãããšããããŸãã
# calm2
solrã¯ããªãŒãã³ãœãŒã¹ã®æ€çŽ¢ãšã³ãžã³ã§ãã
ApacheãœãããŠã§ã¢è²¡å£ã«ãã£ãŠéçºãããLuceneãšåŒã°ããJavaã§æžãããå
šææ€çŽ¢ã©ã€ãã©ãªã䜿çšããŠããŸãã
Solrã¯ãé«éãªæ€çŽ¢æ§èœãšé«ãæ¡åŒµæ§ãå
ŒãåããŠãããæ§ã
ãªã¢ããªã±ãŒã·ã§ã³ãWebãµã€ãã§å©çšãããŠããŸãã
RAG ã«ã€ããŠã Rinna 瀟ã¢ãã«ã ãšèª¬æãèŠçŽã¿ã¹ã¯ã¯ãªããªãé£ããã§ãã
ãããããã¹ããªåçãéžã³ãŸããããããã ãã®éããåºãŠããŸããŸãã
### å
¥å
Solrã§ã®ãã¯ãã«æ€çŽ¢ã®å§ãæ¹ãæããŠãã ãã
### åç
# rinna/japanese-gpt-neox-3.6b-instruction-ppo
ãã¡ããã§ãã
ãã¯ãã«æ€çŽ¢ã®åºæ¬çãªæé ã¯ãã¹ããŒãå®çŸ©ã§äœ¿çšãã颿°ã宣èšã(solrconfig.xml)ãã€ã³ããã¯ã¹äœæãšã¯ãšãªå®è¡ã®ããã®ã³ãã³ãã©ã€ã³ãŠãŒãã£ãªãã£ã§ãã Solaris Lucene Processing Tool (SALTAIR)-KernelPythonã䜿çšããŸãã
ãã®åŸãèŠçŽ ãååŸããããã« SSL/SSL v3-APIã䜿çšã㊠WebãµãŒããŒã«ãªã¯ãšã¹ããæã蟌ã¿ãçµæãåãåããŸãã
ããã«ãããGoogle ScholarsãMicrosoft Online Serviceãªã©ã®é«åºŠãªãµãŒãã¹ãå©çšããŠå€§éã®ããŒã¿ãåæã§ããŸããããããã®ãšã³ãžã³ã¯å¹çåã®ããã«ããªãéãåŠçãå¿
èŠã«ãªããŸãã
ãŸããã!knn f=vectorããšããããŒã¯ãŒãåŒæ°ã䜿çšããããšã§ãé¡äŒŒåºŠã®èšç®æ¹æ³ã倿Žããããšãã§ããŸãã
ããã¯ãæ¢çŽ¢ã®çµæã«å¯ŸããŠããæè»ãªã¢ãããŒããåããããšãã«æçšã§ãããå€ãã®ã¢ã«ãŽãªãºã ã§ã¯ãã®ææ³ãæ¡çšãããŠããŸãã
æåŸã«éèŠãªããšã¯ããŠãŒã¶ãŒãã¬ã³ããªãŒã§ããããšãéåžžã«éèŠã ãšããããšã§ãã
ãã®ããã«ã¯ãã§ããã ãç°¡åã«åŠç¿ã§ããããã«ããããšãéåžžã«åœ¹ç«ã¡ãŸããã
幞éã«ãçŽ æŽããããã¥ãŒããªã¢ã«ããããŸã!
ä»åŸãšããæŽ»èºãããããšé¡ã£ãŠããŸãã
:* * Numerical Algorithm "Best Practice" for Evaluation and Balance Analysis by
# calm2
ã質åã«ãçãããŸãã
ãSolrã§ã®ãã¯ãã«æ€çŽ¢ã®å§ãæ¹ãæããŠãã ããããšãã質åã«å¯ŸããŠã¯ã以äžã®ããã«åçããããŸãã
Solr ã®ã¹ããŒãå®çŸ©ã«ãã¯ãã«æ€çŽ¢çšã®åãšãã£ãŒã«ããå®çŸ©ããã
<?xml version="1.0" encoding="UTF-8" ?>
<schema name="example" version="1.6">
<field name="_version_" type="plong" indexed="false" stored="false" />
<field name="_root_" type="int" indexed="true" stored="false" docValues="false" />
<uniqueKey>id</uniqueKey>
<field name="id" type="int" indexed="true" stored="true" required="true" />
<field name="vector" type="knn_vector" indexed="true" stored="false" /> <!-- ãã£ãŒã«ãå®çŸ© -->
<fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0" />
<fieldType name="plong" class="solr.LongPointField" docValues="true" />
<fieldType name="knn_vector" class="solr.DenseVectorField" vectorDimension="4" similarityFunction="cosine" /> <!-- åå®çŸ© -->
</schema>
1 çªäžã®è¡ããã¯ãã«çšã®ãã£ãŒã«ãå®çŸ©ã§ãã
vectorDimension ã¯ã€ã³ããã¯ã¹ãããã¯ãã«ã®æ¬¡å
æ°ã§ãã
çŸç¶æå®ã§ããã®ã¯æå€§ 1024 次å
ãŸã§ã§ãã
similarityFunction ã«ã¯é¡äŒŒåºŠèšç®ã®æ¹æ³ãå®çŸ©ããŸãã
ããã©ã«ãã¯ãŠãŒã¯ãªããè·é¢ã«ãªã£ãŠããŸãããå
¬åŒã®æšå¥šã¯ã³ãµã€ã³é¡äŒŒåºŠã§ãã
ã³ãµã€ã³é¡äŒŒåºŠã¯è§åºŠæ
å ±ã ãã䜿ã£ãŠé¡äŒŒåºŠèšç®ãè¡ãã®ã§ãäºåã«åäœãã¯ãã« (ãã¯ãã«ã®ãã«ã ã 1) ã«ããŠããããšãæšå¥šãããŠããŸãã
2023/2/25 çŸåšã䜿çšã§ããèšç®ææ³ã¯ä»¥äžã® 3 ã€ã§ã
Rinna 瀟ã¢ãã«ãš Calm2 ã§ã¯ããã¹ããªåçã«ãªããããå¥ã®ãã³ãã¬ãŒãã䜿çšããŠããŸãã
ãããããæ¬¡ã®èšäºã®ãã³ãã¬ãŒããåèã«ãããŠããããŸãã[13][14]ã
詳ããã¯æ¬èšäºåé ã®ãµã³ãã«ã³ãŒããåèã«ããŠãã ããã
ãããã詊ããŸããããRinna 瀟ã¢ãã«ã ãšãèŠçŽã®ãããªã¿ã¹ã¯ã¯é£ãããã§ãã
äžæ¹ãå ¥åæ å ±ããçãåçãæãåºã QA ã¿ã¹ã¯ã¯ããŸããããŸããã
äŸãã°ãæ¬¡ã®æ å ±ãããã·ã®ããã®ãã¶ã€ããŒãçããããŠã¿ãŸãã
### å
¥å
ãã·ãããã®ãã¶ã€ã³ãããã®ã¯èª°ã§ããïŒ
### åç
# rinna/japanese-gpt-neox-3.6b-instruction-ppo
ã«ãã ãã€ã
# calm2
ãã·ã®ããã®ãã¶ã€ã³ã¯ã«ãã ãã€ããæ
åœããŸããã
åçé床ãéãã®ã軜éã¢ãã«ã®è¯ããšããã§ãããæ±çšæ§çã«ã¯ããçšåºŠã®ã¢ãã«ãµã€ãºããä»ã®ãšããã¯å¿ èŠããã§ãã
ãããã«
èŠæŠãããšãããå
šéšæžãåºãããé·æããªã£ãŠããŸããŸããããåèã«ãªããããªæ
å ±ã¯ãã£ãã§ããããïŒ
èååéãæ±ããšåæ¹é¢ã®ç¥èãèŠæ±ãããŠé£ããã§ãã
ãã®åãã§ããããšã®å¹
ã¯åºããã®ã§ãã¿ãªããããã²ãã£ã¬ã³ãžããŠã¿ãŠãã ããã
-
åãã HNSW ã䜿çšããŠãã faiss ã§è©ŠããŠã¿ãŸããããfaiss ã§ã¯
k=1ã§ãåé¡ãªãé¡äŒŒåºŠæå€§ã®æç« ãåŸãããŸããã â©ïž -
https://medium.com/axinc/calm2-7b-chatã®openaiäºæãµãŒããç«ãŠã-8a62c2833bec â©ïž
-
https://qiita.com/Yuki-Imajuku/items/c58638008c923ae295d9 â©ïž
-
äœè«ã§ãããæ¥ããããªããå°çš GPU ã¡ã¢ãªãšå ±æ GPU ã¡ã¢ãªã®éããããã£ãŠããããã16GB ããã¯ããªã®ã«åããªãïŒããšãã°ãããããã§ããŸããã â©ïž
-
ngrok ãªã©ã§äžæçã«ã°ããŒãã« IP ãä»äžããã° Colab ããããŒã«ã«ã® Solr ã«ãã€ãªããŸããããããŸã§ããæ°ã«ã¯ãªããã â©ïž
-
https://laboro.ai/activity/column/engineer/ãã£ãŒãã©ãŒãã³ã°ã軜éåããã¢ãã«å§çž®/ â©ïž
-
https://secon.dev/entry/2023/11/23/220000-ctranslate2-embeddings/ â©ïž
-
https://nowokay.hatenablog.com/entry/2023/06/15/065849 â©ïž
-
https://developers.cyberagent.co.jp/blog/archives/45308/ â©ïž
Discussion