μ΄ κΈμμλ Java μ curl μ μ¬μ©νμ¬ ChatGPT μλ² λ©(Embedding)μ μ μ©νλ λ°©λ²μ λν μ€μ©μ μΈ κ°μ΄λλ₯Ό μ 곡ν©λλ€. μμ°μ΄ μ²λ¦¬μ μ»΄ν¨ν λΉμ© μ κ°μ λμμ΄ λλ μλ² λ© κΈ°μ μ μ΄ν΄λ³΄κ³ , OpenAIμ GPT μν€ν μ² κΈ°λ°μ ChatGPTλ₯Ό νμ©νμ¬ ν μ€νΈ μλ² λ©μ μμ±νλ λ°©λ²μ μ€λͺ ν©λλ€.
κ°μ
μλ² λ©(Embedding) μ΄λ?
μλ² λ©(embedding)μ΄λ, μμ°μ΄ μ²λ¦¬, μ»΄ν¨ν° λΉμ , μΆμ² μμ€ν λ± λ€μν λΆμΌμμ μ¬μ©λλ κΈ°λ²μΌλ‘, κ³ μ°¨μμ λ°μ΄ν°λ₯Ό μ μ°¨μμ 곡κ°μ νννλ κ²μ μλ―Έν©λλ€. μ΄λ₯Ό ν΅ν΄ λ°μ΄ν°μ ꡬ쑰μ κ΄κ³λ₯Ό 보쑴νλ©΄μ μ»΄ν¨ν λΉμ©μ μ€μ΄κ³ ν¨μ¨μ±μ λμΌ μ μμ΅λλ€.
μμ°μ΄ μ²λ¦¬μμ μλ² λ©μ μ£Όλ‘ λ¨μ΄, λ¬Έμ₯, λ¬Έμ λ± ν μ€νΈ λ°μ΄ν°λ₯Ό λ²‘ν° ννλ‘ λ³ννλ μμ μ μλ―Έν©λλ€. ν μ€νΈ λ°μ΄ν°λ₯Ό 벑ν°λ‘ λ³ννλ©΄, κΈ°κ³νμ΅ μκ³ λ¦¬μ¦μ μ μ©νμ¬ λ€μν λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, κ°μ± λΆμ, κΈ°κ³ λ²μ, ν μ€νΈ λΆλ₯, μ 보 κ²μ λ±μ μμ μ μνν μ μμ΅λλ€.
μλ² λ© κ³Όμ μμ μ£Όμ λͺ©νλ μ μ¬ν μλ―Έλ₯Ό κ°μ§ λ¨μ΄λ λ¬Έμ₯μ΄ λ²‘ν° κ³΅κ°μμ κ°κΉμ΄ μμΉμ 맀νλλλ‘ νλ κ²μ λλ€. μ΄λ κ² νλ©΄ λ²‘ν° κ°μ 거리λ μ½μ¬μΈ μ μ¬λλ₯Ό κ³μ°νμ¬ ν μ€νΈ κ°μ μ μ¬μ±μ μΈ‘μ ν μ μμ΅λλ€.
ν μ€νΈ μλ² λ©μ μμ±νλ λ°©λ²μλ Word2Vec, GloVe, FastText, BERT, GPT λ± λ€μν μκ³ λ¦¬μ¦μ΄ μμ΅λλ€. μ΄λ¬ν μκ³ λ¦¬μ¦λ€μ κ°κ° λ€λ₯Έ λ°©μμΌλ‘ ν μ€νΈ λ°μ΄ν°λ₯Ό νμ΅νκ³ λ²‘ν° κ³΅κ°μ ννν©λλ€. μ΅κ·Όμ νΈλλλ Transformer κΈ°λ°μ λͺ¨λΈμΈ BERTμ GPTλ₯Ό μ¬μ©νμ¬ ν μ€νΈ μλ² λ©μ μμ±νλ κ²μ λλ€. μ΄λ€μ νΉν λ¬Έλ§₯ μ 보λ₯Ό ν¬ν¨νλ μλ² λ©μ μμ±ν μ μλ κ²μΌλ‘ μλ €μ Έ μμ΅λλ€.
ChatGPT μ μ¬μ©ν μλ² λ© μκ³ λ¦¬μ¦μ?
ChatGPTλ OpenAIμ GPT(Generative Pre-trained Transformer) μν€ν μ²λ₯Ό κΈ°λ°μΌλ‘ ν©λλ€. GPTλ Transformer λͺ¨λΈμ μ¬μ©νμ¬ ν μ€νΈ μλ² λ©μ μμ±ν©λλ€. Transformerλ Vaswani et al.μ μν΄ μ μλ μν€ν μ²λ‘, μμ°μ΄ μ²λ¦¬μμ λμ μ±λ₯μ 보μ¬μ£Όκ³ μμ΅λλ€.
GPTλ λΉμ§λ νμ΅μ μ¬μ©νμ¬ λκ·λͺ¨ ν μ€νΈ λ°μ΄ν°μ μμ μ¬μ νμ΅λ μΈμ΄ λͺ¨λΈμ λλ€. μ΄ μ¬μ νμ΅ κ³Όμ μμ GPTλ λ¬Έλ§₯ μ 보λ₯Ό ν¬μ°©νκ³ , μ΄λ₯Ό μλ² λ©μ ν¬ν¨μν€λ λ°©μμΌλ‘ μλν©λλ€. μ¬μ νμ΅ μ΄ν, GPTλ λ μμ λ°μ΄ν°μ μ μ¬μ©νμ¬ νΉμ μμ μ λ§κ² λ―ΈμΈ μ‘°μ (fine-tuning)λ μ μμ΅λλ€.
GPTμμμ μλ² λ©μ μ λ ₯ ν μ€νΈμ κ° λ¨μ΄λ ν ν°μ κ³ μ λ κΈΈμ΄μ 벑ν°λ‘ λ³νν©λλ€. μ΄λ κ² μμ±λ μλ² λ©μ Transformer μν€ν μ²μ μΈ΅μ κ±°μΉλ©΄μ κ° ν ν°μ λν λ¬Έλ§₯ μ 보λ₯Ό ν¬ν¨νκ² λ©λλ€. κ²°κ³Όμ μΌλ‘, λ¬Έμ₯μ΄λ λ¬Έμ μ 체μ μλ² λ©μ΄ μμ±λλ©°, μ΄λ₯Ό μ¬μ©νμ¬ λ€μν μμ°μ΄ μ²λ¦¬ μμ μ μνν μ μμ΅λλ€.
ChatGPTμ κ²½μ°, GPT-3 λ° κ·Έ μ΄μ λ²μ μ λΉν΄ λ ν° λͺ¨λΈ(GPT-4)μ μ¬μ©νμ¬ λ μ κ΅ν ν μ€νΈ μλ² λ©κ³Ό λ λμ μμ°μ΄ μ΄ν΄ λ₯λ ₯μ μ 곡ν©λλ€. μ΄λ₯Ό ν΅ν΄ ChatGPTλ μ¬μ©μμ μ§λ¬Έμ λν΄ λμ± μ νν λ΅λ³μ μμ±ν μ μμ΅λλ€.
μ€μ΅
μ€λΉ
μ€μ΅μ© λλ ν 리 μμ±:
bash
mkdir my-cosine-similarity-projectcd my-cosine-similarity-project
μμ λ°μ΄ν° μμ±νκΈ°
λ¨Όμ μμ ν
μ€νΈ νμΌμ λ§λ€μ΄ λ³΄κ² μ΅λλ€.
νλ‘μ νΈ λ£¨νΈμ gpt
ν΄λλ₯Ό μμ±ν©λλ€.
bash
mkdir gpt
μλ ν
μ€νΈλ₯Ό κ°κ° page1.txt
, page2.txt
, page3.txt
, page4.txt
, input.txt
λΌλ νμΌλ‘ μ μ₯ν΄μ£ΌμΈμ.
page1.txt
:
OpenAIλ 2015λ μ μ€λ¦½λ μΈκ³΅μ§λ₯ μ°κ΅¬ λ° μμ© νλ‘κ·Έλ¨ κ°λ° νμ¬λ‘, νμ¬λ GPT-3, DALL-E, Codex λ± λ€μν μΈκ³΅μ§λ₯ λͺ¨λΈκ³Ό μμ© νλ‘κ·Έλ¨μ κ°λ°νμ¬ μΈκ³μ μΈ κΈ°μ κΈ°μ μ€ νλλ‘ μ리 μ‘μμ΅λλ€. OpenAIμ μ£Όμ μ°κ΅¬ μ£Όμ λ μμ°μ΄ μ²λ¦¬, μ»΄ν¨ν° λΉμ , κ°ν νμ΅ λ±μ λλ€. νΉν, μμ°μ΄ μ²λ¦¬ λΆμΌμμλ GPT-3 λͺ¨λΈμ κ°λ°νμ¬ μ΄μ μλ λΆκ°λ₯νλ μμ°μ΄ μμ± λ° μ΄ν΄ λΆμΌμμ ν° λ°μ μ μ΄λ£¨μμ΅λλ€. λν, DALL-Eμ κ°μ μλ‘μ΄ λͺ¨λΈλ κ°λ°νμ¬ μΈκ³΅μ§λ₯ λΆμΌμ κ²½κ³λ₯Ό λνμ΅λλ€. OpenAIλ μΈκ³΅μ§λ₯ μ°κ΅¬λ₯Ό ν΅ν΄ μΈκ°μ μΆμ κ°μ νκ³ λ°μ μν€λ κ²μ λͺ©νλ‘ νκ³ μμ΅λλ€. μ΄λ₯Ό μν΄ λ€μν μ¬νμ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν μ°κ΅¬λ μ§ννκ³ μμΌλ©°, μμΈ‘ κ°λ₯μ±, μ λ’°μ±, 곡μ μ± λ±μ κ°μ‘°νμ¬ μΈκ³΅μ§λ₯ κΈ°μ μ λ°μ μ λν μ€λ¦¬μ μΈ κ³ λ―Όλ ν¨κ» μ΄λ£¨μ΄μ§κ³ μμ΅λλ€. λ°λΌμ, OpenAIλ μΈκ³΅μ§λ₯ λΆμΌμμ μ μΈκ³μ μΌλ‘ ν° μν₯λ ₯μ κ°μ§ κΈ°μ μ€ νλμ λλ€. μμΌλ‘ OpenAIμ μ°κ΅¬μ κΈ°μ κ°λ°μ ν΅ν΄ λμ± λ°μ λ μΈκ³΅μ§λ₯ κΈ°μ μ΄ λ§λ€μ΄μ§ κ²μΌλ‘ κΈ°λλ©λλ€.
page2.txt
:
λ¨Έμ λ¬λ(Machine Learning)μ μΈκ³΅μ§λ₯μ ν λΆμΌλ‘, μ»΄ν¨ν°κ° λ°μ΄ν°λ₯Ό μ¬μ©νμ¬ μ€μ€λ‘ νμ΅νλ μκ³ λ¦¬μ¦κ³Ό κΈ°μ μ μ°κ΅¬νλ λΆμΌμ λλ€. λ°μ΄ν°λ₯Ό κΈ°λ°μΌλ‘ μ»΄ν¨ν°κ° μ€μ€λ‘ ν¨ν΄μ νμ΅νκ³ μμΈ‘μ μνν μ μλλ‘ νλ κ²μ΄ λ¨Έμ λ¬λμ μ£Όμ λͺ©νμ λλ€. λ¨Έμ λ¬λμ μ§λνμ΅, λΉμ§λνμ΅, κ°ννμ΅ λ±μ λ°©λ²μΌλ‘ ꡬνλ©λλ€. μ§λνμ΅μ μ λ ₯κ³Ό μΆλ ₯ λ°μ΄ν°λ₯Ό μ΄μ©νμ¬ νμ΅νλ λ°©λ²μ΄λ©°, μλ₯Ό λ€μ΄ μ΄λ―Έμ§ λΆλ₯λ μμ± μΈμ λ±μ λΆμΌμμ νμ©λ©λλ€. λΉμ§λνμ΅μ μ λ ₯ λ°μ΄ν°λ§μΌλ‘ νμ΅νλ λ°©λ²μΌλ‘, λ°μ΄ν° ν΄λ¬μ€ν°λ§μ΄λ μ°¨μ μΆμ λ±μ νμ©λ©λλ€. κ°ννμ΅μ μμ΄μ νΈκ° νλμ ν΅ν΄ 보μμ μ»μΌλ©° μ€μ€λ‘ νμ΅νλ λ°©λ²μΌλ‘, κ²μ AIλ λ‘λ΄ μ μ΄ λ±μ νμ©λ©λλ€. λ¨Έμ λ¬λμ λκ·λͺ¨ λ°μ΄ν°λ₯Ό μ²λ¦¬νκ³ λΆμνλ λ°μ ν° λμμ μ£Όλ©°, μλ‘μ΄ λΆμΌμμμ μμ© κ°λ₯μ±λ κ³μν΄μ νμ₯λκ³ μμ΅λλ€. μλ₯Ό λ€μ΄ μλ£, κΈμ΅, λμ λ± λ€μν λΆμΌμμ λ¨Έμ λ¬λμ νμ©νμ¬ λ°μ΄ν° λΆμκ³Ό μμΈ‘μ μννκ³ μμ΅λλ€. λ°λΌμ, λ¨Έμ λ¬λμ μΈκ³΅μ§λ₯ λΆμΌμμ μ€μν κΈ°μ λ‘ μ리 μ‘κ³ μμΌλ©°, μμΌλ‘ λμ± λ°μ λ λ¨Έμ λ¬λ κΈ°μ μ ν΅ν΄ μλ‘μ΄ νμ κ³Ό λ°μ μ΄ μ΄λ£¨μ΄μ§ κ²μΌλ‘ κΈ°λλ©λλ€.
page3.txt
:
ν¬λ¦¬μμ΄ν°λ€μ λ€μν μ½ν μΈ λ₯Ό μ μνμ¬ μ¨λΌμΈμΌλ‘ λ°°ν¬νκ³ μμΌλ©°, μ΄λ₯Ό ν΅ν΄ μμ΅μ μ°½μΆνλ κ²½μ°λ λ§μ΅λλ€. νΉν, μ νλΈμ κ°μ λμμ νλ«νΌμμλ λ€μν λΆμΌμμ νλνλ ν¬λ¦¬μμ΄ν°λ€μ΄ λ§μ΄ νλνκ³ μμ΅λλ€. ν¬λ¦¬μμ΄ν°λ€μ μμ λ§μ μ€νμΌκ³Ό 컨ν μΈ λ₯Ό μ μνλ©°, μ΄λ₯Ό ν΅ν΄ λ§μ ν¬μ λͺ¨μΌκ³ μμ΅μ μ°½μΆνκ³ μμ΅λλ€. ν¬λ¦¬μμ΄ν°λ€μ μ½ν μΈ λ μ νλΈ λ±μ νλ«νΌμμ λ§μ μμ²μλ€μκ² λ ΈμΆλκ³ , κ΄κ³ μμ΅κ³Ό νμκΈ λ±μ ν΅ν΄ μμ΅μ μ°½μΆν μ μμ΅λλ€. λν, ν¬λ¦¬μμ΄ν°λ€μ ν¬λ€κ³Όμ μν΅μ ν΅ν΄ μμ μ μΈκΈ°λ₯Ό λμ΄κ³ , λμ± λ§μ μ¬λλ€μ΄ μμ μ μ½ν μΈ λ₯Ό λ³΄κ² λλ©°, μ΄λ₯Ό ν΅ν΄ λ λ§μ μμ΅μ μ°½μΆν μ μμ΅λλ€. μ΄λ₯Ό μν΄ ν¬λ¦¬μμ΄ν°λ€μ μ£ΌκΈ°μ μΌλ‘ μ½ν μΈ λ₯Ό μ λ°μ΄νΈνκ³ , ν¬λ€κ³Όμ μνΈμμ©μ μ€μμνμ¬ μ½ν μΈ λ₯Ό κ°μ ν΄ λκ°κ³ μμ΅λλ€. λ°λΌμ, ν¬λ¦¬μμ΄ν°λ€μ μμ λ§μ μκΉκ³Ό μ°½μμ±μ λ°ννμ¬ λ€μν μ½ν μΈ λ₯Ό μ μνκ³ , μ΄λ₯Ό ν΅ν΄ λ§μ ν¬λ€κ³Ό μμ΅μ μ°½μΆνκ³ μμ΅λλ€. μμΌλ‘λ ν¬λ¦¬μμ΄ν°λ€μ λ€μν λΆμΌμμ νλνμ¬ λμ± λ§μ μ¬λλ€μ μ¬λμ λ°κ³ , μλ‘μ΄ μ½ν μΈ μ μ°½μλ¬Όμ μ μν κ²μΌλ‘ κΈ°λλ©λλ€.
page4.txt
:
λνλ―Όκ΅ μ μκ³Ό μμμ μμ λͺ¨λ κ΅°μ¬μ μΆ©λμ΄ μΌμ΄λ μ¬λ‘ μ€ νλμ λλ€. λ μ μμ λμ μλμ λ°λ°νμ¬ κ΅μ μ¬νμ κ°μ μ΄ μμκ³ , μ μμ΄ μ’ μλ μ΄νμλ λ¨λΆν κ°μ κΈ΄μ₯μν©μ μ§μλκ³ μμ΅λλ€. λν, λ μ μ λͺ¨λ μΈλͺ νΌν΄κ° λ§λνκ² λ°μνμμ΅λλ€. λνλ―Όκ΅ μ μμ μ μ κΈ°κ° μ€ 36λ§ λͺ μ΄μμ κ΅°μΈκ³Ό λ―Όκ°μΈμ΄ μ¬λ§νμμΌλ©°, μμμ μμμλ 30λ§ λͺ μ΄μμ μΈλͺ νΌν΄κ° λ°μνμμ΅λλ€. λ μ μμ κ΅κ° μ보μ ν΅μΌ λ¬Έμ λ± λ€μν λ¬Έμ μ λν λλ¦½μ΄ λ°°κ²½μ΄ λμμ΅λλ€. λνλ―Όκ΅ μ μμ λΆνμ 침곡μΌλ‘ λ°λ°νμμΌλ©°, μμμ μμ λ¨λΆνμ μ μΉμ κ°λ±κ³Ό κ΅°μ¬μ λμΉλ‘ λ°λ°νμμ΅λλ€. λν, κ΅μ μ¬νμ κ°μ μ΄ μ΄λ£¨μ΄μ‘μ΅λλ€. λνλ―Όκ΅ μ μμμλ λ―Έκ΅°κ³Ό μ μκ΅°μ μ°Έμ μΌλ‘ μ μ μν©μ΄ μ’ μλμμΌλ©°, μμμ μμμλ μ€κ΅κ³Ό μ μκ΅°μ μ°Έμ μΌλ‘ μ μ μν©μ΄ μ’ μλμμ΅λλ€. νμ§λ§, λ μ μ λͺ¨λ μ΄νμλ λ¨λΆν κ°μ κΈ΄μ₯ μν©μ μ§μλκ³ μμ΅λλ€. λνλ―Όκ΅ μ μ μ΄ν λ¨λΆνμ 1953λ μ μ μ νμ μ 체결νμμΌλ©°, μμμ μ μ΄νμλ λΆνκ³Ό λ¨ν κ°μ κΈ΄μ₯μ΄ μ§μλκ³ μμ΅λλ€. λ°λΌμ, λνλ―Όκ΅ μ μκ³Ό μμμ μμ μλ‘ λΉμ·ν λ©΄μ΄ λ§μ΅λλ€. λ μ μ λͺ¨λ κ΅°μ¬μ μΆ©λμμ λ°μνμμΌλ©°, κ΅μ μ¬νμ κ°μ μ΄ μμκ³ , μΈλͺ νΌν΄κ° λ§λνκ² λ°μνμμΌλ©°, λ¨λΆν κ°μ κΈ΄μ₯ μν©μ μ§μλκ³ μμ΅λλ€.
input.txt
:
ChatGPT Embeddingμ GPT λͺ¨λΈμ μλ² λ© κΈ°μ μ μ΄μ©νμ¬, ν μ€νΈ λ°μ΄ν°λ₯Ό 벑ν°νν μ μλ κΈ°μ μ λλ€. μ΄λ₯Ό μ΄μ©νλ©΄ ν μ€νΈ λ°μ΄ν°λ₯Ό μ«μ λ°μ΄ν°λ‘ λ³ννμ¬ μννΈμ¨μ΄μ μ μ©ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄, ChatGPT Embedding κΈ°μ μ νμ©νμ¬ μννΈμ¨μ΄μ μ΄μμ€ν΄μ€ κΈ°λ₯μ λμ ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, μ¬μ©μκ° μ λ ₯ν μ§λ¬Έμ λν λ΅λ³μ μ 곡νκ±°λ, νΉμ μ£Όμ μ λν μ 보λ₯Ό μ 곡νλ λ±μ κΈ°λ₯μ ꡬνν μ μμ΅λλ€. ChatGPT Embeddingμ λ€μν λΆμΌμμ νμ©λκ³ μμΌλ©°, λνμ μΌλ‘ μμ°μ΄ μ²λ¦¬, μ±λ΄ κ°λ°, κ²μ μμ§ λ±μμ νμ©λ©λλ€. λν μ΄λ₯Ό νμ©νμ¬ λ³΄λ€ μ ννκ³ μ μ©ν μ 보λ₯Ό μ 곡ν¨μΌλ‘μ¨, μ¬μ©μλ€μ λ§μ‘±λμ νΈμμ±μ λμΌ μ μμ΅λλ€. λ°λΌμ, ChatGPT Embedding κΈ°μ μ μ°λ¦¬μ μννΈμ¨μ΄μ μ μ©νμ¬ λμ± μ§κ΄μ μ΄κ³ νΈλ¦¬ν μλΉμ€λ₯Ό μ 곡νλλ° ν° λμμ΄ λ κ²μ λλ€.
μ μ₯ν λ μν°λ₯Ό ν¬ν¨νμ§ λ§μμ£ΌμΈμ. λ€μ μ§νλλ curl
μμ μμλ escape νμ§ μμ΅λλ€.
μμ ν μ€νΈλ€μ ChatGPT μμ λ°μ· λμμ΅λλ€.
ChatGPT μλ² λ© λ²‘ν° μμ±νκΈ°
λ€μμΌλ‘, μ΄λ¬ν νμ΄μ§ ν
μ€νΈ νμΌλ€κ³Ό μ
λ ₯ ν
μ€νΈ νμΌμ Embeddings APIλ₯Ό μ¬μ©νμ¬ μλ² λ© λ²‘ν°λ‘ λ³ννλ €λ©΄ μλμ κ°μ curl
λͺ
λ Ήμ μ€νν΄μ£ΌμΈμ.
bash
# νμ΄μ§ μλ² λ© μμ±curl -X POST "https://api.openai.com/v1/embeddings"-H "Content-Type: application/json"-H "Authorization: Bearer YOUR_API_KEY"-d '{"input": ["'"$(cat page1.txt)"'", "'"$(cat page2.txt)"'", "'"$(cat page3.txt)"'", "'"$(cat page4.txt)"'"],"model": "text-embedding-ada-002"}' > page_embeddings.json# μ λ ₯ ν μ€νΈ μλ² λ© μμ±curl -X POST "https://api.openai.com/v1/embeddings"-H "Content-Type: application/json"-H "Authorization: Bearer YOUR_API_KEY"-d '{"input": ["'"$(cat input.txt)"'"],"model": "text-embedding-ada-002"}' > input_embedding.json
μ΄μ page_embeddings.json
κ³Ό input_embedding.json
νμΌμ κ°κ° νμ΄μ§ λ° μ
λ ₯ ν
μ€νΈμ μλ² λ© λ²‘ν°κ° μ μ₯λμ΄ μμ΅λλ€. μ΄λ₯Ό μ¬μ©νμ¬ μ½μ¬μΈ μ μ¬λμ κ°μ λ°©λ²μΌλ‘ μ μ¬λλ₯Ό κ³μ°νκ³ , κ²°κ³Όλ₯Ό μ λ ¬νμ¬ κ²μ κ²°κ³Όλ₯Ό μ»μ μ μμ΅λλ€.
/gpt/input.txt/gpt/input_embedding.json/gpt/page1.txt/gpt/page2.txt/gpt/page3.txt/gpt/page4.txt/gpt/page_embedding.json
μ½μ¬μΈ μ μ¬λ μΈ‘μ νκΈ°
Java Maven νλ‘μ νΈλ₯Ό μμ±νμ¬ μΈ‘μ ν©λλ€. μμνλ €λ©΄ λ€μ λ¨κ³λ₯Ό λ°λ₯΄μΈμ.
1. Maven νλ‘μ νΈ κ΅¬μ‘° μμ±:
mkdir -p src/main/javamkdir -p src/main/resourcesmkdir -p src/test/javamkdir -p src/test/resources
2. pom.xml
νμΌ μμ±:
νλ‘μ νΈ λλ ν 리μ 루νΈμ pom.xml
νμΌμ μμ±νκ³ λ€μ λ΄μ©μ μΆκ°νμΈμ.
xml
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>my-cosine-similarity-project</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><dependencies><!-- Gson: Java JSON library --><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.9</version></dependency><!-- Apache Commons Math: for linear algebra --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-math3</artifactId><version>3.6.1</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.2.0</version><configuration><archive><manifest><mainClass>com.example.cosinesimilarity.CosineSimilarityApp</mainClass></manifest></archive></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><version>3.2.4</version><executions><execution><phase>package</phase><goals><goal>shade</goal></goals><configuration><transformers><transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"><mainClass>com.example.cosinesimilarity.CosineSimilarityApp</mainClass></transformer></transformers></configuration></execution></executions></plugin></plugins></build></project>
3. μμ€ μ½λ μΆκ°:
μμμ μ 곡ν CosineSimilarityCalculator
ν΄λμ€λ₯Ό src/main/java
λλ ν 리μ μ μ ν ν¨ν€μ§ ꡬ쑰μ λ§κ² μΆκ°νμΈμ. μλ₯Ό λ€μ΄, ν¨ν€μ§ μ΄λ¦μ΄ com.example.cosinesimilarity
λΌλ©΄, λ€μκ³Ό κ°μ λλ ν 리 ꡬ쑰λ₯Ό μμ±ν©λλ€.
src/main/java/com/example/cosinesimilarity/CosineSimilarityCalculator.java
νμΌμ μμ±νκ³ λ€μ μ½λλ₯Ό μΆκ°νμΈμ.
java
package com.example.cosinesimilarity;import org.apache.commons.math3.linear.ArrayRealVector;import org.apache.commons.math3.linear.RealVector;public class CosineSimilarityCalculator {/*** Create a RealVector from a double array.** @param array the input double array* @return a RealVector representing the input array*/public static RealVector createRealVector(double[] array) {return new ArrayRealVector(array);}/*** Compute the cosine similarity between two RealVectors.** @param vector1 the first RealVector* @param vector2 the second RealVector* @return the cosine similarity between the two input RealVectors*/public double computeCosineSimilarity(RealVector vector1, RealVector vector2) {double dotProduct = vector1.dotProduct(vector2);double normA = vector1.getNorm();double normB = vector2.getNorm();if (normA == 0 || normB == 0) {return 0;} else {return dotProduct / (normA * normB);}}}
src/main/java/com/example/cosinesimilarity/CosineSimilarityApp.java
νμΌμ μμ±νκ³ λ€μ μ½λλ₯Ό μΆκ°νμΈμ.
java
package com.example.cosinesimilarity;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;import org.apache.commons.math3.linear.RealVector;import java.io.FileReader;import java.io.IOException;import java.lang.reflect.Type;import java.util.List;public class CosineSimilarityApp {public static void main(String[] args) {if (args.length < 2) {System.out.println("Usage: java -jar my-cosine-similarity-project-1.0-SNAPSHOT.jar <path_to_page_embeddings.json> <path_to_input_embedding.json>");return;}String pageEmbeddingsPath = args[0];String inputEmbeddingPath = args[1];System.out.println(pageEmbeddingsPath);System.out.println(inputEmbeddingPath);Gson gson = new Gson();Type mapType = new TypeToken<ChatGptResponse>() {}.getType();try {// Read page_embeddings.json and input_embedding.json filesChatGptResponse resPages = gson.fromJson(new FileReader(pageEmbeddingsPath), mapType);ChatGptResponse resInput = gson.fromJson(new FileReader(inputEmbeddingPath), mapType);// Assuming there is only one entry in input_embedding.jsondouble[] inputEmbeddings = resInput.data.get(0).embedding;RealVector inputVector = CosineSimilarityCalculator.createRealVector(inputEmbeddings);CosineSimilarityCalculator calculator = new CosineSimilarityCalculator();for (EmbeddingData pageEmbeddingData : resPages.data) {RealVector pageVector = CosineSimilarityCalculator.createRealVector(pageEmbeddingData.embedding);double similarity = calculator.computeCosineSimilarity(inputVector, pageVector);System.out.println("Cosine similarity between input.txt and page" + (pageEmbeddingData.index + 1) + ".txt: " + similarity);}} catch (IOException e) {System.out.println("Error reading input files: " + e.getMessage());}}static class ChatGptResponse {String object;List<EmbeddingData> data;String model;}static class EmbeddingData {String object;Long index;double[] embedding;}}
4. Maven λΉλ:
νλ‘μ νΈ λλ ν 리μμ λ€μ λͺ λ Ήμ μ€ννμ¬ Maven νλ‘μ νΈλ₯Ό λΉλνμΈμ.
bash
mvn clean install
λΉλλ₯Ό μ±κ³΅μ μΌλ‘ μλ£νλ©΄, target
λλ ν 리μ JAR νμΌμ΄ μμ±λ©λλ€.
5. JAR νμΌ μ€ν:
λΉλκ° μλ£λλ©΄, μμ±λ JAR νμΌμ μ€ννμ¬ page_embeddings.json
κ³Ό input_embedding.json
νμΌμ μ½μ¬μΈ μ μ¬λλ₯Ό κ³μ°ν μ μμ΅λλ€. λ€μκ³Ό κ°μ΄ JAR νμΌμ μ€ννμΈμ.
bash
java -jar target/my-cosine-similarity-project-1.0-SNAPSHOT.jar gpt/page_embeddings.json gpt/input_embedding.json
μ΄μ μ΄ μ½λλ₯Ό μ¬μ©νμ¬ μ λ ₯λ JSON νμΌμ λν μ½μ¬μΈ μ μ¬λλ₯Ό κ³μ°ν μ μμ΅λλ€. νμν κ²½μ° μ½λλ₯Ό μμ νμ¬ μΆκ° κΈ°λ₯μ ꡬννμΈμ.
6. κ²°κ³Ό:
bash
gpt/test/page_embeddings.jsongpt/test/input_embedding.jsonCosine similarity between input.txt and page1.txt: 0.8437019406338282Cosine similarity between input.txt and page2.txt: 0.8227343059896893Cosine similarity between input.txt and page3.txt: 0.7883895187393262Cosine similarity between input.txt and page4.txt: 0.7232376661913258
λ§μΉλ©°
ChatGPT μλ² λ©μ λν΄ μ΄ν΄λ³΄μκ³ , curl
μ μ¬μ©νμ¬ μλ² λ© λ²‘ν°λ₯Ό μ»λ λ°©λ²κ³Ό Java Maven νκ²½μμ μ½μ¬μΈ μ μ¬λλ₯Ό ꡬννμ¬ μ μ¬λ λ°μ΄ν°λ₯Ό μΆμΆν΄ 보μμ΅λλ€. μ€μ μμ€ν
μμλ λ λ§μ νμ΄μ§λ₯Ό μ²λ¦¬ν΄μΌ νλ―λ‘, μΌκ΄ μ²λ¦¬ λλ λ³λ ¬ μ²λ¦¬λ₯Ό ν΅ν΄ ν¨μ¨μ±μ λμΌ μ μμ΅λλ€.
μνλ κ²½μ° Elasticsearchμ κ°μ κ²μ μμ§μ μ¬μ©νμ¬ μλ² λ© λ²‘ν°λ₯Ό μΈλ±μ±νκ³ κ²μ κ²°κ³Όλ₯Ό λμ± λΉ λ₯΄κ² μ»μ μ μμ΅λλ€. Elasticsearchλ μ μ¬μ±μ μΈ‘μ ν λ μ¬μ©ν μ μλ λ€μν 거리 ν¨μλ₯Ό μ 곡νλ©°, κ·Έ μ€ νλκ° μ½μ¬μΈ μ μ¬λμ λλ€.
μ¬λ¬λΆμ νλ‘μ νΈμμλ ChatGPT μλ² λ©μ μ¬μ©νμ¬ μ€μ©μ μ΄κ³ λμ μ±λ₯μ μμ°μ΄ μ²λ¦¬ κΈ°λ₯μ ꡬνν μ μκΈ°λ₯Ό λ°λλλ€.
μ°Έμ‘°
- Source : https://github.com/Deanly/chatgpt-embedding-similarity
- wikipedia : https://en.wikipedia.org/wiki/Embedding
- OpenAI Embeddings API: https://beta.openai.com/docs/api-reference/embeddings
- Open κΈ°μ μμ : λ₯ λ¬λμ μ΄μ©ν μμ°μ΄ μ²λ¦¬ μ λ¬Έ
- ChatGPT-3 λ Όλ¬Έ : Language Models are Few-Shot Learners
- ChatGPT-4 μλ£: GPT-3 μ GPT-4 μ μ°¨μ΄μ